d2d.emegrendeles.hu/app/Filament/Resources/FeatureFlags/Tables/FeatureFlagsTable.php

93 lines
3.6 KiB
PHP

<?php
namespace App\Filament\Resources\FeatureFlags\Tables;
use App\Models\FeatureFlag;
use App\Models\FeatureFlagOverride;
use App\Models\User;
use Filament\Actions\Action;
use Filament\Actions\BulkActionGroup;
use Filament\Actions\DeleteBulkAction;
use Filament\Actions\EditAction;
use Filament\Forms\Components\Radio;
use Filament\Forms\Components\Select;
use Filament\Tables\Columns\TextColumn;
use Filament\Tables\Columns\ToggleColumn;
use Filament\Tables\Table;
class FeatureFlagsTable
{
public static function configure(Table $table): Table
{
return $table
->columns([
TextColumn::make('name')
->label('Kulcs')
->searchable()
->sortable(),
TextColumn::make('label')
->label('Megnevezés')
->searchable(),
ToggleColumn::make('enabled')
->label('Bekapcsolva'),
TextColumn::make('stages')
->label('Stage-ek')
->badge()
->placeholder('mind'),
TextColumn::make('roles')
->label('Szerepkörök')
->badge()
->placeholder('mind'),
TextColumn::make('updated_at')
->label('Módosítva')
->dateTime()
->sortable(),
])
->recordActions([
EditAction::make(),
Action::make('userOverride')
->label('Egyéni felülbírálás')
->icon('heroicon-o-user')
->form([
Select::make('user_id')
->label('Felhasználó')
->searchable()
->options(fn () => User::pluck('name', 'id'))
->required(),
Radio::make('override')
->label('Állapot')
->options([
'inherit' => 'Örökölt (alapértelmezett szabály érvényes)',
'on' => 'Bekapcsolva',
'off' => 'Kikapcsolva',
])
->default('inherit')
->required(),
])
->action(function (array $data, FeatureFlag $record) {
$user = User::findOrFail($data['user_id']);
if ($data['override'] === 'inherit') {
// model-instance delete() kell, hogy a FeatureFlagOverrideObserver
// (Pennant purge) ténylegesen kiváltódjon - a query builder delete()
// nem hívja meg a modell eseményeit
FeatureFlagOverride::where('feature_flag_id', $record->id)
->where('user_id', $user->id)
->first()
?->delete();
} else {
FeatureFlagOverride::updateOrCreate(
['feature_flag_id' => $record->id, 'user_id' => $user->id],
['active' => $data['override'] === 'on'],
);
}
}),
])
->toolbarActions([
BulkActionGroup::make([
DeleteBulkAction::make(),
]),
]);
}
}