Skip to content

Commit 7e748ab

Browse files
✨ add float condition type
1 parent 27f41df commit 7e748ab

5 files changed

Lines changed: 50 additions & 9 deletions

File tree

src/QueryBuilder.php

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,9 @@
2828
use Illuminate\Database\Eloquent\Model;
2929
use Livewire\Component;
3030

31+
/**
32+
* @method saveToSession()
33+
*/
3134
abstract class QueryBuilder extends Component
3235
{
3336

src/Support/Concerns/WithQueryBuilder.php

Lines changed: 30 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,6 @@
1010
use ACTTraining\QueryBuilder\Support\Criteria\DateCriteria;
1111
use ACTTraining\QueryBuilder\Support\Criteria\LikeCriteria;
1212
use ACTTraining\QueryBuilder\Support\Criteria\NullCriteria;
13-
use Illuminate\Support\Arr;
1413
use Illuminate\Support\Enumerable;
1514

1615
trait WithQueryBuilder
@@ -19,12 +18,13 @@ trait WithQueryBuilder
1918

2019
public string $andOr = 'and';
2120

21+
/** @noinspection PhpUndefinedMethodInspection */
2222
public function addCriteria(): void
2323
{
2424
$this->resetPage();
2525

2626
$conditions = $this->resolveConditions();
27-
$condition = Arr::first($conditions);
27+
$condition = $conditions->first();
2828

2929
$operations = $condition->toArray()['operations'];
3030
$firstOperationKey = array_key_first($operations);
@@ -36,7 +36,8 @@ public function addCriteria(): void
3636
'extraValue' => null,
3737
'requiresExtra' => false,
3838
'displayValue' => $condition->displayValue(),
39-
'inputType' => $condition->inputType(),
39+
'inputType' => $condition->inputType,
40+
'factor' => $condition->factor,
4041
];
4142
}
4243

@@ -63,6 +64,7 @@ public function updatedCriteria($value, $indexOrKeyName): void
6364
'requiresExtra' => false,
6465
'displayValue' => $this->displayValueForOperation($firstOperationKey),
6566
'inputType' => $this->inputTypeForCondition($value),
67+
'factor' => $this->factorForCondition($value),
6668
];
6769
}
6870

@@ -81,7 +83,11 @@ public function operations(string $key): array
8183
$conditions = $this->resolveConditions();
8284
$condition = $conditions->firstWhere('key', $key);
8385

84-
return $condition->toArray()['operations'];
86+
if ($condition) {
87+
return $condition->toArray()['operations'];
88+
}
89+
90+
return [];
8591
}
8692

8793
public function displayValueForOperation($value): bool
@@ -94,7 +100,15 @@ public function inputTypeForCondition($key): string
94100
$conditions = $this->resolveConditions();
95101
$condition = $conditions->firstWhere('key', $key);
96102

97-
return $condition->inputType();
103+
return $condition->inputType;
104+
}
105+
106+
public function factorForCondition($key): string
107+
{
108+
$conditions = $this->resolveConditions();
109+
$condition = $conditions->firstWhere('key', $key);
110+
111+
return $condition->factor;
98112
}
99113

100114
public function displayExtraValueForOperation($value): bool
@@ -106,6 +120,8 @@ public function removeCriteria($index): void
106120
{
107121
unset($this->criteria[$index]);
108122
$this->criteria = array_values($this->criteria);
123+
124+
$this->saveToSession();
109125
}
110126

111127
public function setAndOr($condition): void
@@ -155,22 +171,27 @@ private function getCriteriaClass($criteria
155171
$column = $criteria['column'];
156172
$value = $criteria['value'] ?? null;
157173
$extraValue = $criteria['extraValue'] ?? null;
174+
$factor = $criteria['factor'] ?? null;
158175

159176
if (is_null($value) && $criteria['displayValue']) {
160177
return null;
161178
}
162179

180+
if ($factor) {
181+
$value = $value * $factor;
182+
}
183+
163184
return match ($criteria['operation']) {
164185
'equals' => new CompareCriteria($column, $value, '='),
165186
'not_equals' => new CompareCriteria($column, $value, '!='),
166187
'greater_than' => new CompareCriteria($column, $value, '>'),
167188
'less_than' => new CompareCriteria($column, $value, '<'),
168189
'greater_than_or_equal' => new CompareCriteria($column, $value, '>='),
169190
'less_than_or_equal' => new CompareCriteria($column, $value, '<='),
170-
'contains' => new LikeCriteria($column, '%'.$value.'%'),
171-
'not_contains' => new LikeCriteria($column, '%'.$value.'%', 'not like'),
172-
'starts_with' => new LikeCriteria($column, $value.'%'),
173-
'ends_with' => new LikeCriteria($column, '%'.$value),
191+
'contains' => new LikeCriteria($column, '%' . $value . '%'),
192+
'not_contains' => new LikeCriteria($column, '%' . $value . '%', 'not like'),
193+
'starts_with' => new LikeCriteria($column, $value . '%'),
194+
'ends_with' => new LikeCriteria($column, '%' . $value),
174195
'is_true' => new BooleanCriteria($column, true),
175196
'is_false' => new BooleanCriteria($column, false),
176197
'is' => new DateCriteria($column, $value, '='),

src/Support/Concerns/WithReportBuilder.php

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
use ACTTraining\QueryBuilder\Support\Columns\DateColumn;
88
use ACTTraining\QueryBuilder\Support\Conditions\BooleanCondition;
99
use ACTTraining\QueryBuilder\Support\Conditions\DateCondition;
10+
use ACTTraining\QueryBuilder\Support\Conditions\FloatCondition;
1011
use ACTTraining\QueryBuilder\Support\Conditions\NumberCondition;
1112
use ACTTraining\QueryBuilder\Support\Conditions\TextCondition;
1213
use Livewire\Attributes\Validate;
@@ -99,6 +100,7 @@ public function buildConditions(): array
99100
}
100101
$conditions[] = match ($column['type'] ?? null) {
101102
'number' => NumberCondition::make($column['label'], $column['key']),
103+
'float' => FloatCondition::make($column['label'], $column['key']),
102104
'boolean' => BooleanCondition::make($column['label'], $column['key']),
103105
'date' => DateCondition::make($column['label'], $column['key']),
104106
default => TextCondition::make($column['label'], $column['key'])
@@ -123,4 +125,9 @@ public function loadReportBuilder($id): void
123125
{
124126
//
125127
}
128+
129+
public function saveToSession(): void
130+
{
131+
//
132+
}
126133
}

src/Support/Conditions/BaseCondition.php

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,8 @@ class BaseCondition
1717

1818
protected bool $displayValue = true;
1919

20+
public ?int $factor = null;
21+
2022
public function __construct($key, $label)
2123
{
2224
$this->key = $key;
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
<?php
2+
3+
namespace ACTTraining\QueryBuilder\Support\Conditions;
4+
5+
class FloatCondition extends NumberCondition
6+
{
7+
public ?int $factor = 100;
8+
}

0 commit comments

Comments
 (0)