Lastig om te openen wanneer het nodig is.... 🤔
Stel, je hebt een Laravel (Filament/)Sanctum project waarbij je via de ViewUser page
tokens wilt aanmaken...hoe kan je dan via één druk op de knop eerst
een action uitvoeren, en daarna
pas een model openen???? ðŸ§
In een Filament Action action
method zet je vaak logica die moet worden uitgevoerd als je op de action klikt of nadat je een form
uit een action een submit hebt gegeven. Dit form zit dan vaak al in een Filament modal
wat maakt dat het lastig is om er nog eentje te openen.
Ik liep hier tegenaan bij het bouwen van een nieuwe tool, en toen ontdekte ik het volgende:
In Filament components/pages/etc waarbij er actions gebruikt kunnen worden is er ook een replaceMountedAction
method. Met deze method kan je nadat je je action hebt uitgevoerd, een nieuwe action openen:
->action(function (User $record, $data, ViewUser $livewire) {
$token = $record->createToken($data['name'], collect($data['abilities'])->values()->toArray());
$this->replaceMountedAction('tokenModalAction', ['token' => $token->plainTextToken]);
})
Helaas staat Filament het niet toe dat de tokenModelAction
(in dit geval) ook parameters via de method zelf heeft. Alle parameters komen in de zogenaamde $arguments
injection.
public function tokenModalAction() // Waar ik eigenlijk wilde dat de parameters binnen kwamen
{
return Action::make('tokenModalAction')
->label('Token')
->modalDescription(fn(array $arguments) => new \Illuminate\Support\HtmlString("Here is your token: <strong>" . $arguments['token'] . "</strong>"))
->modalSubmitAction(fn($action) => $action->visible(false))
;
}
Conclusie:
Om gebruik te maken van Filament modals
nadat je bepaalde actions hebt uitgevoerd kan je de zogenaamde replaceMountedAction
method aanroepen in je Filament page/{component waar actions aanwezig zijn} om vervolgens over te gaan tot een model (met bijv. een tweede form, of meteen een infolist
van de submitted data).