Skip to content

Commit 01c5a22

Browse files
committed
improve delete department
add cascade on delete and update department for letters show soft deleted departments and allow force delete or restor them
1 parent 585b80d commit 01c5a22

File tree

4 files changed

+101
-5
lines changed

4 files changed

+101
-5
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
<?php
2+
3+
use Illuminate\Database\Migrations\Migration;
4+
use Illuminate\Database\Schema\Blueprint;
5+
use Illuminate\Support\Facades\Schema;
6+
7+
return new class extends Migration
8+
{
9+
/**
10+
* Run the migrations.
11+
*
12+
* @return void
13+
*/
14+
public function up()
15+
{
16+
Schema::table('letters', function (Blueprint $table) {
17+
Schema::table('letters', function (Blueprint $table) {
18+
Schema::disableForeignKeyConstraints();
19+
$table->dropForeign(['department_id']);
20+
Schema::enableForeignKeyConstraints();
21+
22+
$table->foreign('department_id')
23+
->onUpdate('cascade')
24+
->onDelete('cascade')
25+
->references('id')
26+
->on('departments');
27+
});
28+
}
29+
30+
/**
31+
* Reverse the migrations.
32+
*
33+
* @return void
34+
*/
35+
public function down()
36+
{
37+
38+
}
39+
};

src/Filament/Resources/DepartmentResource.php

+28-2
Original file line numberDiff line numberDiff line change
@@ -13,15 +13,23 @@
1313
use Filament\Tables\Actions\Action;
1414
use Filament\Tables\Actions\ActionGroup;
1515
use Filament\Tables\Actions\DeleteAction;
16+
use Filament\Tables\Actions\DeleteBulkAction;
1617
use Filament\Tables\Actions\EditAction;
18+
use Filament\Tables\Actions\ForceDeleteAction;
19+
use Filament\Tables\Actions\ForceDeleteBulkAction;
20+
use Filament\Tables\Actions\RestoreAction;
21+
use Filament\Tables\Actions\RestoreBulkAction;
1722
use Filament\Tables\Actions\ViewAction;
1823
use Filament\Tables\Columns\IconColumn;
1924
use Filament\Tables\Columns\ImageColumn;
2025
use Filament\Tables\Columns\TextColumn;
2126
use Filament\Tables\Filters\Filter;
27+
use Filament\Tables\Filters\TrashedFilter;
2228
use Illuminate\Database\Eloquent\Builder;
2329
use Illuminate\Database\Eloquent\Model;
30+
use Illuminate\Database\Eloquent\SoftDeletingScope;
2431
use LaraZeus\Wind\Filament\Resources\DepartmentResource\Pages;
32+
use LaraZeus\Wind\Models\Department;
2533

2634
class DepartmentResource extends Resource
2735
{
@@ -74,6 +82,17 @@ public static function form(Form $form): Form
7482
]);
7583
}
7684

85+
/**
86+
* @return Builder<Department>
87+
*/
88+
public static function getEloquentQuery(): Builder
89+
{
90+
return parent::getEloquentQuery()
91+
->withoutGlobalScopes([
92+
SoftDeletingScope::class,
93+
]);
94+
}
95+
7796
public static function table(Table $table): Table
7897
{
7998
return $table
@@ -105,6 +124,7 @@ public static function table(Table $table): Table
105124
])
106125
->defaultSort('id', 'desc')
107126
->filters([
127+
TrashedFilter::make(),
108128
Filter::make('is_active')
109129
->label(__('is active'))
110130
->toggle()
@@ -114,6 +134,11 @@ public static function table(Table $table): Table
114134
->toggle()
115135
->query(fn (Builder $query): Builder => $query->where('is_active', false)),
116136
])
137+
->bulkActions([
138+
DeleteBulkAction::make(),
139+
ForceDeleteBulkAction::make(),
140+
RestoreBulkAction::make(),
141+
])
117142
->actions([
118143
ActionGroup::make([
119144
EditAction::make('edit')->label(__('Edit')),
@@ -126,8 +151,9 @@ public static function table(Table $table): Table
126151
->label(__('Open'))
127152
->url(fn (Model $record): string => route('contact', ['departmentSlug' => $record]))
128153
->openUrlInNewTab(),
129-
DeleteAction::make('delete')
130-
->label(__('Delete')),
154+
DeleteAction::make('delete'),
155+
ForceDeleteAction::make(),
156+
RestoreAction::make(),
131157
]),
132158
]);
133159
}

