Sample Filament Actions

Filament

Here is some sample source code to Filament actions. This source code is from InvoiceWizard.

Attributes about actions:

  • Actions are typically set in resources, the main resource file. There might be other places to set them as well.
  • Actions can be "normal" actions, and bulk actions.
  • Actions typically use closures
    • Some closures use the shorthand notation
    • Other closures that perform more complex tasks need the traditional notation

Here is a bulk action example:

->bulkActions([
    BulkAction::make('Fetch Quote')
        ->action(function ($records) {
            foreach ($records as $record) {
                FetchQuote::dispatch($record, true); // Ignore cache
            }
        })->requiresConfirmation(),
lang-php

Here is another example showing both a normal action and a bulk action:

 ->actions([
                Action::make('View')
                    ->url(fn (Invoice $record): string => url('admin/invoices/pdf', $record->id))
                    ->label('PDF'),
                Tables\Actions\EditAction::make(),
            ])
            ->bulkActions([
                BulkAction::make('Email Invoice')
                    ->action(function ($records) {
                        foreach ($records as $record) {
                            InvoiceService::createPdf($record);

                            Mail::send(new InvoiceCreated($record));
                        }
                    })->requiresConfirmation(),
                BulkAction::make('applyPayment')
                    ->action(function (Collection $records, array $data): void {
                        ApplyPayment::handle(
                            $records,
                            $data
                        );
                    })
                    ->form([
                        Forms\Components\DatePicker::make('date')
                            ->label('Payment Date')
                            ->displayFormat('Y-m-d')
                            ->default(now())
                            ->required(),
                        Forms\Components\TextInput::make('amount')
                            ->label('Amount')
                            ->required(),
                        Forms\Components\TextInput::make('reference')
                            ->label('Bank Reference')
                            ->required(),
                    ]),
                Tables\Actions\BulkActionGroup::make([
                    Tables\Actions\DeleteBulkAction::make(),
                    Tables\Actions\ForceDeleteBulkAction::make(),
                    Tables\Actions\RestoreBulkAction::make(),
                ]),
            ])
lang-php