Skip to content

Commit dd3f1bf

Browse files
committed
Improve bulk delete action
1 parent 0d64e29 commit dd3f1bf

File tree

4 files changed

+43
-22
lines changed

4 files changed

+43
-22
lines changed

resources/lang/en/filament-flexible-content-block-pages.php

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -17,8 +17,10 @@
1717
'created_at_col' => 'Created at',
1818
],
1919
'notifications' => [
20-
'used_in_menu' => 'This page is used in the ":menu" menu, in item :menu_item. Please update the menu first and then try deleting this page again.',
21-
'used_in_menu_bulk' => 'Page ":page" is used in the ":menu" menu, in item :menu_item. Please update the menu first and then try deleting this page again.',
20+
'used_in_menu' => 'This is used in the ":menu" menu, in item :menu_item. Please update the menu first and then delete this again.',
21+
'used_in_menu_bulk' => 'Some items are used in menus. Please update the menus first and then delete these items again.',
22+
'page_referenced_by_menu_item' => '":page" (referenced by :menu in :menu_item)',
23+
'bulk_delete_successful' => ':count items deleted.',
2224
],
2325

2426
],

resources/lang/nl/filament-flexible-content-block-pages.php

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -17,8 +17,10 @@
1717
'created_at_col' => 'Aangemaakt op',
1818
],
1919
'notifications' => [
20-
'used_in_menu' => 'Deze pagina wordt in het ":menu" menu gebruikt, in item :menu_item. Gelieve eerst het menu aan te passen en dan deze pagina opnieuw te verwijderen.',
21-
'used_in_menu_bulk' => 'Pagina ":page" wordt in het ":menu" menu gebruikt, in item :menu_item. Gelieve eerst het menu aan te passen en dan deze pagina opnieuw te verwijderen.',
20+
'used_in_menu' => 'Dit wordt in het ":menu" menu gebruikt, in item :menu_item. Gelieve eerst het menu aan te passen en dan dit opnieuw te verwijderen.',
21+
'used_in_menu_bulk' => 'Sommige items worden in menu\'s gebruikt. Gelieve eerst de menu\'s aan te passen en dan deze itemss opnieuw te verwijderen.',
22+
'page_referenced_by_menu_item' => '":page" (gerefereerd door :menu in :menu_item)',
23+
'bulk_delete_successful' => ':count items verwijderd.',
2224
],
2325
],
2426
'redirects' => [

src/Actions/LinkedToMenuItemBulkDeleteAction.php

Lines changed: 33 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
use Filament\Tables\Actions\DeleteBulkAction;
88
use Illuminate\Database\Eloquent\Collection;
99
use Illuminate\Database\Eloquent\Model;
10+
use Illuminate\Support\HtmlString;
1011
use Statikbe\FilamentFlexibleContentBlockPages\Models\Contracts\HasMenuLabel;
1112
use Statikbe\FilamentFlexibleContentBlockPages\Models\MenuItem;
1213

@@ -20,33 +21,49 @@ public function setUp(): void
2021
parent::setUp();
2122

2223
$this->action(function (Collection $records, LinkedToMenuItemBulkDeleteAction $action) {
23-
$usedInMenu = false;
24+
$referencedPages = [];
25+
$deletablePages = [];
26+
2427
foreach ($records as $record) {
2528
/** @var Model&HasMenuLabel $record */
2629
// Prevent deletion if the page is referenced by a menu item
2730
/** @var ?MenuItem $menuItem */
2831
$menuItem = $record->menuItem;
2932

3033
if ($menuItem) {
31-
$usedInMenu = true;
32-
33-
Notification::make()
34-
->title(flexiblePagesTrans('pages.notifications.used_in_menu_bulk', [
35-
'page' => $record->getMenuLabel(),
36-
'menu' => $menuItem->menu->name,
37-
'menu_item' => $menuItem->getDisplayLabel(),
38-
]))
39-
->danger()
40-
->duration(12000)
41-
->send();
34+
$referencedPages[] = $record;
35+
} else {
36+
$deletablePages[] = $record;
4237
}
4338
}
4439

45-
if ($usedInMenu) {
46-
$action->failure();
40+
if (! empty($referencedPages)) {
41+
$pageNames = collect($referencedPages)->map(function (Model&HasMenuLabel $page) {
42+
return '<li>'.
43+
flexiblePagesTrans('pages.notifications.page_referenced_by_menu_item', [
44+
'page' => $page->getMenuLabel(),
45+
'menu' => $page->menuItem->menu->name,
46+
'menu_item' => $page->menuItem->getDisplayLabel(),
47+
])
48+
.'</li>';
49+
})->join('');
50+
51+
Notification::make()
52+
->title(flexiblePagesTrans('pages.notifications.used_in_menu_bulk'))
53+
->body(new HtmlString("<ul>$pageNames</ul>"))
54+
->danger()
55+
->duration(12000)
56+
->send();
4757
}
48-
else {
49-
$this->process(static fn (Collection $records) => $records->each(fn (Model&HasMenuLabel $record) => $record->delete()));
58+
59+
if (! empty($deletablePages)) {
60+
collect($deletablePages)->each(fn (Model&HasMenuLabel $record) => $record->delete());
61+
62+
Notification::make()
63+
->title(flexiblePagesTrans('pages.notifications.bulk_delete_successful', ['count' => count($deletablePages)]))
64+
->success()
65+
->send();
66+
5067
$action->success();
5168
}
5269
});

src/Resources/PageResource.php

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -168,7 +168,7 @@ protected static function getAdvancedTabFields(): array
168168
->searchable(['title', 'code', 'slug', 'intro']);
169169
}
170170

171-
if (!empty($gridFields)) {
171+
if (! empty($gridFields)) {
172172
$fields[] = Grid::make()->schema($gridFields);
173173
}
174174

@@ -198,7 +198,7 @@ public static function table(Table $table): Table
198198
LinkedToMenuItemBulkDeleteAction::make(),
199199
])
200200
->recordUrl(
201-
fn($record): string => static::getUrl('edit', ['record' => $record])
201+
fn ($record): string => static::getUrl('edit', ['record' => $record])
202202
)
203203
->modifyQueryUsing(function (Builder $query) {
204204
$query->with(['menuItem']);

0 commit comments

Comments
 (0)