Skip to content

Commit bc68fe1

Browse files
committed
refactor: update filter handling and introduce new filter types and events
1 parent b4a1b4c commit bc68fe1

76 files changed

Lines changed: 1517 additions & 1220 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

config/services.yaml

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -21,10 +21,6 @@ services:
2121
- ../src/Engine/Loader
2222
- ../src/Engine/View
2323

24-
HeimrichHannot\FlareBundle\Filter\Resolver\FilterInvokerResolver:
25-
arguments:
26-
$invokerLocator: null # populated by compiler pass
27-
2824
# Util classes registered as twig globals must be defined as services
2925
HeimrichHannot\FlareBundle\Util\Env: ~
3026
HeimrichHannot\FlareBundle\Util\Str: ~

src/Collection/FilterDefinitionCollection.php renamed to src/Collection/ConfiguredFilterCollection.php

Lines changed: 17 additions & 39 deletions
Original file line numberDiff line numberDiff line change
@@ -5,14 +5,14 @@
55
namespace HeimrichHannot\FlareBundle\Collection;
66

77
use Contao\StringUtil;
8-
use HeimrichHannot\FlareBundle\Specification\FilterDefinition;
8+
use HeimrichHannot\FlareBundle\Specification\ConfiguredFilter;
99

1010
/**
11-
* @method array<int, FilterDefinition> all() Get the items of the collection.
12-
* @method array<int, FilterDefinition> values() Get the values of the collection.
13-
* @method \Traversable<string, FilterDefinition> getIterator() Iterator for the collection items.
11+
* @method array<int|string, ConfiguredFilter> all() Get the items of the collection.
12+
* @method array<int|string, ConfiguredFilter> values() Get the values of the collection.
13+
* @method \Traversable<string, ConfiguredFilter> getIterator() Iterator for the collection items.
1414
*/
15-
class FilterDefinitionCollection extends AbstractCollection
15+
class ConfiguredFilterCollection extends AbstractCollection
1616
{
1717
public function __construct(
1818
?array $items = null,
@@ -36,7 +36,7 @@ private function initItems(array $items): void
3636
}
3737
}
3838

39-
public function get(string $key): ?FilterDefinition
39+
public function get(string $key): ?ConfiguredFilter
4040
{
4141
return $this->items[$key] ?? null;
4242
}
@@ -50,12 +50,12 @@ public function hasType(string $type): bool
5050
{
5151
return \array_reduce(
5252
$this->items,
53-
static fn (bool $carry, FilterDefinition $filter): bool => $carry || $filter->getType() === $type,
53+
static fn (bool $carry, ConfiguredFilter $filter): bool => $carry || $filter->getElementType() === $type,
5454
false
5555
);
5656
}
5757

