Weave Code
Code Weaver
Helps Laravel developers discover, compare, and choose open-source packages. See popularity, security, maintainers, and scores at a glance to make better decisions.
Feedback
Share your thoughts, report bugs, or suggest improvements.
Subject
Message

Filament Action Export Laravel Package

jeffersongoncalves/filament-action-export

View on GitHub
Deep Wiki
Context7

Getting Started

Minimal Setup

  1. Installation:

    composer require jeffersongoncalves/filament-action-export "^3.0"
    
  2. First Use Case: Add to a Filament table's header actions (for full dataset export) or bulk actions (for selected records):

    use JeffersonGoncalves\FilamentExportAction\Actions\FilamentExportHeaderAction;
    
    public function table(Table $table): Table {
        return $table
            ->columns([...])
            ->headerActions([
                FilamentExportHeaderAction::make('export')
                    ->formats([ExportFormat::Csv, ExportFormat::Xlsx])
            ]);
    }
    
  3. Where to Look First:

    • README.md: Quickstart examples for bulk/header actions.
    • Enums/ExportFormat.php: Available formats (Csv, Xlsx, Pdf).
    • ValueObjects/AdditionalColumn.php: For custom columns in exports.

Implementation Patterns

Core Workflows

  1. Bulk Export (Selected Records):

    FilamentExportBulkAction::make('export')
        ->formats([ExportFormat::Pdf])
        ->excludeColumns(['password'])
        ->additionalColumns([...])
        ->directDownload(); // Skip modal
    
  2. Header Export (All Records):

    FilamentExportHeaderAction::make('export')
        ->withFilters() // Respect active filters
        ->withSearch()  // Include search terms
        ->modifyQueryUsing(fn ($query) => $query->where('active', true));
    
  3. Dynamic File Naming:

    ->fileNameUsing(fn ($action) => "report-{$action->getRecords()->count()}")
    

Integration Tips

  • PDF Customization: Publish views (php artisan vendor:publish --tag=filament-action-export-views) to override:

    • resources/views/vendor/filament-action-export/pdf.blade.php
    • resources/views/vendor/filament-action-export/print.blade.php
  • Snappy PDF Driver:

    composer require barryvdh/laravel-snappy
    
    ->snappy()
        ->pdfOptions(['paper' => 'a4', 'orientation' => 'landscape']);
    
  • Chunking Large Datasets: Use chunkSize() for memory efficiency:

    ->chunkSize(500); // Default: 1000
    
  • Reactive Column Selection: Disable column filters in the modal:

    ->disableFilterColumns();
    

Common Patterns

Use Case Implementation
Exclude sensitive data ->excludeColumns(['password'])
Add static metadata ->extraViewData(['company' => 'Acme'])
Format dates ->formatStates(['created_at' => fn($v) => Carbon::parse($v)->format('d/m/Y')])
Custom Excel writer ->modifyExcelWriter(fn($writer) => $writer->setStyle(...))

Gotchas and Tips

Pitfalls

  1. Print/Preview Issues:

    • Fix: Ensure print_enabled is true in config and no JS errors block iframe rendering.
    • Debug: Check browser console for shouldRefresh is not defined (v3.6.6+ fix).
  2. Empty Relationship Data:

    • Cause: N+1 queries for lazy-loaded relationships (e.g., roles.name).
    • Fix: Use ->eagerLoadRelationships(['roles']) or manually eager-load in modifyQueryUsing.
  3. PDF/Snappy Dependencies:

    • Error: Class 'Snappy' not found → Install barryvdh/laravel-snappy.
    • Error: DomPDF not found → Install barryvdh/laravel-dompdf.
  4. Column Filter Sync:

    • Issue: Preview modal column filters not updating.
    • Fix: Use ->withHiddenColumns() or ensure disableFilterColumns() is false.
  5. Livewire State Conflicts:

    • Error: Property [mountedTableBulkAction] not found (v3.6.5+).
    • Fix: Use statePath() instead of name() in custom views.

Debugging Tips

  • Log Export Data:

    ->modifyExcelWriter(fn($writer) => {
        \Log::info('Exporting records:', $writer->getRecords()->toArray());
    });
    
  • Test PDF Locally:

    ->directDownload()
        ->modifyPdfWriter(fn($pdf) => $pdf->stream("test.pdf"));
    
  • Inspect Modal State: Add x-data to published table-view.blade.php to debug Alpine.js state:

    <div x-data="{ debug: @entangle('debug') }" x-init="console.log($data)">
    

Extension Points

  1. Custom Export Logic: Override the handle() method in a custom action class:

    class CustomExportAction extends FilamentExportHeaderAction {
        public function handle(): void {
            $this->modifyQueryUsing(fn($query) => $query->where('custom', true));
            parent::handle();
        }
    }
    
  2. Dynamic Format Availability:

    ->formatsUsing(fn () => auth()->user()->can('export_xlsx') ? [ExportFormat::Xlsx] : [])
    
  3. Post-Export Actions: Use afterExport event (publish config first):

    // config/filament-action-export.php
    'events' => [
        'afterExport' => fn ($action) => \Log::info("Exported {$action->getFormat()}", $action->getRecords()->toArray()),
    ];
    

Configuration Quirks

  • Global Defaults: Set in config/filament-action-export.php to avoid repetition:

    'default_format' => 'xlsx',
    'pdf_driver' => 'snappy',
    
  • Time Format: Override the filename suffix format:

    ->timeFormat('Y-m-d_His'); // e.g., "report_2023-10-05_143022.xlsx"
    
  • Icons: Customize in config:

    'icons' => [
        'action' => 'heroicon-o-cloud-arrow-down',
    ],
    
Weaver

How can I help you explore Laravel packages today?

Conversation history is not saved when not logged in.
Prompt
Add packages to context
No packages found.
calmfox/watch-sylius
damienfern/grpc-symfony-bundle
atoolo/index-bundle
atoolo/genai-bundle
coprotoai/laravel-ticket
davidjln/llm-carbon-bundle
cryonighter/valid-request-bundle
coolms/taxonomy-bundle
coolms/field-bundle
articulate-orm/symfony
aaix/laravel-tall-architect
ephoto/akeneo-connector
emmanuelballery/eb-plantumlbundle
emielburgman/symfony-visitor-beacon
emielburgman/symfony-visit-storage
emielburgman/symfony-security-headers
emielburgman/symfony-log-viewer
emarref/xdebug-bundle
emarref/pubnub-bundle
elriseio/finance-money-bundle