diff --git a/resources/lang/en/menu-builder.php b/resources/lang/en/menu-builder.php index 8a5c74d..503f148 100644 --- a/resources/lang/en/menu-builder.php +++ b/resources/lang/en/menu-builder.php @@ -15,6 +15,10 @@ 'label' => 'Locations', 'description' => 'Choose where to display the menu.', 'empty' => 'Unassigned', + 'actions' => [ + 'select_all' => 'Select all', + 'deselect_all' => 'Deselect all', + ], ], 'is_visible' => [ 'label' => 'Visible', diff --git a/resources/lang/vi/menu-builder.php b/resources/lang/vi/menu-builder.php index 0a78f7a..78f667f 100644 --- a/resources/lang/vi/menu-builder.php +++ b/resources/lang/vi/menu-builder.php @@ -15,6 +15,10 @@ 'label' => 'Vị trí', 'description' => 'Chọn vị trí hiển thị menu.', 'empty' => 'Chưa gán', + 'actions' => [ + 'select_all' => 'Chọn tất cả', + 'deselect_all' => 'Bỏ chọn tất cả', + ], ], 'is_visible' => [ 'label' => 'Hiển thị', diff --git a/src/Resources/MenuResource.php b/src/Resources/MenuResource.php index 31ff936..2c011d5 100644 --- a/src/Resources/MenuResource.php +++ b/src/Resources/MenuResource.php @@ -6,12 +6,14 @@ use Datlechin\FilamentMenuBuilder\FilamentMenuBuilderPlugin; use Datlechin\FilamentMenuBuilder\Models\Menu; -use Filament\Forms\Components\CheckboxList; +use Filament\Forms\Components\Actions\Action; use Filament\Forms\Components\Component; use Filament\Forms\Components\Group; use Filament\Forms\Components\TextInput; use Filament\Forms\Components\Toggle; +use Filament\Forms\Components\ToggleButtons; use Filament\Forms\Form; +use Filament\Forms\Get; use Filament\Forms\Set; use Filament\Resources\Resource; use Filament\Tables; @@ -33,12 +35,23 @@ public static function form(Form $form): Form TextInput::make('name') ->label(__('filament-menu-builder::menu-builder.resource.name.label')) ->required(), - CheckboxList::make('locations') - ->bulkToggleable() + ToggleButtons::make('locations') + ->multiple() + ->inline() + ->reactive() ->visible(fn (string $context) => $context === 'edit' && $locations) ->label(__('filament-menu-builder::menu-builder.resource.locations.label')) ->afterStateHydrated(fn (Menu $menu, Set $set) => $set('locations', $menu->locations->pluck('location'))) ->helperText(__('filament-menu-builder::menu-builder.resource.locations.description')) + ->hintActions([ + Action::make(__('filament-menu-builder::menu-builder.resource.locations.actions.select_all')) + ->action(fn (Set $set) => $set('locations', array_keys($locations))) + ->visible(fn (Get $get) => count($get('locations')) !== count($locations)), + + Action::make(__('filament-menu-builder::menu-builder.resource.locations.actions.deselect_all')) + ->action(fn (Set $set) => $set('locations', [])) + ->visible(fn (Get $get) => count($get('locations')) === count($locations)), + ]) ->options($locations), Toggle::make('is_visible') ->label(__('filament-menu-builder::menu-builder.resource.is_visible.label'))