|
4 | 4 |
|
5 | 5 | use Boy132\Subdomains\Filament\Admin\Resources\CloudflareDomains\Pages\ManageCloudflareDomains; |
6 | 6 | use Boy132\Subdomains\Models\CloudflareDomain; |
| 7 | +use Exception; |
| 8 | +use Filament\Actions\Action; |
7 | 9 | use Filament\Actions\DeleteAction; |
8 | | -use Filament\Actions\EditAction; |
9 | | -use Filament\Actions\ViewAction; |
10 | 10 | use Filament\Forms\Components\TextInput; |
11 | 11 | use Filament\Infolists\Components\TextEntry; |
| 12 | +use Filament\Notifications\Notification; |
12 | 13 | use Filament\Resources\Resource; |
13 | 14 | use Filament\Schemas\Schema; |
| 15 | +use Filament\Tables\Columns\IconColumn; |
14 | 16 | use Filament\Tables\Columns\TextColumn; |
15 | 17 | use Filament\Tables\Table; |
16 | 18 |
|
@@ -56,11 +58,36 @@ public static function table(Table $table): Table |
56 | 58 | TextColumn::make('subdomains_count') |
57 | 59 | ->label(trans_choice('subdomains::strings.subdomain', 2)) |
58 | 60 | ->counts('subdomains'), |
| 61 | + IconColumn::make('is_synced') |
| 62 | + ->label(trans('subdomains::strings.is_synced')) |
| 63 | + ->state(fn (CloudflareDomain $domain) => !is_null($domain->cloudflare_id)) |
| 64 | + ->boolean() |
| 65 | + ->trueIcon('tabler-refresh') |
| 66 | + ->falseIcon('tabler-refresh-off') |
| 67 | + ->tooltip(fn (CloudflareDomain $domain) => $domain->cloudflare_id), |
59 | 68 | ]) |
60 | 69 | ->recordActions([ |
61 | | - ViewAction::make() |
62 | | - ->hidden(fn ($record) => static::canEdit($record)), |
63 | | - EditAction::make(), |
| 70 | + Action::make('sync') |
| 71 | + ->label(trans('subdomains::strings.sync')) |
| 72 | + ->icon('tabler-refresh') |
| 73 | + ->visible(fn (CloudflareDomain $domain) => is_null($domain->cloudflare_id)) |
| 74 | + ->action(function (CloudflareDomain $domain) { |
| 75 | + try { |
| 76 | + $domain->fetchCloudflareId(); |
| 77 | + |
| 78 | + Notification::make() |
| 79 | + ->title(trans('subdomains::notifications.synced')) |
| 80 | + ->success() |
| 81 | + ->send(); |
| 82 | + } catch (Exception $exception) { |
| 83 | + Notification::make() |
| 84 | + ->title(trans('subdomains::notifications.not_synced')) |
| 85 | + ->body($exception->getMessage()) |
| 86 | + ->danger() |
| 87 | + ->persistent() |
| 88 | + ->send(); |
| 89 | + } |
| 90 | + }), |
64 | 91 | DeleteAction::make(), |
65 | 92 | ]) |
66 | 93 | ->emptyStateIcon('tabler-world-www') |
|
0 commit comments