diff --git a/src/Dictionaries/BasicDictionary.php b/src/Dictionaries/BasicDictionary.php index 4b17dd19d0..52e2f7363c 100644 --- a/src/Dictionaries/BasicDictionary.php +++ b/src/Dictionaries/BasicDictionary.php @@ -16,11 +16,17 @@ public function get(string $key): ?Item } public function options(?string $search = null): array + { + return collect($this->optionItems($search)) + ->mapWithKeys(fn (Item $item) => [$item->value() => $item->label()]) + ->all(); + } + + public function optionItems(?string $search = null): array { return $this ->getFilteredItems() ->when($search, fn ($collection) => $collection->filter(fn ($item) => $this->matchesSearchQuery($search, $item))) - ->mapWithKeys(fn (Item $item) => [$item->value() => $item->label()]) ->all(); } diff --git a/src/Dictionaries/Dictionary.php b/src/Dictionaries/Dictionary.php index c94771a254..dd704bc380 100644 --- a/src/Dictionaries/Dictionary.php +++ b/src/Dictionaries/Dictionary.php @@ -68,4 +68,11 @@ private function getInferredGqlType($value) return GraphQL::string(); } + + public function optionItems(?string $search = null): array + { + return collect($this->options($search)) + ->map(fn ($label, $value) => new Item($value, $label, $this->get($value)->extra())) + ->all(); + } } diff --git a/src/Tags/Dictionary/Dictionary.php b/src/Tags/Dictionary/Dictionary.php index 6fbb0e55be..8482e0193c 100644 --- a/src/Tags/Dictionary/Dictionary.php +++ b/src/Tags/Dictionary/Dictionary.php @@ -47,8 +47,8 @@ private function loop($handle) throw new DictionaryNotFoundException($handle); } - $options = (new DataCollection($dictionary->options($search))) - ->map(fn ($label, $value) => new DictionaryItem($dictionary->get($value)->toArray())) + $options = (new DataCollection($dictionary->optionItems($search))) + ->map(fn ($item) => new DictionaryItem($item->toArray())) ->values(); $query = (new ItemQueryBuilder)->withItems($options);