Enhance settings form and model: Added support for date and datetime types in SettingForm with corresponding fields and visibility logic. Updated Setting model to handle new value types and modified migration to include date and datetime in the type enum. Enhanced localization files to support new type labels in both English and Turkish.

This commit is contained in:
Ümit Tunç
2025-10-23 15:27:58 -03:00
parent 5157fe46ba
commit 7e269e6543
5 changed files with 89 additions and 2 deletions
@@ -7,6 +7,8 @@ use Filament\Forms\Components\Textarea;
use Filament\Forms\Components\TextInput;
use Filament\Forms\Components\Toggle;
use Filament\Forms\Components\FileUpload;
use Filament\Forms\Components\DateTimePicker;
use Filament\Forms\Components\DatePicker;
use Filament\Schemas\Components\Section;
use Filament\Schemas\Components\Utilities\Get;
use Filament\Schemas\Components\Utilities\Set;
@@ -56,6 +58,8 @@ class SettingForm
'array' => __('settings.type_array'),
'json' => __('settings.type_json'),
'file' => __('settings.type_file'),
'date' => __('settings.type_date'),
'datetime' => __('settings.type_datetime'),
])
->live()
->afterStateUpdated(fn (Set $set) => $set('value', null)),
@@ -80,10 +84,10 @@ class SettingForm
->label(__('settings.value'))
->helperText(__('settings.value_helper'))
->required()
->visible(fn (Get $get) => !in_array($get('type'), ['boolean', 'file']))
->visible(fn (Get $get) => !in_array($get('type'), ['boolean', 'file', 'date', 'datetime']))
->rows(fn (Get $get) => $get('type') === 'text' ? 5 : 3)
->formatStateUsing(function ($state, $record) {
if ($record && $record->type !== 'boolean' && $record->type !== 'file') {
if ($record && !in_array($record->type, ['boolean', 'file', 'date', 'datetime'])) {
return $record->value;
}
return $state;
@@ -120,6 +124,37 @@ class SettingForm
})
->columnSpanFull(),
DatePicker::make('value_date')
->label(__('settings.value'))
->helperText(__('settings.value_helper'))
->required()
->visible(fn (Get $get) => $get('type') === 'date')
->displayFormat('d/m/Y')
->format('Y-m-d')
->formatStateUsing(function ($state, $record) {
if ($record && $record->type === 'date') {
return $record->value;
}
return $state;
})
->columnSpanFull(),
DateTimePicker::make('value_datetime')
->label(__('settings.value'))
->helperText(__('settings.value_helper'))
->required()
->visible(fn (Get $get) => $get('type') === 'datetime')
->displayFormat('d/m/Y H:i')
->format('Y-m-d H:i:s')
->seconds(false)
->formatStateUsing(function ($state, $record) {
if ($record && $record->type === 'datetime') {
return $record->value;
}
return $state;
})
->columnSpanFull(),
Toggle::make('is_active')
->label(__('settings.is_active'))
->helperText(__('settings.is_active_helper'))
+20
View File
@@ -16,6 +16,8 @@ class Setting extends Model
'value_text',
'value_boolean',
'value_file',
'value_date',
'value_datetime',
'type',
'group',
'label',
@@ -59,6 +61,22 @@ class Setting extends Model
$this->attributes['value'] = $value;
}
/**
* Set value from different field names
*/
public function setValueDateAttribute($value)
{
$this->attributes['value'] = $value;
}
/**
* Set value from different field names
*/
public function setValueDatetimeAttribute($value)
{
$this->attributes['value'] = $value;
}
/**
* Get setting by key
*/
@@ -101,6 +119,8 @@ class Setting extends Model
'float' => (float) $value,
'array', 'json' => json_decode($value, true),
'file' => $value, // File path as string
'date' => $value, // Date as string (Y-m-d format)
'datetime' => $value, // DateTime as string (Y-m-d H:i:s format)
default => $value,
};
}