|
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