From 2625fbab8ab61a2a1e2b7d38cfdaf1419a5b0ef1 Mon Sep 17 00:00:00 2001 From: Ash Monsh Date: Sun, 7 Jan 2024 05:42:04 +0300 Subject: [PATCH 1/5] adding options for fields and sections as modal --- src/Concerns/HasOptions.php | 43 ++--- src/Concerns/Schemata.php | 229 +++++++++++++++----------- src/Fields/Classes/CheckboxList.php | 23 ++- src/Fields/Classes/ColorPicker.php | 24 ++- src/Fields/Classes/DatePicker.php | 23 ++- src/Fields/Classes/DateTimePicker.php | 20 ++- src/Fields/Classes/FileUpload.php | 24 ++- src/Fields/Classes/Paragraph.php | 11 ++ src/Fields/Classes/Radio.php | 26 ++- src/Fields/Classes/RichEditor.php | 23 ++- src/Fields/Classes/Select.php | 26 ++- src/Fields/Classes/TextInput.php | 29 +++- src/Fields/Classes/Textarea.php | 28 +++- src/Fields/Classes/TimePicker.php | 23 ++- src/Fields/Classes/Toggle.php | 23 ++- src/Fields/FieldsContract.php | 6 +- 16 files changed, 426 insertions(+), 155 deletions(-) diff --git a/src/Concerns/HasOptions.php b/src/Concerns/HasOptions.php index 23401cb5..4b733ce2 100644 --- a/src/Concerns/HasOptions.php +++ b/src/Concerns/HasOptions.php @@ -17,8 +17,17 @@ trait HasOptions { - public static function visibility(string $type = 'field'): Grid + public static function visibility(string $type = 'field', ?array $getFields = null): Grid { + $fieldsList = []; + if (filled($getFields)) { + $fieldsList = collect($getFields) + ->pluck('fields') + ->mapWithKeys(function (array $item) { + return $item; + }); + } + return Grid::make() ->schema([ Toggle::make('options.visibility.active') @@ -30,48 +39,28 @@ public static function visibility(string $type = 'field'): Grid ->live() ->visible(fn (Get $get): bool => ! empty($get('options.visibility.active'))) ->required(fn (Get $get): bool => ! empty($get('options.visibility.active'))) - ->options(function ($livewire, $record) use ($type) { - if ($record === null) { - return []; - } - - return $livewire->record - ->fields() - ->when($type === 'field', function ($query) use ($record) { - return $query->where($record->getTable() . '.id', '!=', $record->id); - }) - ->when($type === 'section', function ($query) use ($record) { - return $query->where('section_id', '!=', $record->id); - }) - ->where(function ($query) use ($record) { - $query->whereNotNull($record->getTable() . '.options->dataSource'); - $query->orWhere('type', '\LaraZeus\Bolt\Fields\Classes\Toggle'); - }) - ->get() - ->pluck('name', 'id'); - }), + ->options(optional($fieldsList)->pluck('name', 'id')), Select::make('options.visibility.values') ->label(__('has the value:')) ->live() ->required(fn (Get $get): bool => ! empty($get('options.visibility.fieldID'))) ->visible(fn (Get $get): bool => ! empty($get('options.visibility.fieldID'))) - ->options(function (Get $get, $livewire, $record) { + ->options(function (Get $get) use ($fieldsList) { + $getRelated = $fieldsList->where('id', $get('options.visibility.fieldID'))->first(); + if ($get('options.visibility.fieldID') === null) { return []; } - $getRelated = $livewire->getRecord()->fields() - ->where($record->getTable() . '.id', $get('options.visibility.fieldID')) - ->first(); - if ($getRelated->type === '\LaraZeus\Bolt\Fields\Classes\Toggle') { + if ($getRelated['type'] === '\LaraZeus\Bolt\Fields\Classes\Toggle') { return [ 'true' => __('checked'), 'false' => __('not checked'), ]; } - if (! isset($getRelated->options['dataSource'])) { + if (! isset($getRelated['options']['dataSource'])) { return []; } diff --git a/src/Concerns/Schemata.php b/src/Concerns/Schemata.php index c03fb3b2..2eee3fee 100644 --- a/src/Concerns/Schemata.php +++ b/src/Concerns/Schemata.php @@ -2,6 +2,7 @@ namespace LaraZeus\Bolt\Concerns; +use Filament\Forms\Components\Actions\Action; use Filament\Forms\Components\DateTimePicker; use Filament\Forms\Components\FileUpload; use Filament\Forms\Components\Grid; @@ -35,6 +36,7 @@ public static function getMainFormSchema(): array Tabs::make('form-tabs') ->tabs(static::getTabsSchema()) ->columnSpan(2), + Section::make() ->schema([ Placeholder::make('section-title-placeholder') @@ -52,6 +54,50 @@ public static function getMainFormSchema(): array ->collapsible() ->collapsed(fn (string $operation) => $operation === 'edit') ->minItems(1) + ->extraItemActions([ + Action::make('options') + ->slideOver() + ->color('warning') + ->tooltip('more section options') + ->icon('heroicon-m-cog') + ->fillForm(fn ($state, array $arguments, Repeater $component) => $component->getItemState($arguments['item'])) + ->form(function (array $arguments, Repeater $component, $record, Get $get) { + $formOptions = $get('options'); + + return [ + TextInput::make('description') + ->nullable() + ->visible($formOptions['show-as'] !== 'tabs') + ->label(__('Section Description')), + Select::make('columns') + ->options(fn (): array => array_combine(range(1, 12), range(1, 12))) + ->required() + ->default(1) + ->hint(__('fields per row')) + ->label(__('Section Columns')), + IconPicker::make('icon') + ->columns([ + 'default' => 1, + 'lg' => 3, + '2xl' => 5, + ]) + ->label(__('Section icon')), + Toggle::make('aside') + ->visible($formOptions['show-as'] === 'page') + ->label(__('show as aside')), + Toggle::make('compact') + ->visible($formOptions['show-as'] === 'page') + ->label(__('compact section')), + self::visibility('section', $get('sections')), + ]; + }) + ->action(function (array $data, array $arguments, Repeater $component): void { + $state = $component->getState(); + $state[$arguments['item']] = array_merge($state[$arguments['item']], $data); + $component->state($state); + }), + ]) + ->itemLabel(fn (array $state): ?string => $state['name'] ?? null) ->columnSpan(2), ]; @@ -252,53 +298,21 @@ public static function getSectionsSchema(): array Grid::make() ->columns() ->schema([ - Tabs::make('section-tab') - ->columnSpan(2) - ->tabs([ - Tabs\Tab::make('section-info-tab') - ->label(__('Section Info')) - ->schema([ - TextInput::make('name') - ->hint(__('Translatable')) - ->hintIcon('heroicon-s-language') - ->required() - ->lazy() - ->label(__('Section Name')), - TextInput::make('description') - ->nullable() - ->visible(fn (Get $get) => $get('../../options.show-as') !== 'tabs') - ->label(__('Section Description')), - ]), - Tabs\Tab::make('section-details-tab') - ->label(__('Section Details')) - ->columns(2) - ->schema([ - Select::make('columns') - ->options(fn (): array => array_combine(range(1, 12), range(1, 12))) - ->required() - ->default(1) - ->hint(__('fields per row')) - ->label(__('Section Columns')), - IconPicker::make('icon') - ->columns([ - 'default' => 1, - 'lg' => 3, - '2xl' => 5, - ]) - ->label(__('Section icon')), - - Toggle::make('aside') - ->inline(false) - ->visible(fn (Get $get) => $get('../../options.show-as') === 'page') - ->label(__('show as aside')), - - Toggle::make('compact') - ->inline(false) - ->visible(fn (Get $get) => $get('../../options.show-as') === 'page') - ->label(__('compact section')), - self::visibility('section'), - ]), - ]), + Hidden::make('compact')->default(false), + Hidden::make('aside')->default(false), + Hidden::make('icon'), + Hidden::make('columns')->default(1), + Hidden::make('description'), + Hidden::make('options.visibility.active'), + Hidden::make('options.visibility.fieldID'), + Hidden::make('options.visibility.values'), + TextInput::make('name') + ->columnSpanFull() + ->hint(__('Translatable')) + ->hintIcon('heroicon-s-language') + ->required() + ->lazy() + ->label(__('Section Name')), ]), Placeholder::make('section-fields-placeholder') ->label(__('Section Fields')), @@ -318,6 +332,45 @@ public static function getSectionsSchema(): array ->label('') ->itemLabel(fn (array $state): ?string => $state['name'] ?? null) ->addActionLabel(__('Add field')) + ->extraItemActions([ + Action::make('options') + ->slideOver() + ->color('warning') + ->tooltip('more section options') + ->icon('heroicon-m-cog') + ->fillForm(fn ($state, array $arguments, Repeater $component) => $component->getItemState($arguments['item'])) + ->form(function (Get $get) { + $sect = $get('../../sections'); + + return [ + Textarea::make('description') + ->label(__('Field Description')), + Grid::make() + ->columns([ + 'default' => 1, + 'lg' => 2, + ]) + ->label(__('Field Options')) + ->schema(function (Get $get) use ($sect) { + $class = $get('type'); + if (class_exists($class)) { + $newClass = (new $class); + if ($newClass->hasOptions()) { + return $newClass->getOptions($sect); + } + } + + return []; + }) + ->columns(1), + ]; + }) + ->action(function (array $data, array $arguments, Repeater $component): void { + $state = $component->getState(); + $state[$arguments['item']] = array_merge($state[$arguments['item']], $data); + $component->state($state); + }), + ]) ->schema(static::getFieldsSchema()), ]; } @@ -325,59 +378,37 @@ public static function getSectionsSchema(): array public static function getFieldsSchema(): array { return [ - Tabs::make('fields-tab') - ->tabs([ - Tabs\Tab::make('type-text-tab') - ->icon('heroicon-o-bars-3-bottom-left') - ->label(__('Type & title')) - ->schema([ - TextInput::make('name') - ->hint(__('Translatable')) - ->hintIcon('heroicon-s-language') - ->required() - ->lazy() - ->label(__('Field Name')), - Textarea::make('description') - ->label(__('Field Description')), - Select::make('type') - ->required() - ->options(Bolt::availableFields()->pluck('title', 'class')) - ->live() - ->default('\LaraZeus\Bolt\Fields\Classes\TextInput') - ->label(__('Field Type')), - ]), - Tabs\Tab::make('options-tab') - ->visible(function (Get $get) { - $class = $get('type'); - if (class_exists($class)) { - return (new $class)->hasOptions(); - } - - return false; - }) - ->label(__('Options')) - ->icon('heroicon-o-cog') - ->schema([ - Grid::make() - ->columns([ - 'default' => 1, - 'lg' => 2, - ]) - ->label(__('Field Options')) - ->schema(function (Get $get) { - $class = $get('type'); - if (class_exists($class)) { - $newClass = (new $class); - if ($newClass->hasOptions()) { - return $newClass->getOptions(); - } - } + Hidden::make('description'), + TextInput::make('name') + ->hint(__('Translatable')) + ->hintIcon('heroicon-s-language') + ->required() + ->lazy() + ->label(__('Field Name')), + Select::make('type') + ->required() + ->options(Bolt::availableFields()->pluck('title', 'class')) + ->live() + ->default('\LaraZeus\Bolt\Fields\Classes\TextInput') + ->label(__('Field Type')), + Grid::make() + ->columns([ + 'default' => 1, + 'lg' => 2, + ]) + ->label(__('Field Options')) + ->schema(function (Get $get) { + $class = $get('type'); + if (class_exists($class)) { + $newClass = (new $class); + if ($newClass->hasOptions()) { + return $newClass->getOptionsHidden(); + } + } - return []; - }) - ->columns(1), - ]), - ]), + return []; + }) + ->columns(1), ]; } } diff --git a/src/Fields/Classes/CheckboxList.php b/src/Fields/Classes/CheckboxList.php index 461f5de9..21d238e0 100644 --- a/src/Fields/Classes/CheckboxList.php +++ b/src/Fields/Classes/CheckboxList.php @@ -2,6 +2,7 @@ namespace LaraZeus\Bolt\Fields\Classes; +use Filament\Forms\Components\Hidden; use LaraZeus\Bolt\Fields\FieldsContract; use LaraZeus\Bolt\Models\Field; use LaraZeus\Bolt\Models\FieldResponse; @@ -17,7 +18,7 @@ public function title(): string return __('Checkbox List'); } - public static function getOptions(): array + public static function getOptions(?array $sections = null): array { return [ self::dataSource(), @@ -25,7 +26,25 @@ public static function getOptions(): array self::hintOptions(), self::required(), self::columnSpanFull(), - self::visibility(), + self::visibility('field', $sections), + ]; + } + + public static function getOptionsHidden(): array + { + return [ + Hidden::make('options.visibility.active'), + Hidden::make('options.visibility.fieldID'), + Hidden::make('options.visibility.values'), + + Hidden::make('options.htmlId')->default(str()->random(6)), + + Hidden::make('options.hint.text'), + Hidden::make('options.hint.icon'), + Hidden::make('options.hint.color'), + + Hidden::make('options.is_required')->default(false), + Hidden::make('options.column_span_full')->default(false), ]; } diff --git a/src/Fields/Classes/ColorPicker.php b/src/Fields/Classes/ColorPicker.php index 585ae011..34ce90c4 100644 --- a/src/Fields/Classes/ColorPicker.php +++ b/src/Fields/Classes/ColorPicker.php @@ -3,6 +3,7 @@ namespace LaraZeus\Bolt\Fields\Classes; use Filament\Forms\Components\ColorPicker as ColorPickerAlias; +use Filament\Forms\Components\Hidden; use LaraZeus\Bolt\Fields\FieldsContract; class ColorPicker extends FieldsContract @@ -16,7 +17,7 @@ public function title(): string return __('Color Picker'); } - public static function getOptions(): array + public static function getOptions(?array $sections = null): array { return [ \Filament\Forms\Components\Select::make('options.colorType') @@ -30,7 +31,26 @@ public static function getOptions(): array self::hintOptions(), self::required(), self::columnSpanFull(), - self::visibility(), + self::visibility('field', $sections), + ]; + } + + public static function getOptionsHidden(): array + { + return [ + Hidden::make('options.colorType'), + Hidden::make('options.htmlId')->default(str()->random(6)), + + Hidden::make('options.hint.text'), + Hidden::make('options.hint.icon'), + Hidden::make('options.hint.color'), + + Hidden::make('options.is_required')->default(false), + Hidden::make('options.column_span_full')->default(false), + + Hidden::make('options.visibility.active'), + Hidden::make('options.visibility.fieldID'), + Hidden::make('options.visibility.values'), ]; } diff --git a/src/Fields/Classes/DatePicker.php b/src/Fields/Classes/DatePicker.php index 45a74aea..c07f6e08 100644 --- a/src/Fields/Classes/DatePicker.php +++ b/src/Fields/Classes/DatePicker.php @@ -2,6 +2,7 @@ namespace LaraZeus\Bolt\Fields\Classes; +use Filament\Forms\Components\Hidden; use LaraZeus\Bolt\Fields\FieldsContract; class DatePicker extends FieldsContract @@ -15,14 +16,32 @@ public function title(): string return __('Date Picker'); } - public static function getOptions(): array + public static function getOptions(?array $sections = null): array { return [ self::htmlID(), self::hintOptions(), self::required(), self::columnSpanFull(), - self::visibility(), + self::visibility('field', $sections), + ]; + } + + public static function getOptionsHidden(): array + { + return [ + Hidden::make('options.htmlId')->default(str()->random(6)), + + Hidden::make('options.hint.text'), + Hidden::make('options.hint.icon'), + Hidden::make('options.hint.color'), + + Hidden::make('options.is_required')->default(false), + Hidden::make('options.column_span_full')->default(false), + + Hidden::make('options.visibility.active'), + Hidden::make('options.visibility.fieldID'), + Hidden::make('options.visibility.values'), ]; } } diff --git a/src/Fields/Classes/DateTimePicker.php b/src/Fields/Classes/DateTimePicker.php index d5bee6cf..6682391c 100644 --- a/src/Fields/Classes/DateTimePicker.php +++ b/src/Fields/Classes/DateTimePicker.php @@ -2,6 +2,7 @@ namespace LaraZeus\Bolt\Fields\Classes; +use Filament\Forms\Components\Hidden; use LaraZeus\Bolt\Fields\FieldsContract; class DateTimePicker extends FieldsContract @@ -15,14 +16,21 @@ public function title(): string return __('Date Time Picker'); } - public static function getOptions(): array + public static function getOptionsHidden(): array { return [ - self::htmlID(), - self::hintOptions(), - self::required(), - self::columnSpanFull(), - self::visibility(), + Hidden::make('options.htmlId')->default(str()->random(6)), + + Hidden::make('options.hint.text'), + Hidden::make('options.hint.icon'), + Hidden::make('options.hint.color'), + + Hidden::make('options.is_required')->default(false), + Hidden::make('options.column_span_full')->default(false), + + Hidden::make('options.visibility.active'), + Hidden::make('options.visibility.fieldID'), + Hidden::make('options.visibility.values'), ]; } } diff --git a/src/Fields/Classes/FileUpload.php b/src/Fields/Classes/FileUpload.php index 48c7b5ae..6f314d02 100644 --- a/src/Fields/Classes/FileUpload.php +++ b/src/Fields/Classes/FileUpload.php @@ -2,6 +2,7 @@ namespace LaraZeus\Bolt\Fields\Classes; +use Filament\Forms\Components\Hidden; use LaraZeus\Bolt\Facades\Bolt; use LaraZeus\Bolt\Fields\FieldsContract; use LaraZeus\Bolt\Models\Field; @@ -18,7 +19,7 @@ public function title(): string return __('File Upload'); } - public static function getOptions(): array + public static function getOptions(?array $sections = null): array { return [ \Filament\Forms\Components\Toggle::make('options.allow_multiple')->label(__('Allow Multiple')), @@ -26,7 +27,26 @@ public static function getOptions(): array self::hintOptions(), self::required(), self::columnSpanFull(), - self::visibility(), + self::visibility('field', $sections), + ]; + } + + public static function getOptionsHidden(): array + { + return [ + Hidden::make('options.htmlId')->default(str()->random(6)), + + Hidden::make('options.hint.text'), + Hidden::make('options.hint.icon'), + Hidden::make('options.hint.color'), + + Hidden::make('options.is_required')->default(false), + Hidden::make('options.allow_multiple')->default(false), + Hidden::make('options.column_span_full')->default(false), + + Hidden::make('options.visibility.active'), + Hidden::make('options.visibility.fieldID'), + Hidden::make('options.visibility.values'), ]; } diff --git a/src/Fields/Classes/Paragraph.php b/src/Fields/Classes/Paragraph.php index 6f16aeeb..4a59c600 100644 --- a/src/Fields/Classes/Paragraph.php +++ b/src/Fields/Classes/Paragraph.php @@ -2,6 +2,7 @@ namespace LaraZeus\Bolt\Fields\Classes; +use Filament\Forms\Components\Hidden; use Filament\Forms\Components\Placeholder; use LaraZeus\Bolt\Fields\FieldsContract; @@ -23,4 +24,14 @@ public static function getOptions(): array self::columnSpanFull(), ]; } + + public static function getOptionsHidden(): array + { + return [ + Hidden::make('options.hint.text'), + Hidden::make('options.hint.icon'), + Hidden::make('options.hint.color'), + Hidden::make('options.column_span_full')->default(false), + ]; + } } diff --git a/src/Fields/Classes/Radio.php b/src/Fields/Classes/Radio.php index dd9b11fb..493da5d6 100644 --- a/src/Fields/Classes/Radio.php +++ b/src/Fields/Classes/Radio.php @@ -2,6 +2,7 @@ namespace LaraZeus\Bolt\Fields\Classes; +use Filament\Forms\Components\Hidden; use Filament\Forms\Components\Toggle; use LaraZeus\Bolt\Fields\FieldsContract; use LaraZeus\Bolt\Models\Field; @@ -18,7 +19,7 @@ public function title(): string return __('Radio'); } - public static function getOptions(): array + public static function getOptions(?array $sections = null): array { return [ self::dataSource(), @@ -27,7 +28,28 @@ public static function getOptions(): array Toggle::make('options.is_inline')->label(__('Is inline')), self::required(), self::columnSpanFull(), - self::visibility(), + self::visibility('field', $sections), + ]; + } + + public static function getOptionsHidden(): array + { + return [ + Hidden::make('options.dataSource'), + + Hidden::make('options.htmlId')->default(str()->random(6)), + + Hidden::make('options.hint.text'), + Hidden::make('options.hint.icon'), + Hidden::make('options.hint.color'), + + Hidden::make('options.is_required')->default(false), + Hidden::make('options.is_inline')->default(false), + Hidden::make('options.column_span_full')->default(false), + + Hidden::make('options.visibility.active'), + Hidden::make('options.visibility.fieldID'), + Hidden::make('options.visibility.values'), ]; } diff --git a/src/Fields/Classes/RichEditor.php b/src/Fields/Classes/RichEditor.php index 4c9de359..5d0d3103 100644 --- a/src/Fields/Classes/RichEditor.php +++ b/src/Fields/Classes/RichEditor.php @@ -2,6 +2,7 @@ namespace LaraZeus\Bolt\Fields\Classes; +use Filament\Forms\Components\Hidden; use LaraZeus\Bolt\Fields\FieldsContract; class RichEditor extends FieldsContract @@ -15,14 +16,32 @@ public function title(): string return __('Rich Editor'); } - public static function getOptions(): array + public static function getOptions(?array $sections = null): array { return [ self::htmlID(), self::hintOptions(), self::required(), self::columnSpanFull(), - self::visibility(), + self::visibility('field', $sections), + ]; + } + + public static function getOptionsHidden(): array + { + return [ + Hidden::make('options.htmlId')->default(str()->random(6)), + + Hidden::make('options.hint.text'), + Hidden::make('options.hint.icon'), + Hidden::make('options.hint.color'), + + Hidden::make('options.is_required')->default(false), + Hidden::make('options.column_span_full')->default(false), + + Hidden::make('options.visibility.active'), + Hidden::make('options.visibility.fieldID'), + Hidden::make('options.visibility.values'), ]; } } diff --git a/src/Fields/Classes/Select.php b/src/Fields/Classes/Select.php index 355c5c96..d0865198 100644 --- a/src/Fields/Classes/Select.php +++ b/src/Fields/Classes/Select.php @@ -2,6 +2,7 @@ namespace LaraZeus\Bolt\Fields\Classes; +use Filament\Forms\Components\Hidden; use Filament\Forms\Components\Toggle; use LaraZeus\Bolt\Fields\FieldsContract; use LaraZeus\Bolt\Models\Field; @@ -18,7 +19,7 @@ public function title(): string return __('Select Menu'); } - public static function getOptions(): array + public static function getOptions(?array $sections = null): array { return [ self::dataSource(), @@ -27,7 +28,28 @@ public static function getOptions(): array Toggle::make('options.allow_multiple')->label(__('Allow Multiple')), self::required(), self::columnSpanFull(), - self::visibility(), + self::visibility('field', $sections), + ]; + } + + public static function getOptionsHidden(): array + { + return [ + Hidden::make('options.dataSource'), + + Hidden::make('options.htmlId')->default(str()->random(6)), + + Hidden::make('options.hint.text'), + Hidden::make('options.hint.icon'), + Hidden::make('options.hint.color'), + + Hidden::make('options.is_required')->default(false), + Hidden::make('options.allow_multiple')->default(false), + Hidden::make('options.column_span_full')->default(false), + + Hidden::make('options.visibility.active'), + Hidden::make('options.visibility.fieldID'), + Hidden::make('options.visibility.values'), ]; } diff --git a/src/Fields/Classes/TextInput.php b/src/Fields/Classes/TextInput.php index 98324ff2..37784c04 100644 --- a/src/Fields/Classes/TextInput.php +++ b/src/Fields/Classes/TextInput.php @@ -2,6 +2,7 @@ namespace LaraZeus\Bolt\Fields\Classes; +use Filament\Forms\Components\Hidden; use Filament\Forms\Components\Select; use Filament\Forms\Components\TextInput as TextInputAlias; use Filament\Forms\Get; @@ -18,7 +19,7 @@ public function title(): string return __('Text Input'); } - public static function getOptions(): array + public static function getOptions(?array $sections = null): array { return [ Select::make('options.dateType') @@ -61,7 +62,31 @@ public static function getOptions(): array self::hintOptions(), self::required(), self::columnSpanFull(), - self::visibility(), + self::visibility('field', $sections), + ]; + } + + public static function getOptionsHidden(): array + { + return [ + Hidden::make('options.dateType'), + Hidden::make('options.prefix'), + Hidden::make('options.suffix'), + Hidden::make('options.minValue'), + Hidden::make('options.maxValue'), + + Hidden::make('options.htmlId')->default(str()->random(6)), + + Hidden::make('options.hint.text'), + Hidden::make('options.hint.icon'), + Hidden::make('options.hint.color'), + + Hidden::make('options.is_required')->default(false), + Hidden::make('options.column_span_full')->default(false), + + Hidden::make('options.visibility.active'), + Hidden::make('options.visibility.fieldID'), + Hidden::make('options.visibility.values'), ]; } diff --git a/src/Fields/Classes/Textarea.php b/src/Fields/Classes/Textarea.php index b7930d96..7dfc706b 100644 --- a/src/Fields/Classes/Textarea.php +++ b/src/Fields/Classes/Textarea.php @@ -2,6 +2,7 @@ namespace LaraZeus\Bolt\Fields\Classes; +use Filament\Forms\Components\Hidden; use Filament\Forms\Components\Textarea as TextareaAlias; use Filament\Forms\Components\TextInput; use LaraZeus\Bolt\Fields\FieldsContract; @@ -17,7 +18,7 @@ public function title(): string return __('Textarea'); } - public static function getOptions(): array + public static function getOptions(?array $sections = null): array { return [ TextInput::make('options.rows') @@ -36,7 +37,30 @@ public static function getOptions(): array self::hintOptions(), self::required(), self::columnSpanFull(), - self::visibility(), + self::visibility('field', $sections), + ]; + } + + public static function getOptionsHidden(): array + { + return [ + Hidden::make('options.htmlId')->default(str()->random(6)), + + Hidden::make('options.rows'), + Hidden::make('options.cols'), + Hidden::make('options.minLength'), + Hidden::make('options.maxLength'), + + Hidden::make('options.hint.text'), + Hidden::make('options.hint.icon'), + Hidden::make('options.hint.color'), + + Hidden::make('options.is_required')->default(false), + Hidden::make('options.column_span_full')->default(false), + + Hidden::make('options.visibility.active'), + Hidden::make('options.visibility.fieldID'), + Hidden::make('options.visibility.values'), ]; } diff --git a/src/Fields/Classes/TimePicker.php b/src/Fields/Classes/TimePicker.php index 56ee31ec..1f023fcc 100644 --- a/src/Fields/Classes/TimePicker.php +++ b/src/Fields/Classes/TimePicker.php @@ -2,6 +2,7 @@ namespace LaraZeus\Bolt\Fields\Classes; +use Filament\Forms\Components\Hidden; use LaraZeus\Bolt\Fields\FieldsContract; class TimePicker extends FieldsContract @@ -15,14 +16,32 @@ public function title(): string return __('Time Picker'); } - public static function getOptions(): array + public static function getOptions(?array $sections = null): array { return [ self::htmlID(), self::hintOptions(), self::required(), self::columnSpanFull(), - self::visibility(), + self::visibility('field', $sections), + ]; + } + + public static function getOptionsHidden(): array + { + return [ + Hidden::make('options.htmlId')->default(str()->random(6)), + + Hidden::make('options.hint.text'), + Hidden::make('options.hint.icon'), + Hidden::make('options.hint.color'), + + Hidden::make('options.is_required')->default(false), + Hidden::make('options.column_span_full')->default(false), + + Hidden::make('options.visibility.active'), + Hidden::make('options.visibility.fieldID'), + Hidden::make('options.visibility.values'), ]; } } diff --git a/src/Fields/Classes/Toggle.php b/src/Fields/Classes/Toggle.php index 38bd4594..cbfe21a7 100644 --- a/src/Fields/Classes/Toggle.php +++ b/src/Fields/Classes/Toggle.php @@ -2,6 +2,7 @@ namespace LaraZeus\Bolt\Fields\Classes; +use Filament\Forms\Components\Hidden; use LaraZeus\Bolt\Fields\FieldsContract; class Toggle extends FieldsContract @@ -15,14 +16,32 @@ public function title(): string return __('Toggle'); } - public static function getOptions(): array + public static function getOptions(?array $sections = null): array { return [ self::htmlID(), self::hintOptions(), self::required(), self::columnSpanFull(), - self::visibility(), + self::visibility('field', $sections), + ]; + } + + public static function getOptionsHidden(): array + { + return [ + Hidden::make('options.htmlId')->default(str()->random(6)), + + Hidden::make('options.hint.text'), + Hidden::make('options.hint.icon'), + Hidden::make('options.hint.color'), + + Hidden::make('options.is_required')->default(false), + Hidden::make('options.column_span_full')->default(false), + + Hidden::make('options.visibility.active'), + Hidden::make('options.visibility.fieldID'), + Hidden::make('options.visibility.values'), ]; } diff --git a/src/Fields/FieldsContract.php b/src/Fields/FieldsContract.php index 20a587b2..12a0c348 100644 --- a/src/Fields/FieldsContract.php +++ b/src/Fields/FieldsContract.php @@ -161,8 +161,12 @@ public function getCollectionsValuesForResponse(Field $field, FieldResponse $res } //@phpstan-ignore-next-line - public static function getFieldCollectionItemsList(Field | FieldPreset $zeusField): Collection + public static function getFieldCollectionItemsList(Field | FieldPreset | array $zeusField): Collection | array { + if (is_array($zeusField)) { + $zeusField = (object) $zeusField; + } + $getCollection = collect(); //@phpstan-ignore-next-line From 70ee120a813c1a46f4a49e7779600e7820fe9ac8 Mon Sep 17 00:00:00 2001 From: Ash Monsh Date: Sun, 7 Jan 2024 16:27:50 +0300 Subject: [PATCH 2/5] refactor HasHiddenOptions --- src/Concerns/HasHiddenOptions.php | 124 ++++++++++++++++++++++++++ src/Concerns/Schemata.php | 32 ++++--- src/Fields/Classes/CheckboxList.php | 17 ++-- src/Fields/Classes/ColorPicker.php | 17 ++-- src/Fields/Classes/DatePicker.php | 17 ++-- src/Fields/Classes/DateTimePicker.php | 17 ++-- src/Fields/Classes/FileUpload.php | 17 ++-- src/Fields/Classes/Paragraph.php | 6 +- src/Fields/Classes/Radio.php | 18 ++-- src/Fields/Classes/RichEditor.php | 17 ++-- src/Fields/Classes/Select.php | 18 ++-- src/Fields/Classes/TextInput.php | 18 ++-- src/Fields/Classes/Textarea.php | 18 ++-- src/Fields/Classes/TimePicker.php | 17 ++-- src/Fields/Classes/Toggle.php | 17 ++-- src/Fields/FieldsContract.php | 2 + 16 files changed, 208 insertions(+), 164 deletions(-) create mode 100644 src/Concerns/HasHiddenOptions.php diff --git a/src/Concerns/HasHiddenOptions.php b/src/Concerns/HasHiddenOptions.php new file mode 100644 index 00000000..f3ec82ad --- /dev/null +++ b/src/Concerns/HasHiddenOptions.php @@ -0,0 +1,124 @@ +default(false), + ]; + } + + public static function hiddenHintOptions(): array + { + return [ + Hidden::make('options.hint.text'), + Hidden::make('options.hint.icon'), + Hidden::make('options.hint.color'), + ]; + } + + public static function hiddenColumnSpanFull(): array + { + return [ + Hidden::make('options.column_span_full')->default(false), + ]; + } + + public static function hiddenDataSource(): array + { + $dataSources = BoltPlugin::getModel('Collection')::get() + ->mapWithKeys(function ($item, $key) { + return [ + $key => [ + 'title' => $item['name'], + 'class' => $item['id'], + ], + ]; + }) + ->merge( + Bolt::availableDataSource() + ->mapWithKeys(function ($item, $key) { + return [ + $key => [ + 'title' => $item['title'], + 'class' => $item['class'], + ], + ]; + }) + ) + ->pluck('title', 'class'); + + return Grid::make() + ->schema([ + Select::make('options.dataSource') + ->required() + ->createOptionForm([ + TextInput::make('name') + ->live(onBlur: true) + ->label(__('Collections Name'))->required()->maxLength(255)->columnSpan(2), + Repeater::make('values') + ->grid([ + 'default' => 1, + 'md' => 2, + 'lg' => 3, + ]) + ->label(__('Collections Values')) + ->columnSpan(2) + ->columns(1) + ->schema([ + TextInput::make('itemValue') + ->live(onBlur: true) + ->afterStateUpdated(function (Set $set, Get $get, string $operation) { + $set('itemKey', $get('itemValue')); + }) + ->required()->label(__('Value'))->hint(__('what the user will see')), + TextInput::make('itemKey') + ->live(onBlur: true) + ->required()->label(__('Key'))->hint(__('what store in the form')), + Toggle::make('itemIsDefault')->label(__('selected by default')), + ]), + ]) + ->createOptionUsing(function (array $data) { + $collectionModel = BoltPlugin::getModel('Collection'); + $collection = new $collectionModel; + $collection->fill($data); + $collection->save(); + + return $collection->id; + }) + ->options($dataSources) + ->label(__('Data Source')), + ]) + ->columns(1); + } + + public static function hiddenHtmlID(): array + { + return [ + Hidden::make('options.htmlId')->default(str()->random(6)), + ]; + } +} diff --git a/src/Concerns/Schemata.php b/src/Concerns/Schemata.php index 2eee3fee..2fcdf1d8 100644 --- a/src/Concerns/Schemata.php +++ b/src/Concerns/Schemata.php @@ -38,6 +38,7 @@ public static function getMainFormSchema(): array ->columnSpan(2), Section::make() + ->columnSpan(2) ->schema([ Placeholder::make('section-title-placeholder') ->label(__('Sections')) @@ -52,7 +53,7 @@ public static function getMainFormSchema(): array ->addActionLabel(__('Add Section')) ->cloneable() ->collapsible() - ->collapsed(fn (string $operation) => $operation === 'edit') + ->collapsed(fn(string $operation) => $operation === 'edit') ->minItems(1) ->extraItemActions([ Action::make('options') @@ -60,7 +61,11 @@ public static function getMainFormSchema(): array ->color('warning') ->tooltip('more section options') ->icon('heroicon-m-cog') - ->fillForm(fn ($state, array $arguments, Repeater $component) => $component->getItemState($arguments['item'])) + ->fillForm(fn( + $state, + array $arguments, + Repeater $component + ) => $component->getItemState($arguments['item'])) ->form(function (array $arguments, Repeater $component, $record, Get $get) { $formOptions = $get('options'); @@ -70,7 +75,7 @@ public static function getMainFormSchema(): array ->visible($formOptions['show-as'] !== 'tabs') ->label(__('Section Description')), Select::make('columns') - ->options(fn (): array => array_combine(range(1, 12), range(1, 12))) + ->options(fn(): array => array_combine(range(1, 12), range(1, 12))) ->required() ->default(1) ->hint(__('fields per row')) @@ -97,8 +102,7 @@ public static function getMainFormSchema(): array $component->state($state); }), ]) - - ->itemLabel(fn (array $state): ?string => $state['name'] ?? null) + ->itemLabel(fn(array $state): ?string => $state['name'] ?? null) ->columnSpan(2), ]; } @@ -210,7 +214,7 @@ public static function getTabsSchema(): array }), TextInput::make('slug')->required()->maxLength(255)->label(__('slug')), ]) - ->getOptionLabelFromRecordUsing(fn (Category $record) => "{$record->name}"), + ->getOptionLabelFromRecordUsing(fn(Category $record) => "{$record->name}"), Grid::make() ->columns(2) ->schema([ @@ -256,7 +260,7 @@ public static function getTabsSchema(): array Tabs\Tab::make('embed-tab') ->label(__('Embed')) - ->visible(fn ( + ->visible(fn( string $operation ): bool => class_exists(\LaraZeus\Sky\SkyServiceProvider::class) && $operation === 'edit') ->schema([ @@ -265,7 +269,7 @@ public static function getTabsSchema(): array ->dehydrated(false) ->disabled() ->formatStateUsing(function (Get $get) { - return '' . $get('slug') . ''; + return ''.$get('slug').''; }), ]), @@ -322,7 +326,7 @@ public static function getSectionsSchema(): array ->cloneable() ->minItems(1) ->collapsible() - ->collapsed(fn (string $operation) => $operation === 'edit') + ->collapsed(fn(string $operation) => $operation === 'edit') ->grid([ 'default' => 1, 'md' => 2, @@ -330,7 +334,7 @@ public static function getSectionsSchema(): array '2xl' => 3, ]) ->label('') - ->itemLabel(fn (array $state): ?string => $state['name'] ?? null) + ->itemLabel(fn(array $state): ?string => $state['name'] ?? null) ->addActionLabel(__('Add field')) ->extraItemActions([ Action::make('options') @@ -338,7 +342,11 @@ public static function getSectionsSchema(): array ->color('warning') ->tooltip('more section options') ->icon('heroicon-m-cog') - ->fillForm(fn ($state, array $arguments, Repeater $component) => $component->getItemState($arguments['item'])) + ->fillForm(fn( + $state, + array $arguments, + Repeater $component + ) => $component->getItemState($arguments['item'])) ->form(function (Get $get) { $sect = $get('../../sections'); @@ -402,7 +410,7 @@ public static function getFieldsSchema(): array if (class_exists($class)) { $newClass = (new $class); if ($newClass->hasOptions()) { - return $newClass->getOptionsHidden(); + return collect($newClass->getOptionsHidden())->flatten()->toArray(); } } diff --git a/src/Fields/Classes/CheckboxList.php b/src/Fields/Classes/CheckboxList.php index 21d238e0..5ad592ac 100644 --- a/src/Fields/Classes/CheckboxList.php +++ b/src/Fields/Classes/CheckboxList.php @@ -33,18 +33,11 @@ public static function getOptions(?array $sections = null): array public static function getOptionsHidden(): array { return [ - Hidden::make('options.visibility.active'), - Hidden::make('options.visibility.fieldID'), - Hidden::make('options.visibility.values'), - - Hidden::make('options.htmlId')->default(str()->random(6)), - - Hidden::make('options.hint.text'), - Hidden::make('options.hint.icon'), - Hidden::make('options.hint.color'), - - Hidden::make('options.is_required')->default(false), - Hidden::make('options.column_span_full')->default(false), + self::hiddenVisibility(), + self::hiddenHtmlID(), + self::hiddenHintOptions(), + self::hiddenRequired(), + self::hiddenColumnSpanFull(), ]; } diff --git a/src/Fields/Classes/ColorPicker.php b/src/Fields/Classes/ColorPicker.php index 34ce90c4..693a82a7 100644 --- a/src/Fields/Classes/ColorPicker.php +++ b/src/Fields/Classes/ColorPicker.php @@ -39,18 +39,11 @@ public static function getOptionsHidden(): array { return [ Hidden::make('options.colorType'), - Hidden::make('options.htmlId')->default(str()->random(6)), - - Hidden::make('options.hint.text'), - Hidden::make('options.hint.icon'), - Hidden::make('options.hint.color'), - - Hidden::make('options.is_required')->default(false), - Hidden::make('options.column_span_full')->default(false), - - Hidden::make('options.visibility.active'), - Hidden::make('options.visibility.fieldID'), - Hidden::make('options.visibility.values'), + self::hiddenHtmlID(), + self::hiddenHintOptions(), + self::hiddenRequired(), + self::hiddenColumnSpanFull(), + self::hiddenVisibility(), ]; } diff --git a/src/Fields/Classes/DatePicker.php b/src/Fields/Classes/DatePicker.php index c07f6e08..0061ac8e 100644 --- a/src/Fields/Classes/DatePicker.php +++ b/src/Fields/Classes/DatePicker.php @@ -30,18 +30,11 @@ public static function getOptions(?array $sections = null): array public static function getOptionsHidden(): array { return [ - Hidden::make('options.htmlId')->default(str()->random(6)), - - Hidden::make('options.hint.text'), - Hidden::make('options.hint.icon'), - Hidden::make('options.hint.color'), - - Hidden::make('options.is_required')->default(false), - Hidden::make('options.column_span_full')->default(false), - - Hidden::make('options.visibility.active'), - Hidden::make('options.visibility.fieldID'), - Hidden::make('options.visibility.values'), + self::hiddenHtmlID(), + self::hiddenHintOptions(), + self::hiddenRequired(), + self::hiddenColumnSpanFull(), + self::hiddenVisibility(), ]; } } diff --git a/src/Fields/Classes/DateTimePicker.php b/src/Fields/Classes/DateTimePicker.php index 6682391c..7204aa13 100644 --- a/src/Fields/Classes/DateTimePicker.php +++ b/src/Fields/Classes/DateTimePicker.php @@ -19,18 +19,11 @@ public function title(): string public static function getOptionsHidden(): array { return [ - Hidden::make('options.htmlId')->default(str()->random(6)), - - Hidden::make('options.hint.text'), - Hidden::make('options.hint.icon'), - Hidden::make('options.hint.color'), - - Hidden::make('options.is_required')->default(false), - Hidden::make('options.column_span_full')->default(false), - - Hidden::make('options.visibility.active'), - Hidden::make('options.visibility.fieldID'), - Hidden::make('options.visibility.values'), + self::hiddenHtmlID(), + self::hiddenHintOptions(), + self::hiddenRequired(), + self::hiddenColumnSpanFull(), + self::hiddenVisibility(), ]; } } diff --git a/src/Fields/Classes/FileUpload.php b/src/Fields/Classes/FileUpload.php index 6f314d02..ffeadc97 100644 --- a/src/Fields/Classes/FileUpload.php +++ b/src/Fields/Classes/FileUpload.php @@ -34,19 +34,12 @@ public static function getOptions(?array $sections = null): array public static function getOptionsHidden(): array { return [ - Hidden::make('options.htmlId')->default(str()->random(6)), - - Hidden::make('options.hint.text'), - Hidden::make('options.hint.icon'), - Hidden::make('options.hint.color'), - - Hidden::make('options.is_required')->default(false), + self::hiddenHtmlID(), + self::hiddenHintOptions(), + self::hiddenRequired(), + self::hiddenColumnSpanFull(), + self::hiddenVisibility(), Hidden::make('options.allow_multiple')->default(false), - Hidden::make('options.column_span_full')->default(false), - - Hidden::make('options.visibility.active'), - Hidden::make('options.visibility.fieldID'), - Hidden::make('options.visibility.values'), ]; } diff --git a/src/Fields/Classes/Paragraph.php b/src/Fields/Classes/Paragraph.php index 4a59c600..a3890356 100644 --- a/src/Fields/Classes/Paragraph.php +++ b/src/Fields/Classes/Paragraph.php @@ -28,10 +28,8 @@ public static function getOptions(): array public static function getOptionsHidden(): array { return [ - Hidden::make('options.hint.text'), - Hidden::make('options.hint.icon'), - Hidden::make('options.hint.color'), - Hidden::make('options.column_span_full')->default(false), + self::hiddenHintOptions(), + self::hiddenColumnSpanFull(), ]; } } diff --git a/src/Fields/Classes/Radio.php b/src/Fields/Classes/Radio.php index 493da5d6..ac07b2b8 100644 --- a/src/Fields/Classes/Radio.php +++ b/src/Fields/Classes/Radio.php @@ -35,21 +35,13 @@ public static function getOptions(?array $sections = null): array public static function getOptionsHidden(): array { return [ + self::hiddenVisibility(), + self::hiddenHtmlID(), + self::hiddenHintOptions(), + self::hiddenRequired(), + self::hiddenColumnSpanFull(), Hidden::make('options.dataSource'), - - Hidden::make('options.htmlId')->default(str()->random(6)), - - Hidden::make('options.hint.text'), - Hidden::make('options.hint.icon'), - Hidden::make('options.hint.color'), - - Hidden::make('options.is_required')->default(false), Hidden::make('options.is_inline')->default(false), - Hidden::make('options.column_span_full')->default(false), - - Hidden::make('options.visibility.active'), - Hidden::make('options.visibility.fieldID'), - Hidden::make('options.visibility.values'), ]; } diff --git a/src/Fields/Classes/RichEditor.php b/src/Fields/Classes/RichEditor.php index 5d0d3103..3fb0f55f 100644 --- a/src/Fields/Classes/RichEditor.php +++ b/src/Fields/Classes/RichEditor.php @@ -30,18 +30,11 @@ public static function getOptions(?array $sections = null): array public static function getOptionsHidden(): array { return [ - Hidden::make('options.htmlId')->default(str()->random(6)), - - Hidden::make('options.hint.text'), - Hidden::make('options.hint.icon'), - Hidden::make('options.hint.color'), - - Hidden::make('options.is_required')->default(false), - Hidden::make('options.column_span_full')->default(false), - - Hidden::make('options.visibility.active'), - Hidden::make('options.visibility.fieldID'), - Hidden::make('options.visibility.values'), + self::hiddenVisibility(), + self::hiddenHtmlID(), + self::hiddenHintOptions(), + self::hiddenRequired(), + self::hiddenColumnSpanFull(), ]; } } diff --git a/src/Fields/Classes/Select.php b/src/Fields/Classes/Select.php index d0865198..0e14b477 100644 --- a/src/Fields/Classes/Select.php +++ b/src/Fields/Classes/Select.php @@ -35,21 +35,13 @@ public static function getOptions(?array $sections = null): array public static function getOptionsHidden(): array { return [ + self::hiddenVisibility(), + self::hiddenHtmlID(), + self::hiddenHintOptions(), + self::hiddenRequired(), + self::hiddenColumnSpanFull(), Hidden::make('options.dataSource'), - - Hidden::make('options.htmlId')->default(str()->random(6)), - - Hidden::make('options.hint.text'), - Hidden::make('options.hint.icon'), - Hidden::make('options.hint.color'), - - Hidden::make('options.is_required')->default(false), Hidden::make('options.allow_multiple')->default(false), - Hidden::make('options.column_span_full')->default(false), - - Hidden::make('options.visibility.active'), - Hidden::make('options.visibility.fieldID'), - Hidden::make('options.visibility.values'), ]; } diff --git a/src/Fields/Classes/TextInput.php b/src/Fields/Classes/TextInput.php index 37784c04..0ab5b30e 100644 --- a/src/Fields/Classes/TextInput.php +++ b/src/Fields/Classes/TextInput.php @@ -69,24 +69,16 @@ public static function getOptions(?array $sections = null): array public static function getOptionsHidden(): array { return [ + self::hiddenVisibility(), + self::hiddenHtmlID(), + self::hiddenHintOptions(), + self::hiddenRequired(), + self::hiddenColumnSpanFull(), Hidden::make('options.dateType'), Hidden::make('options.prefix'), Hidden::make('options.suffix'), Hidden::make('options.minValue'), Hidden::make('options.maxValue'), - - Hidden::make('options.htmlId')->default(str()->random(6)), - - Hidden::make('options.hint.text'), - Hidden::make('options.hint.icon'), - Hidden::make('options.hint.color'), - - Hidden::make('options.is_required')->default(false), - Hidden::make('options.column_span_full')->default(false), - - Hidden::make('options.visibility.active'), - Hidden::make('options.visibility.fieldID'), - Hidden::make('options.visibility.values'), ]; } diff --git a/src/Fields/Classes/Textarea.php b/src/Fields/Classes/Textarea.php index 7dfc706b..b3722dbb 100644 --- a/src/Fields/Classes/Textarea.php +++ b/src/Fields/Classes/Textarea.php @@ -44,23 +44,15 @@ public static function getOptions(?array $sections = null): array public static function getOptionsHidden(): array { return [ - Hidden::make('options.htmlId')->default(str()->random(6)), - + self::hiddenVisibility(), + self::hiddenHtmlID(), + self::hiddenHintOptions(), + self::hiddenRequired(), + self::hiddenColumnSpanFull(), Hidden::make('options.rows'), Hidden::make('options.cols'), Hidden::make('options.minLength'), Hidden::make('options.maxLength'), - - Hidden::make('options.hint.text'), - Hidden::make('options.hint.icon'), - Hidden::make('options.hint.color'), - - Hidden::make('options.is_required')->default(false), - Hidden::make('options.column_span_full')->default(false), - - Hidden::make('options.visibility.active'), - Hidden::make('options.visibility.fieldID'), - Hidden::make('options.visibility.values'), ]; } diff --git a/src/Fields/Classes/TimePicker.php b/src/Fields/Classes/TimePicker.php index 1f023fcc..38b4fa12 100644 --- a/src/Fields/Classes/TimePicker.php +++ b/src/Fields/Classes/TimePicker.php @@ -30,18 +30,11 @@ public static function getOptions(?array $sections = null): array public static function getOptionsHidden(): array { return [ - Hidden::make('options.htmlId')->default(str()->random(6)), - - Hidden::make('options.hint.text'), - Hidden::make('options.hint.icon'), - Hidden::make('options.hint.color'), - - Hidden::make('options.is_required')->default(false), - Hidden::make('options.column_span_full')->default(false), - - Hidden::make('options.visibility.active'), - Hidden::make('options.visibility.fieldID'), - Hidden::make('options.visibility.values'), + self::hiddenVisibility(), + self::hiddenHtmlID(), + self::hiddenHintOptions(), + self::hiddenRequired(), + self::hiddenColumnSpanFull(), ]; } } diff --git a/src/Fields/Classes/Toggle.php b/src/Fields/Classes/Toggle.php index cbfe21a7..6042623f 100644 --- a/src/Fields/Classes/Toggle.php +++ b/src/Fields/Classes/Toggle.php @@ -30,18 +30,11 @@ public static function getOptions(?array $sections = null): array public static function getOptionsHidden(): array { return [ - Hidden::make('options.htmlId')->default(str()->random(6)), - - Hidden::make('options.hint.text'), - Hidden::make('options.hint.icon'), - Hidden::make('options.hint.color'), - - Hidden::make('options.is_required')->default(false), - Hidden::make('options.column_span_full')->default(false), - - Hidden::make('options.visibility.active'), - Hidden::make('options.visibility.fieldID'), - Hidden::make('options.visibility.values'), + self::hiddenVisibility(), + self::hiddenHtmlID(), + self::hiddenHintOptions(), + self::hiddenRequired(), + self::hiddenColumnSpanFull(), ]; } diff --git a/src/Fields/FieldsContract.php b/src/Fields/FieldsContract.php index 12a0c348..9ae82524 100644 --- a/src/Fields/FieldsContract.php +++ b/src/Fields/FieldsContract.php @@ -11,6 +11,7 @@ use Illuminate\Support\Arr; use Illuminate\Support\Collection; use LaraZeus\Bolt\BoltPlugin; +use LaraZeus\Bolt\Concerns\HasHiddenOptions; use LaraZeus\Bolt\Concerns\HasOptions; use LaraZeus\Bolt\Contracts\Fields; use LaraZeus\Bolt\Facades\Bolt; @@ -23,6 +24,7 @@ abstract class FieldsContract implements Arrayable, Fields { use HasOptions; + use HasHiddenOptions; public bool $disabled = false; From dc66459d2c5cb8e89a670d1833fe32f823edb315 Mon Sep 17 00:00:00 2001 From: atmonshi Date: Sun, 7 Jan 2024 13:28:15 +0000 Subject: [PATCH 3/5] Fix styling --- src/Concerns/Schemata.php | 20 ++++++++++---------- src/Fields/Classes/CheckboxList.php | 1 - src/Fields/Classes/DatePicker.php | 1 - src/Fields/Classes/DateTimePicker.php | 1 - src/Fields/Classes/Paragraph.php | 1 - src/Fields/Classes/RichEditor.php | 1 - src/Fields/Classes/TimePicker.php | 1 - src/Fields/Classes/Toggle.php | 1 - src/Fields/FieldsContract.php | 2 +- 9 files changed, 11 insertions(+), 18 deletions(-) diff --git a/src/Concerns/Schemata.php b/src/Concerns/Schemata.php index 2fcdf1d8..ba3c7848 100644 --- a/src/Concerns/Schemata.php +++ b/src/Concerns/Schemata.php @@ -53,7 +53,7 @@ public static function getMainFormSchema(): array ->addActionLabel(__('Add Section')) ->cloneable() ->collapsible() - ->collapsed(fn(string $operation) => $operation === 'edit') + ->collapsed(fn (string $operation) => $operation === 'edit') ->minItems(1) ->extraItemActions([ Action::make('options') @@ -61,7 +61,7 @@ public static function getMainFormSchema(): array ->color('warning') ->tooltip('more section options') ->icon('heroicon-m-cog') - ->fillForm(fn( + ->fillForm(fn ( $state, array $arguments, Repeater $component @@ -75,7 +75,7 @@ public static function getMainFormSchema(): array ->visible($formOptions['show-as'] !== 'tabs') ->label(__('Section Description')), Select::make('columns') - ->options(fn(): array => array_combine(range(1, 12), range(1, 12))) + ->options(fn (): array => array_combine(range(1, 12), range(1, 12))) ->required() ->default(1) ->hint(__('fields per row')) @@ -102,7 +102,7 @@ public static function getMainFormSchema(): array $component->state($state); }), ]) - ->itemLabel(fn(array $state): ?string => $state['name'] ?? null) + ->itemLabel(fn (array $state): ?string => $state['name'] ?? null) ->columnSpan(2), ]; } @@ -214,7 +214,7 @@ public static function getTabsSchema(): array }), TextInput::make('slug')->required()->maxLength(255)->label(__('slug')), ]) - ->getOptionLabelFromRecordUsing(fn(Category $record) => "{$record->name}"), + ->getOptionLabelFromRecordUsing(fn (Category $record) => "{$record->name}"), Grid::make() ->columns(2) ->schema([ @@ -260,7 +260,7 @@ public static function getTabsSchema(): array Tabs\Tab::make('embed-tab') ->label(__('Embed')) - ->visible(fn( + ->visible(fn ( string $operation ): bool => class_exists(\LaraZeus\Sky\SkyServiceProvider::class) && $operation === 'edit') ->schema([ @@ -269,7 +269,7 @@ public static function getTabsSchema(): array ->dehydrated(false) ->disabled() ->formatStateUsing(function (Get $get) { - return ''.$get('slug').''; + return '' . $get('slug') . ''; }), ]), @@ -326,7 +326,7 @@ public static function getSectionsSchema(): array ->cloneable() ->minItems(1) ->collapsible() - ->collapsed(fn(string $operation) => $operation === 'edit') + ->collapsed(fn (string $operation) => $operation === 'edit') ->grid([ 'default' => 1, 'md' => 2, @@ -334,7 +334,7 @@ public static function getSectionsSchema(): array '2xl' => 3, ]) ->label('') - ->itemLabel(fn(array $state): ?string => $state['name'] ?? null) + ->itemLabel(fn (array $state): ?string => $state['name'] ?? null) ->addActionLabel(__('Add field')) ->extraItemActions([ Action::make('options') @@ -342,7 +342,7 @@ public static function getSectionsSchema(): array ->color('warning') ->tooltip('more section options') ->icon('heroicon-m-cog') - ->fillForm(fn( + ->fillForm(fn ( $state, array $arguments, Repeater $component diff --git a/src/Fields/Classes/CheckboxList.php b/src/Fields/Classes/CheckboxList.php index 5ad592ac..a27a8607 100644 --- a/src/Fields/Classes/CheckboxList.php +++ b/src/Fields/Classes/CheckboxList.php @@ -2,7 +2,6 @@ namespace LaraZeus\Bolt\Fields\Classes; -use Filament\Forms\Components\Hidden; use LaraZeus\Bolt\Fields\FieldsContract; use LaraZeus\Bolt\Models\Field; use LaraZeus\Bolt\Models\FieldResponse; diff --git a/src/Fields/Classes/DatePicker.php b/src/Fields/Classes/DatePicker.php index 0061ac8e..2bba4c9d 100644 --- a/src/Fields/Classes/DatePicker.php +++ b/src/Fields/Classes/DatePicker.php @@ -2,7 +2,6 @@ namespace LaraZeus\Bolt\Fields\Classes; -use Filament\Forms\Components\Hidden; use LaraZeus\Bolt\Fields\FieldsContract; class DatePicker extends FieldsContract diff --git a/src/Fields/Classes/DateTimePicker.php b/src/Fields/Classes/DateTimePicker.php index 7204aa13..9ba70cb3 100644 --- a/src/Fields/Classes/DateTimePicker.php +++ b/src/Fields/Classes/DateTimePicker.php @@ -2,7 +2,6 @@ namespace LaraZeus\Bolt\Fields\Classes; -use Filament\Forms\Components\Hidden; use LaraZeus\Bolt\Fields\FieldsContract; class DateTimePicker extends FieldsContract diff --git a/src/Fields/Classes/Paragraph.php b/src/Fields/Classes/Paragraph.php index a3890356..4b02750c 100644 --- a/src/Fields/Classes/Paragraph.php +++ b/src/Fields/Classes/Paragraph.php @@ -2,7 +2,6 @@ namespace LaraZeus\Bolt\Fields\Classes; -use Filament\Forms\Components\Hidden; use Filament\Forms\Components\Placeholder; use LaraZeus\Bolt\Fields\FieldsContract; diff --git a/src/Fields/Classes/RichEditor.php b/src/Fields/Classes/RichEditor.php index 3fb0f55f..f12bf446 100644 --- a/src/Fields/Classes/RichEditor.php +++ b/src/Fields/Classes/RichEditor.php @@ -2,7 +2,6 @@ namespace LaraZeus\Bolt\Fields\Classes; -use Filament\Forms\Components\Hidden; use LaraZeus\Bolt\Fields\FieldsContract; class RichEditor extends FieldsContract diff --git a/src/Fields/Classes/TimePicker.php b/src/Fields/Classes/TimePicker.php index 38b4fa12..d63022f4 100644 --- a/src/Fields/Classes/TimePicker.php +++ b/src/Fields/Classes/TimePicker.php @@ -2,7 +2,6 @@ namespace LaraZeus\Bolt\Fields\Classes; -use Filament\Forms\Components\Hidden; use LaraZeus\Bolt\Fields\FieldsContract; class TimePicker extends FieldsContract diff --git a/src/Fields/Classes/Toggle.php b/src/Fields/Classes/Toggle.php index 6042623f..1769adeb 100644 --- a/src/Fields/Classes/Toggle.php +++ b/src/Fields/Classes/Toggle.php @@ -2,7 +2,6 @@ namespace LaraZeus\Bolt\Fields\Classes; -use Filament\Forms\Components\Hidden; use LaraZeus\Bolt\Fields\FieldsContract; class Toggle extends FieldsContract diff --git a/src/Fields/FieldsContract.php b/src/Fields/FieldsContract.php index 9ae82524..118d6bb4 100644 --- a/src/Fields/FieldsContract.php +++ b/src/Fields/FieldsContract.php @@ -23,8 +23,8 @@ /** @phpstan-return Arrayable */ abstract class FieldsContract implements Arrayable, Fields { - use HasOptions; use HasHiddenOptions; + use HasOptions; public bool $disabled = false; From 544824577a426bce61d8bdb3a3373e4332c04949 Mon Sep 17 00:00:00 2001 From: Ash Monsh Date: Sun, 7 Jan 2024 16:29:49 +0300 Subject: [PATCH 4/5] wip --- src/Concerns/Schemata.php | 20 ++++++++++---------- src/Fields/Classes/CheckboxList.php | 1 - src/Fields/Classes/DatePicker.php | 1 - src/Fields/Classes/DateTimePicker.php | 1 - src/Fields/Classes/Paragraph.php | 1 - src/Fields/Classes/RichEditor.php | 1 - src/Fields/Classes/TimePicker.php | 1 - src/Fields/Classes/Toggle.php | 1 - src/Fields/FieldsContract.php | 2 +- 9 files changed, 11 insertions(+), 18 deletions(-) diff --git a/src/Concerns/Schemata.php b/src/Concerns/Schemata.php index 2fcdf1d8..ba3c7848 100644 --- a/src/Concerns/Schemata.php +++ b/src/Concerns/Schemata.php @@ -53,7 +53,7 @@ public static function getMainFormSchema(): array ->addActionLabel(__('Add Section')) ->cloneable() ->collapsible() - ->collapsed(fn(string $operation) => $operation === 'edit') + ->collapsed(fn (string $operation) => $operation === 'edit') ->minItems(1) ->extraItemActions([ Action::make('options') @@ -61,7 +61,7 @@ public static function getMainFormSchema(): array ->color('warning') ->tooltip('more section options') ->icon('heroicon-m-cog') - ->fillForm(fn( + ->fillForm(fn ( $state, array $arguments, Repeater $component @@ -75,7 +75,7 @@ public static function getMainFormSchema(): array ->visible($formOptions['show-as'] !== 'tabs') ->label(__('Section Description')), Select::make('columns') - ->options(fn(): array => array_combine(range(1, 12), range(1, 12))) + ->options(fn (): array => array_combine(range(1, 12), range(1, 12))) ->required() ->default(1) ->hint(__('fields per row')) @@ -102,7 +102,7 @@ public static function getMainFormSchema(): array $component->state($state); }), ]) - ->itemLabel(fn(array $state): ?string => $state['name'] ?? null) + ->itemLabel(fn (array $state): ?string => $state['name'] ?? null) ->columnSpan(2), ]; } @@ -214,7 +214,7 @@ public static function getTabsSchema(): array }), TextInput::make('slug')->required()->maxLength(255)->label(__('slug')), ]) - ->getOptionLabelFromRecordUsing(fn(Category $record) => "{$record->name}"), + ->getOptionLabelFromRecordUsing(fn (Category $record) => "{$record->name}"), Grid::make() ->columns(2) ->schema([ @@ -260,7 +260,7 @@ public static function getTabsSchema(): array Tabs\Tab::make('embed-tab') ->label(__('Embed')) - ->visible(fn( + ->visible(fn ( string $operation ): bool => class_exists(\LaraZeus\Sky\SkyServiceProvider::class) && $operation === 'edit') ->schema([ @@ -269,7 +269,7 @@ public static function getTabsSchema(): array ->dehydrated(false) ->disabled() ->formatStateUsing(function (Get $get) { - return ''.$get('slug').''; + return '' . $get('slug') . ''; }), ]), @@ -326,7 +326,7 @@ public static function getSectionsSchema(): array ->cloneable() ->minItems(1) ->collapsible() - ->collapsed(fn(string $operation) => $operation === 'edit') + ->collapsed(fn (string $operation) => $operation === 'edit') ->grid([ 'default' => 1, 'md' => 2, @@ -334,7 +334,7 @@ public static function getSectionsSchema(): array '2xl' => 3, ]) ->label('') - ->itemLabel(fn(array $state): ?string => $state['name'] ?? null) + ->itemLabel(fn (array $state): ?string => $state['name'] ?? null) ->addActionLabel(__('Add field')) ->extraItemActions([ Action::make('options') @@ -342,7 +342,7 @@ public static function getSectionsSchema(): array ->color('warning') ->tooltip('more section options') ->icon('heroicon-m-cog') - ->fillForm(fn( + ->fillForm(fn ( $state, array $arguments, Repeater $component diff --git a/src/Fields/Classes/CheckboxList.php b/src/Fields/Classes/CheckboxList.php index 5ad592ac..a27a8607 100644 --- a/src/Fields/Classes/CheckboxList.php +++ b/src/Fields/Classes/CheckboxList.php @@ -2,7 +2,6 @@ namespace LaraZeus\Bolt\Fields\Classes; -use Filament\Forms\Components\Hidden; use LaraZeus\Bolt\Fields\FieldsContract; use LaraZeus\Bolt\Models\Field; use LaraZeus\Bolt\Models\FieldResponse; diff --git a/src/Fields/Classes/DatePicker.php b/src/Fields/Classes/DatePicker.php index 0061ac8e..2bba4c9d 100644 --- a/src/Fields/Classes/DatePicker.php +++ b/src/Fields/Classes/DatePicker.php @@ -2,7 +2,6 @@ namespace LaraZeus\Bolt\Fields\Classes; -use Filament\Forms\Components\Hidden; use LaraZeus\Bolt\Fields\FieldsContract; class DatePicker extends FieldsContract diff --git a/src/Fields/Classes/DateTimePicker.php b/src/Fields/Classes/DateTimePicker.php index 7204aa13..9ba70cb3 100644 --- a/src/Fields/Classes/DateTimePicker.php +++ b/src/Fields/Classes/DateTimePicker.php @@ -2,7 +2,6 @@ namespace LaraZeus\Bolt\Fields\Classes; -use Filament\Forms\Components\Hidden; use LaraZeus\Bolt\Fields\FieldsContract; class DateTimePicker extends FieldsContract diff --git a/src/Fields/Classes/Paragraph.php b/src/Fields/Classes/Paragraph.php index a3890356..4b02750c 100644 --- a/src/Fields/Classes/Paragraph.php +++ b/src/Fields/Classes/Paragraph.php @@ -2,7 +2,6 @@ namespace LaraZeus\Bolt\Fields\Classes; -use Filament\Forms\Components\Hidden; use Filament\Forms\Components\Placeholder; use LaraZeus\Bolt\Fields\FieldsContract; diff --git a/src/Fields/Classes/RichEditor.php b/src/Fields/Classes/RichEditor.php index 3fb0f55f..f12bf446 100644 --- a/src/Fields/Classes/RichEditor.php +++ b/src/Fields/Classes/RichEditor.php @@ -2,7 +2,6 @@ namespace LaraZeus\Bolt\Fields\Classes; -use Filament\Forms\Components\Hidden; use LaraZeus\Bolt\Fields\FieldsContract; class RichEditor extends FieldsContract diff --git a/src/Fields/Classes/TimePicker.php b/src/Fields/Classes/TimePicker.php index 38b4fa12..d63022f4 100644 --- a/src/Fields/Classes/TimePicker.php +++ b/src/Fields/Classes/TimePicker.php @@ -2,7 +2,6 @@ namespace LaraZeus\Bolt\Fields\Classes; -use Filament\Forms\Components\Hidden; use LaraZeus\Bolt\Fields\FieldsContract; class TimePicker extends FieldsContract diff --git a/src/Fields/Classes/Toggle.php b/src/Fields/Classes/Toggle.php index 6042623f..1769adeb 100644 --- a/src/Fields/Classes/Toggle.php +++ b/src/Fields/Classes/Toggle.php @@ -2,7 +2,6 @@ namespace LaraZeus\Bolt\Fields\Classes; -use Filament\Forms\Components\Hidden; use LaraZeus\Bolt\Fields\FieldsContract; class Toggle extends FieldsContract diff --git a/src/Fields/FieldsContract.php b/src/Fields/FieldsContract.php index 9ae82524..118d6bb4 100644 --- a/src/Fields/FieldsContract.php +++ b/src/Fields/FieldsContract.php @@ -23,8 +23,8 @@ /** @phpstan-return Arrayable */ abstract class FieldsContract implements Arrayable, Fields { - use HasOptions; use HasHiddenOptions; + use HasOptions; public bool $disabled = false; From c755b9a93ee2d8454f69bfb18ca749402094b22b Mon Sep 17 00:00:00 2001 From: Ash Monsh Date: Mon, 8 Jan 2024 15:57:14 +0300 Subject: [PATCH 5/5] Update Schemata.php --- src/Concerns/Schemata.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Concerns/Schemata.php b/src/Concerns/Schemata.php index ba3c7848..0f77b26d 100644 --- a/src/Concerns/Schemata.php +++ b/src/Concerns/Schemata.php @@ -46,7 +46,7 @@ public static function getMainFormSchema(): array ]), Repeater::make('sections') - ->label('') + ->hiddenLabel() ->schema(static::getSectionsSchema()) ->relationship() ->orderColumn('ordering')