alperenersoy / filament-export
Customizable export and print functionality for Filament Admin Panel
Installs: 227 305
Dependents: 3
Suggesters: 0
Security: 0
Stars: 218
Watchers: 8
Forks: 51
Open Issues: 18
Requires
- php: ^8.0
- barryvdh/laravel-dompdf: ^2.0
- filament/tables: ^3.0
- spatie/simple-excel: >=3.2.0
Requires (Dev)
- filament/filament: ^3.0
- orchestra/testbench: ^8.5
- pestphp/pest: ^2.1
- pestphp/pest-plugin-livewire: ^2.1
- dev-main
- v3.x-dev
- v3.0.7
- v3.0.6
- v3.0.5
- v3.0.4
- v3.0.3-beta
- v3.0.2-beta
- v3.0.1-beta
- v3.0.0-beta
- v0.3.12
- v0.3.11
- v0.3.10
- v0.3.9
- v0.3.8
- v0.3.7
- v0.3.6
- v0.3.5
- v0.3.4
- v0.3.3
- v0.3.2
- v0.3.1
- v0.3.0
- v0.2.9
- v0.2.8
- v0.2.7
- v0.2.6
- v0.2.5
- v0.2.4
- v0.2.3
- v0.2.2
- v0.2.1
- v0.2.0
- v0.1.7
- v0.1.6
- v0.1.5
- v0.1.4
- v0.1.3
- v0.1.2
- v0.1.1
- v0.1.0-alpha
This package is auto-updated.
Last update: 2024-11-11 10:23:19 UTC
README
Customizable export and print functionality for Filament Admin Panel.
This package provides a bulk action and header action to export your filament tables easily.
Requirements
- PHP 8
- Filament 2.0
Dependencies
Installation
composer require alperenersoy/filament-export
Configuring for Standalone Table Builder (Experimental)
To use this package in a standalone table builder instead of Filament Admin Panel you need to follow these steps. Otherwise, some features such as print and preview may not work properly.
- Import
filament-export.css
in your/resources/app.css
@import '../../vendor/alperenersoy/filament-export/resources/css/filament-export.css';
- Import
filament-export.js
in your/resources/app.js
import '../../vendor/alperenersoy/filament-export/resources/js/filament-export.js';
- Compile your assets
npm run dev
Using
Simple Usage
Bulk Action
You can export selected rows with the bulk action.
Filament Admin Panel
$table->bulkActions([ ... FilamentExportBulkAction::make('export') ... ]);
Filament Table Builder
protected function getTableBulkActions(): array { return [ ... FilamentExportBulkAction::make('Export'), ... ]; }
Header Action
You can filter, search, sort and export your table with the header action.
Filament Admin Panel
$table->headerActions([ ... FilamentExportHeaderAction::make('export') ... ]);
Filament Table Builder
protected function getTableHeaderActions(): array { return [ ... FilamentExportHeaderAction::make('Export'), ... ]; }
Since ButtonAction is deprecated you may use this action with ->button() instead.
Full Usage
Both actions provide functions for configuration.
FilamentExportBulkAction::make('export') ->fileName('My File') // Default file name ->timeFormat('m y d') // Default time format for naming exports ->disablePdf() // Disable PDF format for download ->disableXlsx() // Disable XLSX format for download ->disableCsv() // Disable CSV format for download ->defaultFormat('pdf') // xlsx, csv or pdf ->defaultPageOrientation('landscape') // Page orientation for pdf files. portrait or landscape ->directDownload() // Download directly without showing modal ->disableAdditionalColumns() // Disable additional columns input ->disableFilterColumns() // Disable filter columns input ->disableFileName() // Disable file name input ->disableFileNamePrefix() // Disable file name prefix ->disablePreview() // Disable export preview ->disableTableColumns() // Disable table columns in the export ->withHiddenColumns() //Show the columns which are toggled hidden ->fileNameFieldLabel('File Name') // Label for file name input ->formatFieldLabel('Format') // Label for format input ->pageOrientationFieldLabel('Page Orientation') // Label for page orientation input ->filterColumnsFieldLabel('filter columns') // Label for filter columns input ->additionalColumnsFieldLabel('Additional Columns') // Label for additional columns input ->additionalColumnsTitleFieldLabel('Title') // Label for additional columns' title input ->additionalColumnsDefaultValueFieldLabel('Default Value') // Label for additional columns' default value input ->additionalColumnsAddButtonLabel('Add Column') // Label for additional columns' add button ->withColumns([TextColumn::make('additionalModelColumn')]) // Export additional model columns that aren't visible in the table results ->csvDelimiter(',') // Delimiter for csv files ->modifyExcelWriter(fn (SimpleExcelWriter $writer) => $writer->nameCurrentSheet('Sheet')) // Modify SimpleExcelWriter before download ->modifyPdfWriter(fn (\Barryvdh\DomPDF\PDF|\Barryvdh\Snappy\PdfWrapper $writer) => $writer->setPaper('a4', 'landscape')) // Modify DomPdf or Snappy writer before download ->formatStates([ 'name' => fn (?Model $record) => strtoupper($record->name), ]) // Manually format states for a specific column
You can also use default bulk action and header action functions to customize actions.
Performance Tips for Large Datasets
- Since header action does server-side pagination you may choose header action over bulk action.
- You may disable preview.
- You may enable direct download.
Configuration
Publish configuration
php artisan vendor:publish --provider="AlperenErsoy\FilamentExport\FilamentExportServiceProvider" --tag="config"
You can configure these settings:
return [ 'default_format' => 'xlsx', 'time_format' => 'M_d_Y-H_i', 'default_page_orientation' => 'portrait', 'disable_additional_columns' => false, 'disable_filter_columns' => false, 'disable_file_name' => false, 'disable_preview' => false, 'use_snappy' => false, 'action_icon' => 'heroicon-o-document-download', 'preview_icon' => 'heroicon-o-eye', 'export_icon' => 'heroicon-o-download', 'print_icon' => 'heroicon-o-printer', 'cancel_icon' => 'heroicon-o-x-circle' ];
Overriding Views
Publish views
php artisan vendor:publish --provider="AlperenErsoy\FilamentExport\FilamentExportServiceProvider" --tag="views"
This package has two views:
-
"components\table_view.blade.php" view is used for preview.
-
"pdf.blade.php" view is used as pdf export template.
-
"print.blade.php" view is used as print template.
Using Custom Variables In Templates
FilamentExportBulkAction::make('export') ->extraViewData([ 'myVariable' => 'My Variable' ])
or use closures
FilamentExportHeaderAction::make('export') ->extraViewData(fn ($action) => [ 'recordCount' => $action->getRecords()->count() ])
Then use them in the templates as regular blade variables:
{{ $myVariable }}
Using Snappy
By default, this package uses dompdf as pdf generator.
If you want to use Snappy instead you need to install barryvdh/laravel-snappy to your project and configure it yourself. (See barryvdh/laravel-snappy for more information.)
To use snappy for PDF exports:
- You can simply add ->snappy() to your actions.
FilamentExportBulkAction::make('export') ->snappy()
or
FilamentExportHeaderAction::make('export') ->snappy()
- You can update the config file to use it as default.
[ ... 'use_snappy' => true, ... ]