Workaround for deleteOptionAction

In Filament, we have a createOptionAction to add new values to a Select which is related to another model. Also, we have an editOptionAction. But we have not a deleteOptionAction. So I tried to add a delete button inside the editOptionAction using . The button renders fina, but it simply doesn't do anything. Here is my code so far:
Select::make('uom_category_id')
->relationship('category', 'name')
->createOptionForm([
TextInput::make('name')
->label('Nombre')
->required()
->placeholder('Nombre de la categoría de unidad de medida'),
])
->createOptionAction(fn ($action) => $action->modalWidth('xs'))
->editOptionForm([
TextInput::make('name')
->label('Nombre')
->required()
->placeholder('Nombre de la categoría de unidad de medida'),
])
->editOptionAction(fn ($action) => $action->modalWidth('xs')
// Botón para eliminar la categoría de unidad de medida
->extraModalFooterActions(function ($action, $record) {
return [
Action::make('delete')
->label('Eliminar')
->action(function () use ($record) {
$record->category->delete();
$this->notify('success', 'Categoría de unidad de medida eliminada');
})
->color('danger')
->requiresConfirmation()
];
})
)
->required()
->label('Categoría de unidad de medida'),
Select::make('uom_category_id')
->relationship('category', 'name')
->createOptionForm([
TextInput::make('name')
->label('Nombre')
->required()
->placeholder('Nombre de la categoría de unidad de medida'),
])
->createOptionAction(fn ($action) => $action->modalWidth('xs'))
->editOptionForm([
TextInput::make('name')
->label('Nombre')
->required()
->placeholder('Nombre de la categoría de unidad de medida'),
])
->editOptionAction(fn ($action) => $action->modalWidth('xs')
// Botón para eliminar la categoría de unidad de medida
->extraModalFooterActions(function ($action, $record) {
return [
Action::make('delete')
->label('Eliminar')
->action(function () use ($record) {
$record->category->delete();
$this->notify('success', 'Categoría de unidad de medida eliminada');
})
->color('danger')
->requiresConfirmation()
];
})
)
->required()
->label('Categoría de unidad de medida'),
Here I'm working with tow models called Uom (Unit Of Measure) and UomCategory. I don't want to create a full Resource only for CRUD of UomCategory if it's not necessary. Can you give me any advise or tip? Thanks in advance!
2 Replies
victorcamposramirez
I've also tried:
->editOptionAction(fn ($action) => $action->modalWidth('xs')
// Botón para eliminar la categoría de unidad de medida
->extraModalFooterActions(function ($action, $record) {
return [
DeleteAction::make()
->record($record->category)
->cancelParentActions()
];
})
)
->editOptionAction(fn ($action) => $action->modalWidth('xs')
// Botón para eliminar la categoría de unidad de medida
->extraModalFooterActions(function ($action, $record) {
return [
DeleteAction::make()
->record($record->category)
->cancelParentActions()
];
})
)
I've struggled with this and I can't get it working. Anyone has any insight about it?
dvarilek
dvarilek2w ago
I'm pretty sure this happens because your delete action doesn't get mounted to the livewire page component. You need to register it on your Select form component first. Something like this should do the trick.
->registerActions([
fn () => Action::make('deleteOptionAction')
->label('Delete Category')
->action(function (Model $record, Forms\Components\Select $component) {
$record->category->delete();
$component->state([]);

// ...
})
->cancelParentActions()
])
->editOptionAction(fn (Action $action) => $action
->extraModalFooterActions(fn (Forms\Components\Select $component) => [
$component->getAction('deleteOptionAction')
])
)
->registerActions([
fn () => Action::make('deleteOptionAction')
->label('Delete Category')
->action(function (Model $record, Forms\Components\Select $component) {
$record->category->delete();
$component->state([]);

// ...
})
->cancelParentActions()
])
->editOptionAction(fn (Action $action) => $action
->extraModalFooterActions(fn (Forms\Components\Select $component) => [
$component->getAction('deleteOptionAction')
])
)

Did you find this page helpful?