3 namespace BookStack\Search;
5 use BookStack\Search\Options\SearchOption;
12 protected array $options = [];
14 public function __construct(array $options = [])
16 $this->options = $options;
19 public function toValueArray(): array
21 return array_map(fn(SearchOption $option) => $option->value, $this->options);
24 public function toValueMap(): array
27 foreach ($this->options as $index => $option) {
28 $key = $option->getKey() ?? $index;
29 $map[$key] = $option->value;
34 public function merge(SearchOptionSet $set): self
36 return new self(array_merge($this->options, $set->options));
39 public function filterEmpty(): self
41 $filteredOptions = array_values(array_filter($this->options, fn (SearchOption $option) => !empty($option->value)));
42 return new self($filteredOptions);
46 * @param class-string<SearchOption> $class
48 public static function fromValueArray(array $values, string $class): self
50 $options = array_map(fn($val) => new $class($val), $values);
51 return new self($options);
55 * @return SearchOption[]
57 public function all(): array
59 return $this->options;
63 * @return SearchOption[]
65 public function negated(): array
67 return array_values(array_filter($this->options, fn (SearchOption $option) => $option->negated));