webbingbrasil/filament-datefilter
composer require webbingbrasil/filament-datefilter
php artisan vendor:publish --provider="Webbingbrasil\FilamentDateFilter\FilamentDateFilterServiceProvider"
$filters property:
use Webbingbrasil\FilamentDateFilter\DateFilter;
public static function table(Table $table): Table
{
return $table
->filters([
DateFilter::make('created_at')
->label('Created At')
->minDate(now()->subMonth())
->maxDate(now()->addMonth()),
]);
}
config/filament-datefilter.php (if published) for global defaults.src/DateFilter.php for method reference.Single Date Filter:
DateFilter::make('published_at')
->label('Publication Date')
->defaultDate(now()->startOfMonth())
->timeZone('Europe/London');
defaultDate() to pre-select a value (e.g., current month).Date Range Filter:
DateFilter::make('order_date')
->label('Order Period')
->minDate(now()->subYear())
->maxDate(now())
->range()
->fromLabel('Start Date')
->untilLabel('End Date');
->required() to enforce selection.Dynamic Column Mapping:
DateFilter::make('custom_field')
->useColumn('actual_date_column')
->label('Custom Date');
Integration with Filament Actions:
public static function getTableFilters(): array
{
return [
DateFilter::make('created_at')
->label('Filter by Date')
->range(),
// Other filters...
];
}
modifyQueryUsing() to adjust logic:
DateFilter::make('event_date')
->range()
->modifyQueryUsing(fn (Builder $query, array $data) => $query
->whereBetween('event_date', [$data['from'], $data['until']])
->orWhereNull('event_date'));
DateFilter::make('scheduled_at')
->timeZone('Asia/Tokyo');
Timezone Mismatches:
timeZone() matches your DB’s timezone (e.g., UTC).->timeZone('UTC')->defaultDate(now('UTC')) for consistency.Null Handling:
range() filters may not handle null values gracefully in queries.null in modifyQueryUsing:
->modifyQueryUsing(fn ($query, $data) => $query
->when($data['from'] ?? null, fn ($q) => $q->where('date', '>=', $data['from']))
->when($data['until'] ?? null, fn ($q) => $q->where('date', '<=', $data['until'])));
Archived Package:
Performance:
minDate far in the past) can slow queries.->minDate(now()->subDays(30)) // Recent 30 days only
->maxDate(now());
dd() in modifyQueryUsing to verify $data structure:
->modifyQueryUsing(fn ($query, $data) => {
dd($data); // Check keys: 'from', 'until', or 'date' (single date)
return $query->where(...);
});
config/filament-datefilter.php:
'default_timezone' => 'UTC',
'range_labels' => [
'from' => 'Start',
'until' => 'End',
],
resources/views/filament-datefilter/...) to add icons or tooltips.->fromLabel(__('Desde'))
->untilLabel(__('Hasta'));
trait UsesDateFilters {
protected function dateRangeFilter(string $column): DateFilter {
return DateFilter::make($column)
->range()
->minDate(now()->subYear())
->maxDate(now());
}
}
How can I help you explore Laravel packages today?