diff --git a/resources/js/components/fieldtypes/TagsFieldtype.vue b/resources/js/components/fieldtypes/TagsFieldtype.vue index b3c0c3151d..eb6b9815e1 100644 --- a/resources/js/components/fieldtypes/TagsFieldtype.vue +++ b/resources/js/components/fieldtypes/TagsFieldtype.vue @@ -4,6 +4,7 @@ :name="name" :clearable="config.clearable" :close-on-select="false" + :options="config.options" :disabled="config.disabled || isReadOnly" :multiple="true" :placeholder="__(config.placeholder)" diff --git a/resources/lang/en/fieldtypes.php b/resources/lang/en/fieldtypes.php index 9c2d9a928c..16ff2b753a 100644 --- a/resources/lang/en/fieldtypes.php +++ b/resources/lang/en/fieldtypes.php @@ -159,6 +159,7 @@ 'table.title' => 'Table', 'taggable.title' => 'Taggable', 'taggable.config.placeholder' => 'Type and press ↩ Enter', + 'taggable.config.options' => 'Provide pre-defined tags that can be selected.', 'taxonomies.title' => 'Taxonomies', 'template.config.blueprint' => 'Adds a "map to blueprint" option. Learn more in the [documentation](https://statamic.dev/views#inferring-templates-from-entry-blueprints).', 'template.config.folder' => 'Only show templates in this folder.', diff --git a/src/Fieldtypes/Assets/Assets.php b/src/Fieldtypes/Assets/Assets.php index 4fc4719630..450d861cd6 100644 --- a/src/Fieldtypes/Assets/Assets.php +++ b/src/Fieldtypes/Assets/Assets.php @@ -8,9 +8,11 @@ use Statamic\Facades\Asset; use Statamic\Facades\AssetContainer; use Statamic\Facades\GraphQL; +use Statamic\Facades\Scope; use Statamic\Fields\Fieldtype; use Statamic\GraphQL\Types\AssetInterface; use Statamic\Http\Resources\CP\Assets\Asset as AssetResource; +use Statamic\Query\Scopes\Filter; use Statamic\Support\Arr; use Statamic\Support\Str; @@ -96,6 +98,11 @@ protected function configFieldItems(): array 'display' => __('Query Scopes'), 'instructions' => __('statamic::fieldtypes.assets.config.query_scopes'), 'type' => 'taggable', + 'options' => Scope::all() + ->reject(fn ($scope) => $scope instanceof Filter) + ->map->handle() + ->values() + ->all(), ], ], ], diff --git a/src/Fieldtypes/Entries.php b/src/Fieldtypes/Entries.php index 9a432c4ba4..4b36a21819 100644 --- a/src/Fieldtypes/Entries.php +++ b/src/Fieldtypes/Entries.php @@ -18,6 +18,7 @@ use Statamic\Http\Resources\CP\Entries\Entries as EntriesResource; use Statamic\Http\Resources\CP\Entries\Entry as EntryResource; use Statamic\Query\OrderedQueryBuilder; +use Statamic\Query\Scopes\Filter; use Statamic\Query\Scopes\Filters\Concerns\QueriesFilters; use Statamic\Query\Scopes\Filters\Fields\Entries as EntriesFilter; use Statamic\Query\StatusQueryBuilder; @@ -105,6 +106,11 @@ protected function configFieldItems(): array 'display' => __('Query Scopes'), 'instructions' => __('statamic::fieldtypes.entries.config.query_scopes'), 'type' => 'taggable', + 'options' => Scope::all() + ->reject(fn ($scope) => $scope instanceof Filter) + ->map->handle() + ->values() + ->all(), ], ], ], diff --git a/src/Fieldtypes/Taggable.php b/src/Fieldtypes/Taggable.php index 85d55eef5b..37ba11e89f 100644 --- a/src/Fieldtypes/Taggable.php +++ b/src/Fieldtypes/Taggable.php @@ -20,6 +20,19 @@ protected function configFieldItems(): array 'type' => 'text', 'default' => __('statamic::fieldtypes.taggable.config.placeholder'), ], + 'options' => [ + 'display' => __('Options'), + 'instructions' => __('statamic::fieldtypes.taggable.config.options'), + 'type' => 'list', + 'add_button' => __('Add Option'), + ], + ]; + } + + public function preload() + { + return [ + 'options' => $this->config('options', []), ]; } diff --git a/src/Fieldtypes/Terms.php b/src/Fieldtypes/Terms.php index 659b3702c5..e166e30dd7 100644 --- a/src/Fieldtypes/Terms.php +++ b/src/Fieldtypes/Terms.php @@ -13,6 +13,7 @@ use Statamic\Facades; use Statamic\Facades\Blink; use Statamic\Facades\GraphQL; +use Statamic\Facades\Scope; use Statamic\Facades\Site; use Statamic\Facades\Taxonomy; use Statamic\Facades\Term; @@ -20,6 +21,7 @@ use Statamic\GraphQL\Types\TermInterface; use Statamic\Http\Resources\CP\Taxonomies\Terms as TermsResource; use Statamic\Query\OrderedQueryBuilder; +use Statamic\Query\Scopes\Filter; use Statamic\Query\Scopes\Filters\Fields\Terms as TermsFilter; use Statamic\Support\Arr; use Statamic\Support\Str; @@ -95,6 +97,11 @@ protected function configFieldItems(): array 'display' => __('Query Scopes'), 'instructions' => __('statamic::fieldtypes.terms.config.query_scopes'), 'type' => 'taggable', + 'options' => Scope::all() + ->reject(fn ($scope) => $scope instanceof Filter) + ->map->handle() + ->values() + ->all(), ], ], ], diff --git a/src/Fieldtypes/Users.php b/src/Fieldtypes/Users.php index 857f032a5e..b3e9317701 100644 --- a/src/Fieldtypes/Users.php +++ b/src/Fieldtypes/Users.php @@ -5,10 +5,12 @@ use Illuminate\Support\Collection; use Statamic\CP\Column; use Statamic\Facades\GraphQL; +use Statamic\Facades\Scope; use Statamic\Facades\Search; use Statamic\Facades\User; use Statamic\GraphQL\Types\UserType; use Statamic\Query\OrderedQueryBuilder; +use Statamic\Query\Scopes\Filter; use Statamic\Query\Scopes\Filters\Fields\User as UserFilter; use Statamic\Search\Result; use Statamic\Support\Arr; @@ -61,6 +63,11 @@ protected function configFieldItems(): array 'display' => __('Query Scopes'), 'instructions' => __('statamic::fieldtypes.users.config.query_scopes'), 'type' => 'taggable', + 'options' => Scope::all() + ->reject(fn ($scope) => $scope instanceof Filter) + ->map->handle() + ->values() + ->all(), ], ], ], diff --git a/src/Forms/Fieldtype.php b/src/Forms/Fieldtype.php index 384f8d5dac..95a33bd9b8 100644 --- a/src/Forms/Fieldtype.php +++ b/src/Forms/Fieldtype.php @@ -6,9 +6,11 @@ use Statamic\Data\DataCollection; use Statamic\Facades; use Statamic\Facades\GraphQL; +use Statamic\Facades\Scope; use Statamic\Fieldtypes\Relationship; use Statamic\GraphQL\Types\FormType; use Statamic\Query\ItemQueryBuilder; +use Statamic\Query\Scopes\Filter; class Fieldtype extends Relationship { @@ -47,6 +49,11 @@ protected function configFieldItems(): array 'display' => __('Query Scopes'), 'instructions' => __('statamic::fieldtypes.form.config.query_scopes'), 'type' => 'taggable', + 'options' => Scope::all() + ->reject(fn ($scope) => $scope instanceof Filter) + ->map->handle() + ->values() + ->all(), ], ]; }