3 namespace BookStack\Search;
5 use BookStack\Search\Options\SearchOption;
8 * @template T of SearchOption
15 protected array $options = [];
17 public function __construct(array $options = [])
19 $this->options = $options;
22 public function toValueArray(): array
24 return array_map(fn(SearchOption $option) => $option->value, $this->options);
27 public function toValueMap(): array
30 foreach ($this->options as $index => $option) {
31 $key = $option->getKey() ?? $index;
32 $map[$key] = $option->value;
37 public function merge(SearchOptionSet $set): self
39 return new self(array_merge($this->options, $set->options));
42 public function filterEmpty(): self
44 $filteredOptions = array_values(array_filter($this->options, fn (SearchOption $option) => !empty($option->value)));
45 return new self($filteredOptions);
49 * @param class-string<SearchOption> $class
51 public static function fromValueArray(array $values, string $class): self
53 $options = array_map(fn($val) => new $class($val), $values);
54 return new self($options);
60 public function all(): array
62 return $this->options;
68 public function negated(): self
70 $values = array_values(array_filter($this->options, fn (SearchOption $option) => $option->negated));
71 return new self($values);
77 public function nonNegated(): self
79 $values = array_values(array_filter($this->options, fn (SearchOption $option) => !$option->negated));
80 return new self($values);