F
Filament2mo ago
Azorky

Hidden fields not dehydrating

public static function getAccountingFields(JournalType $journalType, ?string $settingsResource = null): Fieldset
{
return Fieldset::make(__('resources/sales-invoices.navigation_group'))
->schema([
self::getJournalSelectField($journalType, settingsResource: $settingsResource),
self::getCostUnitSelectField(),
self::getGeneralGLAccountField(settingsResource: $settingsResource),
])
->columns(3)
->visible(fn (Get $get) => $get('show_gl_account_field'));
}
public static function getAccountingFields(JournalType $journalType, ?string $settingsResource = null): Fieldset
{
return Fieldset::make(__('resources/sales-invoices.navigation_group'))
->schema([
self::getJournalSelectField($journalType, settingsResource: $settingsResource),
self::getCostUnitSelectField(),
self::getGeneralGLAccountField(settingsResource: $settingsResource),
])
->columns(3)
->visible(fn (Get $get) => $get('show_gl_account_field'));
}
I have a couple of fields in my form in a fieldset like this. This fieldset can be toggled hidden. When the fields are hidden, they are not properly dehydrated, while I can see that the data is present in $livewire->data:
protected function handleRecordCreation(array $data): Model
{
dd($data, $this->data);
//...
protected function handleRecordCreation(array $data): Model
{
dd($data, $this->data);
//...
No description
5 Replies
Azorky
AzorkyOP2mo ago
When the fields were made visible before clicking save, then everything is correctly dehydrated:
No description
Azorky
AzorkyOP2mo ago
->saveRelationshipUsing is also not triggered when the fields are hidden This is getJournalSelectField for example:
Forms\Components\Select::make('journal_id')
->label(__('resources/journals.label'))
->visible(fn (Get $get) => (isset(Filament::getTenant()->accountingIntegration) && $get('show_gl_account_field')))
->relationship('journal', 'id', fn (Builder $query) => $query->where('type', JournalType::PURCHASE))
->saveRelationshipsUsing(function ($record, $state) {
dd($record, $state); // Not triggered when saving & field is hidden
$record->journal_id = $state;
$record->save();
})
->getOptionLabelFromRecordUsing(fn (Journal $record) => $record->name)
->dehydrateStateUsing(fn (string $state): string => dd($state)) // Not triggered when saving & field is hidden
->searchable()
->dehydrated()
->preload()
->default(fn () => Filament::getTenant()->settings()->get('purchase_invoice.default_journal_id')),
Forms\Components\Select::make('journal_id')
->label(__('resources/journals.label'))
->visible(fn (Get $get) => (isset(Filament::getTenant()->accountingIntegration) && $get('show_gl_account_field')))
->relationship('journal', 'id', fn (Builder $query) => $query->where('type', JournalType::PURCHASE))
->saveRelationshipsUsing(function ($record, $state) {
dd($record, $state); // Not triggered when saving & field is hidden
$record->journal_id = $state;
$record->save();
})
->getOptionLabelFromRecordUsing(fn (Journal $record) => $record->name)
->dehydrateStateUsing(fn (string $state): string => dd($state)) // Not triggered when saving & field is hidden
->searchable()
->dehydrated()
->preload()
->default(fn () => Filament::getTenant()->settings()->get('purchase_invoice.default_journal_id')),
I tried using it without the fieldset, but that gives me the same result
toeknee
toeknee2mo ago
Hidden fields ar enot intended to be included. For true storage of hidden fields you can use Hidden::make() or use mutateafter
DariusIII
DariusIII2mo ago
Use ->hidden()->dehydratedWhenHidden()
Azorky
AzorkyOP2mo ago
This is it, thank you so much

Did you find this page helpful?