src/Filament/Resources/LetterResource.php

+29-2
Original file line numberDiff line numberDiff line change
@@ -11,13 +11,22 @@
1111
use Filament\Tables\Actions\Action;
1212
use Filament\Tables\Actions\ActionGroup;
1313
use Filament\Tables\Actions\DeleteAction;
14+
use Filament\Tables\Actions\DeleteBulkAction;
1415
use Filament\Tables\Actions\EditAction;
16+
use Filament\Tables\Actions\ForceDeleteAction;
17+
use Filament\Tables\Actions\ForceDeleteBulkAction;
18+
use Filament\Tables\Actions\RestoreAction;
19+
use Filament\Tables\Actions\RestoreBulkAction;
1520
use Filament\Tables\Actions\ViewAction;
1621
use Filament\Tables\Columns\TextColumn;
1722
use Filament\Tables\Columns\ViewColumn;
1823
use Filament\Tables\Filters\SelectFilter;
24+
use Filament\Tables\Filters\TrashedFilter;
25+
use Illuminate\Database\Eloquent\Builder;
1926
use Illuminate\Database\Eloquent\Model;
27+
use Illuminate\Database\Eloquent\SoftDeletingScope;
2028
use LaraZeus\Wind\Filament\Resources\LetterResource\Pages;
29+
use LaraZeus\Wind\Models\Letter;
2130

2231
class LetterResource extends Resource
2332
{
@@ -35,6 +44,17 @@ protected static function getNavigationBadge(): ?string
3544
return static::getModel()::where('status', config('zeus-wind.default_status'))->count();
3645
}
3746

47+
/**
48+
* @return Builder<Letter>
49+
*/
50+
public static function getEloquentQuery(): Builder
51+
{
52+
return parent::getEloquentQuery()
53+
->withoutGlobalScopes([
54+
SoftDeletingScope::class,
55+
]);
56+
}
57+
3858
public static function form(Form $form): Form
3959
{
4060
return $form
@@ -112,7 +132,13 @@ public static function table(Table $table): Table
112132
->formatStateUsing(fn (string $state): string => __("status_{$state}")),
113133
])
114134
->defaultSort('id', 'desc')
135+
->bulkActions([
136+
DeleteBulkAction::make(),
137+
ForceDeleteBulkAction::make(),
138+
RestoreBulkAction::make(),
139+
])
115140
->filters([
141+
TrashedFilter::make(),
116142
SelectFilter::make('status')
117143
->options([
118144
'NEW' => __('NEW'),
@@ -137,8 +163,9 @@ public static function table(Table $table): Table
137163
->label(__('Open'))
138164
->url(fn (Model $record): string => route('contact', ['departmentSlug' => $record]))
139165
->openUrlInNewTab(),
140-
DeleteAction::make('delete')
141-
->label(__('Delete')),
166+
DeleteAction::make('delete'),
167+
ForceDeleteAction::make(),
168+
RestoreAction::make(),
142169
]),
143170
]);
144171
}

src/WindServiceProvider.php

+5-1
Original file line numberDiff line numberDiff line change
@@ -54,7 +54,11 @@ protected function getCommands(): array
5454
public function packageConfiguring(Package $package): void
5555
{
5656
$package
57-
->hasMigrations(['create_department_table', 'create_letters_table'])
57+
->hasMigrations([
58+
'create_department_table',
59+
'create_letters_table',
60+
'alter_letters_constraints',
61+
])
5862
->hasRoute('web');
5963
}
6064
}

0 commit comments

Comments
 (0)