|
2 | 2 |
|
3 | 3 | namespace Statikbe\FilamentFlexibleContentBlockPages\Resources; |
4 | 4 |
|
| 5 | +use Filament\Actions\Action; |
5 | 6 | use Filament\Forms\Components\Grid; |
6 | 7 | use Filament\Forms\Components\Tabs; |
7 | 8 | use Filament\Forms\Components\Tabs\Tab; |
8 | 9 | use Filament\Forms\Form; |
| 10 | +use Filament\Notifications\Notification; |
9 | 11 | use Filament\Resources\Concerns\Translatable; |
10 | 12 | use Filament\Resources\Resource; |
11 | 13 | use Filament\Tables\Actions\DeleteBulkAction; |
12 | 14 | use Filament\Tables\Actions\EditAction; |
13 | 15 | use Filament\Tables\Columns\TextColumn; |
14 | 16 | use Filament\Tables\Table; |
| 17 | +use Illuminate\Database\Eloquent\Collection; |
15 | 18 | use Statikbe\FilamentFlexibleContentBlockPages\Facades\FilamentFlexibleContentBlockPages; |
| 19 | +use Statikbe\FilamentFlexibleContentBlockPages\Models\MenuItem; |
| 20 | +use Statikbe\FilamentFlexibleContentBlockPages\Models\Page; |
16 | 21 | use Statikbe\FilamentFlexibleContentBlockPages\Resources\PageResource\Pages\CreatePage; |
17 | 22 | use Statikbe\FilamentFlexibleContentBlockPages\Resources\PageResource\Pages\EditPage; |
18 | 23 | use Statikbe\FilamentFlexibleContentBlockPages\Resources\PageResource\Pages\ListPages; |
@@ -194,7 +199,32 @@ public static function table(Table $table): Table |
194 | 199 | ViewAction::make(), |
195 | 200 | ]) |
196 | 201 | ->bulkActions([ |
197 | | - DeleteBulkAction::make(), |
| 202 | + DeleteBulkAction::make() |
| 203 | + ->action(function (Collection $records, Action $action) { |
| 204 | + $usedInMenu = false; |
| 205 | + foreach ($records as $record) { |
| 206 | + // Prevent deletion if the page is referenced by a menu item |
| 207 | + /** @var ?MenuItem $menuItem */ |
| 208 | + $menuItem = $record->menuItem(); |
| 209 | + |
| 210 | + if ($menuItem) { |
| 211 | + $usedInMenu = true; |
| 212 | + |
| 213 | + Notification::make() |
| 214 | + ->title(flexiblePagesTrans('pages.notifications.used_in_menu', [ |
| 215 | + 'menu' => $menuItem->menu->name, |
| 216 | + 'menu_item' => $menuItem->getDisplayLabel(), |
| 217 | + ])) |
| 218 | + ->danger() |
| 219 | + ->send(); |
| 220 | + } |
| 221 | + } |
| 222 | + |
| 223 | + if (! $usedInMenu) { |
| 224 | + $this->process(static fn (Collection $records) => $records->each(fn (Page $record) => $record->delete())); |
| 225 | + $action->success(); |
| 226 | + } |
| 227 | + }), |
198 | 228 | ]) |
199 | 229 | ->recordUrl( |
200 | 230 | fn ($record): string => static::getUrl('edit', ['record' => $record]) |
|
0 commit comments