58-
public function add(FilterDefinition ...$item): static
58+
public function add(ConfiguredFilter ...$item): static
5959
{
6060
foreach ($item as $filter) {
6161
do {
@@ -68,15 +68,15 @@ public function add(FilterDefinition ...$item): static
6868
return $this;
6969
}
7070

71-
public function set(string $key, FilterDefinition $filter): void
71+
public function set(string $key, ConfiguredFilter $filter): void
7272
{
7373
$this->items[$key] = $filter;
7474
}
7575

7676
/**
77-
* @param FilterDefinition|string $item The item to remove or its key.
77+
* @param ConfiguredFilter|string $item The item to remove or its key.
7878
*/
79-
public function remove(FilterDefinition|string $item): bool
79+
public function remove(ConfiguredFilter|string $item): bool
8080
{
8181
if (\is_string($item)) {
8282
if (!\array_key_exists($item, $this->items)) {
@@ -90,58 +90,36 @@ public function remove(FilterDefinition|string $item): bool
9090

9191
$filtered = \array_filter(
9292
$this->items,
93-
static fn (FilterDefinition $filter): bool => $filter !== $item
93+
static fn (ConfiguredFilter $filter): bool => $filter !== $item
9494
);
9595

9696
$this->items = $filtered;
9797

9898
return \count($this->items) < $beforeCount;
9999
}
100100

101-
/**
102-
* Serialize the collection.
103-
*
104-
* @return string Serialized representation of the collection.
105-
*/
106101
public function serialize(): string
107102
{
108103
return \serialize($this->items);
109104
}
110105

111-
/**
112-
* Unserialize data into the collection.
113-
*
114-
* @param string $data The serialized data.
115-
* @throws \UnexpectedValueException if the data is not an array of the expected type.
116-
*/
117106
public function unserialize(string $data): void
118107
{
119108
$unserialized = StringUtil::deserialize($data);
120109

121-
if (!is_array($unserialized)) {
122-
throw new \UnexpectedValueException("Invalid data: expected an array.");
110+
if (!\is_array($unserialized)) {
111+
throw new \UnexpectedValueException('Invalid data: expected an array.');
123112
}
124113

125114
$this->items = [];
126115
$this->initItems($unserialized);
127116
}
128117

129-
/**
130-
* Magic method for serialization.
131-
*
132-
* @return array<int, FilterDefinition> Data to serialize.
133-
*/
134118
public function __serialize(): array
135119
{
136120
return $this->items;
137121
}
138122

139-
/**
140-
* Magic method for unserialization.
141-
*
142-
* @param array<int, FilterDefinition> $data Data array to restore into the object.
143-
* @throws \UnexpectedValueException if any item is of an incorrect type.
144-
*/
145123
public function __unserialize(array $data): void
146124
{
147125
$this->items = [];
@@ -150,14 +128,14 @@ public function __unserialize(array $data): void
150128

151129
public function __clone(): void
152130
{
153-
$this->items = \array_map(static fn (FilterDefinition $item): FilterDefinition => clone $item, $this->items);
131+
$this->items = \array_map(static fn (ConfiguredFilter $item): ConfiguredFilter => clone $item, $this->items);
154132
}
155133

156134
public function hash(): string
157135
{
158136
return \sha1(\serialize(\array_map(
159-
static fn (FilterDefinition $filter): string => $filter->hash(),
137+
static fn (ConfiguredFilter $filter): string => $filter->hash(),
160138
$this->items
161139
)));
162140
}
163-
}
141+
}

src/Contract/FilterElement/HydrateFormContract.php

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,11 +4,11 @@
44

55
namespace HeimrichHannot\FlareBundle\Contract\FilterElement;
66

7-
use HeimrichHannot\FlareBundle\Specification\FilterDefinition;
7+
use HeimrichHannot\FlareBundle\Specification\ConfiguredFilter;
88
use HeimrichHannot\FlareBundle\Specification\ListSpecification;
99
use Symfony\Component\Form\FormInterface;
1010

1111
interface HydrateFormContract
1212
{
13-
public function hydrateForm(FormInterface $field, ListSpecification $list, FilterDefinition $filter): void;
13+
public function hydrateForm(FormInterface $field, ListSpecification $list, ConfiguredFilter $filter): void;
1414
}

src/Contract/FilterElement/IntrinsicValueContract.php

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44

55
namespace HeimrichHannot\FlareBundle\Contract\FilterElement;
66

7-
use HeimrichHannot\FlareBundle\Specification\FilterDefinition;
7+
use HeimrichHannot\FlareBundle\Specification\ConfiguredFilter;
88
use HeimrichHannot\FlareBundle\Specification\ListSpecification;
99

1010
interface IntrinsicValueContract
@@ -19,5 +19,5 @@ interface IntrinsicValueContract
1919
* @return mixed Any intrinsic value of which the FilterElement's invokers know how to interpret. Will be accessible
2020
* through `$invocation->getValue()` from the invoker methods.
2121
*/
22-
public function getIntrinsicValue(ListSpecification $list, FilterDefinition $filter): mixed;
22+
public function getIntrinsicValue(ListSpecification $list, ConfiguredFilter $filter): mixed;
2323
}

src/Contract/FilterElement/RuntimeValueContract.php

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44

55
namespace HeimrichHannot\FlareBundle\Contract\FilterElement;
66

7-
use HeimrichHannot\FlareBundle\Specification\FilterDefinition;
7+
use HeimrichHannot\FlareBundle\Specification\ConfiguredFilter;
88
use HeimrichHannot\FlareBundle\Specification\ListSpecification;
99

1010
interface RuntimeValueContract
@@ -19,5 +19,5 @@ interface RuntimeValueContract
1919
* @return mixed The processed value, which will be passed to the filter method upon invocation, where it can
2020
* be accessed through `$invocation->getValue()`.
2121
*/
22-
public function processRuntimeValue(mixed $value, ListSpecification $list, FilterDefinition $filter): mixed;
23-
}
22+
public function processRuntimeValue(mixed $value, ListSpecification $list, ConfiguredFilter $filter): mixed;
23+
}

src/DataContainer/FilterContainer.php

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -11,9 +11,9 @@
1111
use HeimrichHannot\FlareBundle\Model\ListModel;
1212
use HeimrichHannot\FlareBundle\Query\Factory\ListExecutionContextFactory;
1313
use HeimrichHannot\FlareBundle\Query\ListExecutionContext;
14-
use HeimrichHannot\FlareBundle\Specification\Factory\FilterDefinitionFactory;
14+
use HeimrichHannot\FlareBundle\Specification\Factory\ConfiguredFilterFactory;
1515
use HeimrichHannot\FlareBundle\Specification\Factory\ListSpecificationFactory;
16-
use HeimrichHannot\FlareBundle\Specification\FilterDefinition;
16+
use HeimrichHannot\FlareBundle\Specification\ConfiguredFilter;
1717
use HeimrichHannot\FlareBundle\Specification\ListSpecification;
1818
use HeimrichHannot\FlareBundle\Util\CallbackHelper;
1919

@@ -22,7 +22,7 @@ class FilterContainer implements FlareCallbackContainerInterface
2222
public const TABLE_NAME = 'tl_flare_filter';
2323

2424
public function __construct(
25-
private readonly FilterDefinitionFactory $filterDefinitionFactory,
25+
private readonly ConfiguredFilterFactory $configuredFilterFactory,
2626
private readonly FlareCallbackManager $callbacks,
2727
private readonly ListExecutionContextFactory $listExecutionContextFactory,
2828
private readonly ListSpecificationFactory $listSpecificationFactory,
@@ -64,7 +64,7 @@ public function handleFieldOptions(?DataContainer $dc, string $target): array
6464

6565
$callbacks = $this->callbacks->getFilterCallbacks($filterModel->type, $target);
6666

67-
$filterDefinition = $this->filterDefinitionFactory->create($filterModel);
67+
$configuredFilter = $this->configuredFilterFactory->create($filterModel);
6868
$listSpecification = $this->listSpecificationFactory->create($listModel);
6969
$context = $this->listExecutionContextFactory->create($listSpecification);
7070
$tables = $context->tableAliasRegistry->getTables();
@@ -74,7 +74,7 @@ public function handleFieldOptions(?DataContainer $dc, string $target): array
7474
FilterModel::class => $filterModel,
7575
ListModel::class => $listModel,
7676
DataContainer::class => $dc,
77-
FilterDefinition::class => $filterDefinition,
77+
ConfiguredFilter::class => $configuredFilter,
7878
ListSpecification::class => $listSpecification,
7979
ListExecutionContext::class => $context,
8080
'tables' => $tables,
@@ -146,4 +146,4 @@ public function getModelsFromDataContainer(?DataContainer $dc, bool $ignoreType
146146
}
147147

148148
// </editor-fold>
149-
}
149+
}

src/DependencyInjection/Attribute/AsFilterInvoker.php

Lines changed: 0 additions & 28 deletions
This file was deleted.

src/DependencyInjection/Compiler/RegisterFilterInvokersPass.php

Lines changed: 0 additions & 114 deletions
This file was deleted.

0 commit comments

Comments
 (0)