From c44719efa43f82f1e3338180956f1793bc7b546a Mon Sep 17 00:00:00 2001 From: Yoga Pangestu Date: Wed, 8 Apr 2026 13:35:27 +0700 Subject: [PATCH] feat: add Analytic dashboard with filters and reset action for enhanced data analysis capabilities --- .../Analytic/Actions/ResetFiltersAction.php | 27 +++++++++++ .../{Analytic.php => Analytic/Index.php} | 45 +++++-------------- .../Analytic/Schemas/AnalyticFiltersForm.php | 35 +++++++++++++++ 3 files changed, 74 insertions(+), 33 deletions(-) create mode 100644 app/Filament/Pages/Analytic/Actions/ResetFiltersAction.php rename app/Filament/Pages/{Analytic.php => Analytic/Index.php} (65%) create mode 100644 app/Filament/Pages/Analytic/Schemas/AnalyticFiltersForm.php diff --git a/app/Filament/Pages/Analytic/Actions/ResetFiltersAction.php b/app/Filament/Pages/Analytic/Actions/ResetFiltersAction.php new file mode 100644 index 0000000..58dc28f --- /dev/null +++ b/app/Filament/Pages/Analytic/Actions/ResetFiltersAction.php @@ -0,0 +1,27 @@ +label('Reset Filter') + ->color('danger') + ->action(fn ($livewire) => $livewire->resetFilters()) + ->visible(function ($livewire): bool { + $filters = $livewire->filters ?? []; + + return ! empty($filters['startDate']) || ! empty($filters['endDate']); + }); + } +} diff --git a/app/Filament/Pages/Analytic.php b/app/Filament/Pages/Analytic/Index.php similarity index 65% rename from app/Filament/Pages/Analytic.php rename to app/Filament/Pages/Analytic/Index.php index a051ab5..e1d6b88 100644 --- a/app/Filament/Pages/Analytic.php +++ b/app/Filament/Pages/Analytic/Index.php @@ -1,8 +1,9 @@ user()->can('View:Analytic'); + } + public function getColumns(): int|array { return 2; @@ -55,37 +58,13 @@ public function getColumns(): int|array public function filtersForm(Schema $schema): Schema { - return $schema - ->schema([ - Fieldset::make('Filter') - ->schema([ - DatePicker::make('startDate') - ->label('Tanggal Mulai') - ->placeholder('Pilih tanggal mulai') - ->native(false) - ->displayFormat('l, d F Y'), - - DatePicker::make('endDate') - ->label('Tanggal Selesai') - ->placeholder('Pilih tanggal selesai') - ->native(false) - ->displayFormat('l, d F Y'), - ]) - ->columns(2) - ->columnSpanFull() - ->visible(fn () => auth()->user()->hasRole(RoleEnum::DEVELOPER->value) || auth()->user()->hasRole(RoleEnum::ADMINISTRATOR->value)), - ]); + return AnalyticFiltersForm::configure($schema); } protected function getHeaderActions(): array { return [ - Action::make('reset') - ->label('Reset Filter') - ->icon(Heroicon::OutlinedXMark) - ->color('danger') - ->action(fn () => $this->resetFilters()) - ->visible(fn () => ! empty($this->filters['startDate']) || ! empty($this->filters['endDate'])), + ResetFiltersAction::make(), ]; } diff --git a/app/Filament/Pages/Analytic/Schemas/AnalyticFiltersForm.php b/app/Filament/Pages/Analytic/Schemas/AnalyticFiltersForm.php new file mode 100644 index 0000000..3ab1a10 --- /dev/null +++ b/app/Filament/Pages/Analytic/Schemas/AnalyticFiltersForm.php @@ -0,0 +1,35 @@ +schema([ + Fieldset::make('Filter') + ->schema([ + DatePicker::make('startDate') + ->label('Tanggal Mulai') + ->placeholder('Pilih tanggal mulai') + ->native(false) + ->displayFormat('l, d F Y'), + + DatePicker::make('endDate') + ->label('Tanggal Selesai') + ->placeholder('Pilih tanggal selesai') + ->native(false) + ->displayFormat('l, d F Y'), + ]) + ->columns(2) + ->columnSpanFull() + ->visible(fn () => auth()->user()?->hasRole(RoleEnum::DEVELOPER->value) || auth()->user()?->hasRole(RoleEnum::ADMINISTRATOR->value)), + ]); + } +}