- How do I add clickable actions to a Filament table column without breaking existing functionality?
- Use `ActionableColumn::make()` as a direct replacement for standard columns (e.g., `TextColumn`). It extends Filament’s native column system, so it integrates with your existing table setup without overriding core logic. For example, replace `TextColumn::make('status')` with `ActionableColumn::make('status')->tapAction(...)` to add actions while keeping all other column behavior intact.
- Does this package work with Filament v5’s new action system (e.g., `Action::make()` with closures)?
- Yes, it fully supports Filament v5’s action system, including closures, dynamic URLs, and conditional visibility. The package reuses Filament’s native `Action` classes, so any action you define in v5 (e.g., `Action::make()->modal()`) will work seamlessly with `ActionableColumn`. Tested with both v4 and v5’s action contracts.
- Can I customize the styling of action buttons or badges to match my Filament admin panel’s theme?
- Absolutely. The package provides methods like `color('success')`, `actionIconColor('warning')`, and `clickableColumn()` for visual customization. For deeper theming, override default styles via `ACTIONABLE_COLUMN_CUSTOM_CSS_PATH` in your config or publish the package’s CSS assets. It supports Filament’s dark mode and custom themes out of the box.
- What Laravel versions are supported, and are there any PHP version requirements?
- The package requires **Laravel 9+** (due to Filament v4/v5 dependencies) and **PHP 8.1+** for type safety (e.g., Heroicon enums). It leverages Laravel’s service container and Filament’s architecture, so no additional Laravel-specific configurations are needed beyond the standard Filament setup.
- How do I handle empty tables with an ‘+ Add’ button like in Filament’s default tables?
- Use the `emptyStateAction()` method to define a button for empty tables. For example, `ActionableColumn::make('items')->emptyStateAction(Action::make('createItem')->label('+ Add'))`. The package automatically detects empty states (via `count()` or `whereNull()`) and renders the button only when needed, matching Filament’s native behavior.
- Will this package break when Filament v6 is released, or do I need to vendorize it?
- The package is explicitly tied to Filament v4/v5’s architecture, so upgrades to v6 may require updates from the author or vendorization. Monitor Filament’s roadmap and test early if you’re planning a v6 migration. The low-coupling design means vendorizing is straightforward—just copy the `src/` directory into your project and update the namespace.
- Can I use custom actions with dynamic URLs or conditional visibility in ActionableColumn?
- Yes, the package supports all Filament action features, including dynamic URLs (e.g., `->url(fn ($record) => route('edit', $record))`) and conditional visibility (e.g., `->visible(fn ($record) => $record->status === 'pending')`). Ensure your custom actions adhere to Filament’s contract (e.g., implement `label()`, `action()`, and `visible()` methods) to avoid runtime errors.
- How do I test ActionableColumn in my CI pipeline or local development?
- Test the column in isolation by creating a minimal Filament table resource with a single `ActionableColumn`. Use Filament’s built-in testing helpers (e.g., `assertTableHasColumn()`) and Laravel’s HTTP tests to verify actions, badges, and empty states. For edge cases, mock Filament’s action system with `partialMock()` to simulate custom actions without full setup.
- Are there performance concerns with large datasets (e.g., 10,000+ rows) in Filament tables?
- No, the package adds minimal runtime overhead—it renders as standard HTML/CSS with event listeners. For large datasets, rely on Filament’s built-in pagination or virtual scrolling (e.g., `->paginate(100)`). The package doesn’t introduce N+1 queries or heavy JavaScript; all action logic is server-side and reusable.
- What alternatives exist for adding actions to Filament tables, and why choose this package?
- Alternatives include manually adding `Action` buttons via `Table::modify()` or using Filament’s `ActionGroup` in table headers. However, this package provides a **column-native solution** with badge/text modes, empty-state buttons, and seamless integration with Filament’s design system. It reduces boilerplate compared to custom implementations while maintaining type safety and IDE support.