Make sure variables are unique per egg (#902)

* Add unique validation

* Also make their name unique

* Custom message
This commit is contained in:
MartinOscar 2025-01-10 22:22:47 +01:00 committed by GitHub
parent 7f3b1fd758
commit d1007ad2fe
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
2 changed files with 22 additions and 4 deletions

View File

@ -17,10 +17,12 @@ use Filament\Forms\Components\Textarea;
use Filament\Forms\Components\TextInput; use Filament\Forms\Components\TextInput;
use Filament\Forms\Components\Toggle; use Filament\Forms\Components\Toggle;
use Filament\Forms\Form; use Filament\Forms\Form;
use Filament\Forms\Get;
use Filament\Forms\Set; use Filament\Forms\Set;
use Filament\Resources\Pages\CreateRecord; use Filament\Resources\Pages\CreateRecord;
use Illuminate\Database\Eloquent\Model; use Illuminate\Database\Eloquent\Model;
use Illuminate\Support\Str; use Illuminate\Support\Str;
use Illuminate\Validation\Rules\Unique;
class CreateEgg extends CreateRecord class CreateEgg extends CreateRecord
{ {
@ -172,8 +174,11 @@ class CreateEgg extends CreateRecord
->debounce(750) ->debounce(750)
->maxLength(255) ->maxLength(255)
->columnSpanFull() ->columnSpanFull()
->afterStateUpdated(fn (Set $set, $state) => $set('env_variable', str($state)->trim()->snake()->upper()->toString()) ->afterStateUpdated(fn (Set $set, $state) => $set('env_variable', str($state)->trim()->snake()->upper()->toString()))
) ->unique(modifyRuleUsing: fn (Unique $rule, Get $get) => $rule->where('egg_id', $get('../../id')), ignoreRecord: true)
->validationMessages([
'unique' => 'A variable with this name already exists.',
])
->required(), ->required(),
Textarea::make('description')->columnSpanFull(), Textarea::make('description')->columnSpanFull(),
TextInput::make('env_variable') TextInput::make('env_variable')
@ -183,6 +188,10 @@ class CreateEgg extends CreateRecord
->suffix('}}') ->suffix('}}')
->hintIcon('tabler-code') ->hintIcon('tabler-code')
->hintIconTooltip(fn ($state) => "{{{$state}}}") ->hintIconTooltip(fn ($state) => "{{{$state}}}")
->unique(modifyRuleUsing: fn (Unique $rule, Get $get) => $rule->where('egg_id', $get('../../id')), ignoreRecord: true)
->validationMessages([
'unique' => 'A variable with this name already exists.',
])
->required(), ->required(),
TextInput::make('default_value')->maxLength(255), TextInput::make('default_value')->maxLength(255),
Fieldset::make('User Permissions') Fieldset::make('User Permissions')

View File

@ -22,8 +22,10 @@ use Filament\Forms\Components\Textarea;
use Filament\Forms\Components\TextInput; use Filament\Forms\Components\TextInput;
use Filament\Forms\Components\Toggle; use Filament\Forms\Components\Toggle;
use Filament\Forms\Form; use Filament\Forms\Form;
use Filament\Forms\Get;
use Filament\Forms\Set; use Filament\Forms\Set;
use Filament\Resources\Pages\EditRecord; use Filament\Resources\Pages\EditRecord;
use Illuminate\Validation\Rules\Unique;
class EditEgg extends EditRecord class EditEgg extends EditRecord
{ {
@ -163,8 +165,11 @@ class EditEgg extends EditRecord
->debounce(750) ->debounce(750)
->maxLength(255) ->maxLength(255)
->columnSpanFull() ->columnSpanFull()
->afterStateUpdated(fn (Set $set, $state) => $set('env_variable', str($state)->trim()->snake()->upper()->toString()) ->afterStateUpdated(fn (Set $set, $state) => $set('env_variable', str($state)->trim()->snake()->upper()->toString()))
) ->unique(modifyRuleUsing: fn (Unique $rule, Get $get) => $rule->where('egg_id', $get('../../id')), ignoreRecord: true)
->validationMessages([
'unique' => 'A variable with this name already exists.',
])
->required(), ->required(),
Textarea::make('description')->columnSpanFull(), Textarea::make('description')->columnSpanFull(),
TextInput::make('env_variable') TextInput::make('env_variable')
@ -174,6 +179,10 @@ class EditEgg extends EditRecord
->suffix('}}') ->suffix('}}')
->hintIcon('tabler-code') ->hintIcon('tabler-code')
->hintIconTooltip(fn ($state) => "{{{$state}}}") ->hintIconTooltip(fn ($state) => "{{{$state}}}")
->unique(modifyRuleUsing: fn (Unique $rule, Get $get) => $rule->where('egg_id', $get('../../id')), ignoreRecord: true)
->validationMessages([
'unique' => 'A variable with this name already exists.',
])
->required(), ->required(),
TextInput::make('default_value')->maxLength(255), TextInput::make('default_value')->maxLength(255),
Fieldset::make('User Permissions') Fieldset::make('User Permissions')