Webshooters Logo

Filament Models

Gebruik replaceMountedAction() om na een Filament action direct een nieuwe modal met data te openen.

Filament models

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).

💡

Terug