TiagoSilvaPereira / vemto-filament-plugin

A Vemto plugin for generating Filament admin panels
21 stars 9 forks source link

Move Created Filter to it's own filter class in App\Filters #8

Closed ziming closed 1 year ago

ziming commented 2 years ago

Currently every resource has a long duplicated piece of code for the created_at filter, i suggest moving it to something like this

<?php

<?php

namespace App\Filament\Filters;

use Filament\Forms\Components\DatePicker;
use Filament\Tables\Filters\Filter;
use Illuminate\Database\Eloquent\Builder;

class DateRangeFilter extends Filter
{
    public static function make(?string $name = null): static
    {
        return parent::make($name)
            ->form([
                DatePicker::make($name . '_from'),
                DatePicker::make($name . '_until'),
            ])
            ->query(function (Builder $query, array $data) use (&$name): Builder {
                return $query
                    ->when(
                        $data[$name . '_from'],
                        fn (Builder $query, $date): Builder => $query->whereDate($name, '>=', $date),
                    )
                    ->when(
                        $data[$name . '_until'],
                        fn (Builder $query, $date): Builder => $query->whereDate($name, '<=', $date),
                    );
            });
    }
}

then in the resources do DateRangeFilter::make('created_at')

TiagoSilvaPereira commented 1 year ago

Hi @ziming thank you for your suggestion... are you able to send a PR?