diff --git a/app/Filament/Resources/Manage/Cooperations/Tables/CooperationsTable.php b/app/Filament/Resources/Manage/Cooperations/Tables/CooperationsTable.php index 1c14e92..00efa7c 100644 --- a/app/Filament/Resources/Manage/Cooperations/Tables/CooperationsTable.php +++ b/app/Filament/Resources/Manage/Cooperations/Tables/CooperationsTable.php @@ -22,7 +22,6 @@ use Filament\Actions\ViewAction; use Filament\Forms\Components\DatePicker; use Filament\Forms\Components\Select; -use Filament\Forms\Components\TextInput; use Filament\Schemas\Components\Utilities\Get; use Filament\Support\Icons\Heroicon; use Filament\Tables\Columns\TextColumn; @@ -166,19 +165,6 @@ public static function configure(Table $table): Table ->searchable() ->preload(), - Filter::make('title') - ->schema([ - TextInput::make('title') - ->label('Nama Kegiatan') - ->placeholder('Cari nama kegiatan...'), - ]) - ->query(function (Builder $query, array $data): Builder { - return $query->when( - $data['title'], - fn (Builder $query, $title): Builder => $query->where('title', 'like', "%{$title}%"), - ); - }), - Filter::make('date_filter') ->schema([ Select::make('date_type') diff --git a/app/Filament/Resources/Manage/DataChanges/DataChangesResource.php b/app/Filament/Resources/Manage/DataChanges/DataChangesResource.php index ebe02f1..64aa82c 100644 --- a/app/Filament/Resources/Manage/DataChanges/DataChangesResource.php +++ b/app/Filament/Resources/Manage/DataChanges/DataChangesResource.php @@ -22,6 +22,7 @@ use Filament\Schemas\Schema; use Filament\Support\Icons\Heroicon; use Filament\Tables\Columns\TextColumn; +use Filament\Tables\Filters\SelectFilter; use Filament\Tables\Filters\TrashedFilter; use Filament\Tables\Table; use Illuminate\Database\Eloquent\Builder; @@ -247,6 +248,11 @@ public static function table(Table $table): Table ->wrap(), ]) ->filters([ + SelectFilter::make('status') + ->label('Status') + ->options(DataChangeStatus::class) + ->native(false), + TrashedFilter::make() ->native(false) ->visible(fn () => auth()->user()?->hasRole(RoleEnum::DEVELOPER->value)), diff --git a/app/Filament/Resources/Manage/Partners/PartnerResource.php b/app/Filament/Resources/Manage/Partners/PartnerResource.php index a2e4adf..c36266e 100644 --- a/app/Filament/Resources/Manage/Partners/PartnerResource.php +++ b/app/Filament/Resources/Manage/Partners/PartnerResource.php @@ -2,7 +2,10 @@ namespace App\Filament\Resources\Manage\Partners; +use App\Enums\MediaClassification; +use App\Enums\MediaType; use App\Enums\RoleEnum; +use App\Enums\VerificationStatus; use App\Filament\Actions\DefaultBulkActions; use App\Filament\Resources\Manage\Partners\Pages\ManagePartners; use App\Filament\Resources\Manage\Partners\Pages\ViewPartner; @@ -18,6 +21,7 @@ use Filament\Schemas\Schema; use Filament\Support\Icons\Heroicon; use Filament\Tables\Columns\TextColumn; +use Filament\Tables\Filters\SelectFilter; use Filament\Tables\Filters\TrashedFilter; use Filament\Tables\Table; use Illuminate\Database\Eloquent\Builder; @@ -325,6 +329,33 @@ public static function table(Table $table): Table ->wrap(), ]) ->filters([ + SelectFilter::make('media_type') + ->label('Jenis Media') + ->options(MediaType::class) + ->query(fn (Builder $query, array $data) => $query->when( + $data['value'], + fn (Builder $query, $value) => $query->whereHas('company.partnerMedia', fn ($q) => $q->where('type', $value)) + )) + ->native(false), + + SelectFilter::make('media_classification') + ->label('Klasifikasi Media') + ->options(MediaClassification::class) + ->query(fn (Builder $query, array $data) => $query->when( + $data['value'], + fn (Builder $query, $value) => $query->whereHas('company.partnerMedia', fn ($q) => $q->where('classification', $value)) + )) + ->native(false), + + SelectFilter::make('verification_status') + ->label('Status Verifikasi') + ->options(VerificationStatus::class) + ->query(fn (Builder $query, array $data) => $query->when( + $data['value'], + fn (Builder $query, $value) => $query->whereHas('company.verificationRequest', fn ($q) => $q->where('status', $value)) + )) + ->native(false), + TrashedFilter::make() ->native(false) ->visible(fn () => auth()->user()?->hasRole(RoleEnum::DEVELOPER->value)), diff --git a/app/Filament/Resources/Master/Categories/CategoryResource.php b/app/Filament/Resources/Master/Categories/CategoryResource.php index 746058e..ccce649 100644 --- a/app/Filament/Resources/Master/Categories/CategoryResource.php +++ b/app/Filament/Resources/Master/Categories/CategoryResource.php @@ -22,6 +22,7 @@ use Filament\Support\Icons\Heroicon; use Filament\Tables\Columns\TextColumn; use Filament\Tables\Columns\ToggleColumn; +use Filament\Tables\Filters\SelectFilter; use Filament\Tables\Filters\TrashedFilter; use Filament\Tables\Table; use Illuminate\Database\Eloquent\Builder; @@ -82,6 +83,11 @@ public static function table(Table $table): Table ...TimestampColumns::make(), ]) ->filters([ + SelectFilter::make('is_active') + ->label('Status') + ->options(IsActive::class) + ->native(false), + TrashedFilter::make() ->native(false) ->visible(fn () => auth()->user()?->hasRole(RoleEnum::DEVELOPER->value)), diff --git a/app/Filament/Resources/Master/Classifications/ClassificationResource.php b/app/Filament/Resources/Master/Classifications/ClassificationResource.php index e2c1076..bb555d8 100644 --- a/app/Filament/Resources/Master/Classifications/ClassificationResource.php +++ b/app/Filament/Resources/Master/Classifications/ClassificationResource.php @@ -22,6 +22,7 @@ use Filament\Support\Icons\Heroicon; use Filament\Tables\Columns\TextColumn; use Filament\Tables\Columns\ToggleColumn; +use Filament\Tables\Filters\SelectFilter; use Filament\Tables\Filters\TrashedFilter; use Filament\Tables\Table; use Illuminate\Database\Eloquent\Builder; @@ -82,6 +83,11 @@ public static function table(Table $table): Table ...TimestampColumns::make(), ]) ->filters([ + SelectFilter::make('is_active') + ->label('Status') + ->options(IsActive::class) + ->native(false), + TrashedFilter::make() ->native(false) ->visible(fn () => auth()->user()?->hasRole(RoleEnum::DEVELOPER->value)), diff --git a/app/Filament/Resources/Master/Departments/DepartmentResource.php b/app/Filament/Resources/Master/Departments/DepartmentResource.php index 5eb092a..8e6ab69 100644 --- a/app/Filament/Resources/Master/Departments/DepartmentResource.php +++ b/app/Filament/Resources/Master/Departments/DepartmentResource.php @@ -22,6 +22,7 @@ use Filament\Support\Icons\Heroicon; use Filament\Tables\Columns\TextColumn; use Filament\Tables\Columns\ToggleColumn; +use Filament\Tables\Filters\SelectFilter; use Filament\Tables\Filters\TrashedFilter; use Filament\Tables\Table; use Illuminate\Database\Eloquent\Builder; @@ -92,6 +93,11 @@ public static function table(Table $table): Table ...TimestampColumns::make(), ]) ->filters([ + SelectFilter::make('is_active') + ->label('Status') + ->options(IsActive::class) + ->native(false), + TrashedFilter::make() ->native(false) ->visible(fn () => auth()->user()?->hasRole(RoleEnum::DEVELOPER->value)), diff --git a/app/Filament/Resources/Master/Locations/LocationResource.php b/app/Filament/Resources/Master/Locations/LocationResource.php index 442b684..ddc785a 100644 --- a/app/Filament/Resources/Master/Locations/LocationResource.php +++ b/app/Filament/Resources/Master/Locations/LocationResource.php @@ -22,6 +22,7 @@ use Filament\Support\Icons\Heroicon; use Filament\Tables\Columns\TextColumn; use Filament\Tables\Columns\ToggleColumn; +use Filament\Tables\Filters\SelectFilter; use Filament\Tables\Filters\TrashedFilter; use Filament\Tables\Table; use Illuminate\Database\Eloquent\Builder; @@ -82,6 +83,11 @@ public static function table(Table $table): Table ...TimestampColumns::make(), ]) ->filters([ + SelectFilter::make('is_active') + ->label('Status') + ->options(IsActive::class) + ->native(false), + TrashedFilter::make() ->native(false) ->visible(fn () => auth()->user()?->hasRole(RoleEnum::DEVELOPER->value)), diff --git a/app/Filament/Resources/Master/SubClassifications/SubClassificationResource.php b/app/Filament/Resources/Master/SubClassifications/SubClassificationResource.php index 22f58d4..cabddcd 100644 --- a/app/Filament/Resources/Master/SubClassifications/SubClassificationResource.php +++ b/app/Filament/Resources/Master/SubClassifications/SubClassificationResource.php @@ -24,6 +24,7 @@ use Filament\Support\Icons\Heroicon; use Filament\Tables\Columns\TextColumn; use Filament\Tables\Columns\ToggleColumn; +use Filament\Tables\Filters\SelectFilter; use Filament\Tables\Filters\TrashedFilter; use Filament\Tables\Grouping\Group; use Filament\Tables\Table; @@ -97,6 +98,18 @@ public static function table(Table $table): Table ...TimestampColumns::make(), ]) ->filters([ + SelectFilter::make('is_active') + ->label('Status') + ->options(IsActive::class) + ->native(false), + + SelectFilter::make('classification') + ->label('Klasifikasi') + ->relationship('classification', 'name') + ->searchable() + ->preload() + ->native(false), + TrashedFilter::make() ->native(false) ->visible(fn () => auth()->user()?->hasRole(RoleEnum::DEVELOPER->value)), diff --git a/app/Filament/Resources/Master/SubLocations/SubLocationResource.php b/app/Filament/Resources/Master/SubLocations/SubLocationResource.php index edaffa0..1e6ba50 100644 --- a/app/Filament/Resources/Master/SubLocations/SubLocationResource.php +++ b/app/Filament/Resources/Master/SubLocations/SubLocationResource.php @@ -24,6 +24,7 @@ use Filament\Support\Icons\Heroicon; use Filament\Tables\Columns\TextColumn; use Filament\Tables\Columns\ToggleColumn; +use Filament\Tables\Filters\SelectFilter; use Filament\Tables\Filters\TrashedFilter; use Filament\Tables\Grouping\Group; use Filament\Tables\Table; @@ -93,6 +94,18 @@ public static function table(Table $table): Table ...TimestampColumns::make(), ]) ->filters([ + SelectFilter::make('is_active') + ->label('Status') + ->options(IsActive::class) + ->native(false), + + SelectFilter::make('location') + ->label('Lokus') + ->relationship('location', 'name') + ->searchable() + ->preload() + ->native(false), + TrashedFilter::make() ->native(false) ->visible(fn () => auth()->user()?->hasRole(RoleEnum::DEVELOPER->value)), diff --git a/app/Filament/Resources/Master/Users/UserResource.php b/app/Filament/Resources/Master/Users/UserResource.php index a10a500..36c0c44 100644 --- a/app/Filament/Resources/Master/Users/UserResource.php +++ b/app/Filament/Resources/Master/Users/UserResource.php @@ -25,6 +25,7 @@ use Filament\Support\Icons\Heroicon; use Filament\Tables\Columns\TextColumn; use Filament\Tables\Columns\ToggleColumn; +use Filament\Tables\Filters\SelectFilter; use Filament\Tables\Filters\TrashedFilter; use Filament\Tables\Table; use Illuminate\Database\Eloquent\Builder; @@ -146,6 +147,21 @@ public static function table(Table $table): Table ...TimestampColumns::make(), ]) ->filters([ + SelectFilter::make('is_active') + ->label('Status') + ->options(IsActive::class) + ->native(false), + + SelectFilter::make('roles') + ->label('Peran') + ->relationship('roles', 'name', function (Builder $query): Builder { + return $query->whereNotIn('name', [RoleEnum::DEVELOPER, RoleEnum::PERUSAHAAN]); + }) + ->multiple() + ->preload() + ->searchable() + ->native(false), + TrashedFilter::make() ->native(false) ->visible(fn () => auth()->user()?->hasRole(RoleEnum::DEVELOPER->value)), diff --git a/app/Filament/Resources/Monitoring/MediaMonitorings/Tables/MediaMonitoringsTable.php b/app/Filament/Resources/Monitoring/MediaMonitorings/Tables/MediaMonitoringsTable.php index 876dcaf..7bcd44e 100644 --- a/app/Filament/Resources/Monitoring/MediaMonitorings/Tables/MediaMonitoringsTable.php +++ b/app/Filament/Resources/Monitoring/MediaMonitorings/Tables/MediaMonitoringsTable.php @@ -13,7 +13,6 @@ use Filament\Actions\BulkActionGroup; use Filament\Forms\Components\DatePicker; use Filament\Forms\Components\Select; -use Filament\Forms\Components\TextInput; use Filament\Schemas\Components\Utilities\Get; use Filament\Support\Icons\Heroicon; use Filament\Tables\Columns\TextColumn; @@ -110,19 +109,6 @@ public static function configure(Table $table): Table ->options(Channel::class) ->native(false), - Filter::make('writter') - ->form([ - TextInput::make('writter') - ->label('Penulis') - ->placeholder('Cari penulis...'), - ]) - ->query(function (Builder $query, array $data): Builder { - return $query->when( - $data['writter'], - fn (Builder $query, $term): Builder => $query->where('writter', 'like', "%{$term}%"), - ); - }), - Filter::make('date_filter') ->schema([ Select::make('date_type') diff --git a/app/Filament/Resources/Publication/Announcements/AnnouncementResource.php b/app/Filament/Resources/Publication/Announcements/AnnouncementResource.php index db791d1..b236364 100644 --- a/app/Filament/Resources/Publication/Announcements/AnnouncementResource.php +++ b/app/Filament/Resources/Publication/Announcements/AnnouncementResource.php @@ -25,6 +25,7 @@ use Filament\Support\Enums\Width; use Filament\Support\Icons\Heroicon; use Filament\Tables\Columns\TextColumn; +use Filament\Tables\Filters\SelectFilter; use Filament\Tables\Filters\TrashedFilter; use Filament\Tables\Table; use Illuminate\Database\Eloquent\Builder; @@ -133,6 +134,11 @@ public static function table(Table $table): Table ...TimestampColumns::make(), ]) ->filters([ + SelectFilter::make('type') + ->label('Tipe') + ->options(AnnouncementType::class) + ->native(false), + TrashedFilter::make() ->native(false) ->visible(fn () => auth()->user()?->hasRole(RoleEnum::DEVELOPER->value)), diff --git a/app/Filament/Resources/Publication/News/Tables/NewsTable.php b/app/Filament/Resources/Publication/News/Tables/NewsTable.php index 6fe3d8f..c0a7fc7 100644 --- a/app/Filament/Resources/Publication/News/Tables/NewsTable.php +++ b/app/Filament/Resources/Publication/News/Tables/NewsTable.php @@ -14,6 +14,7 @@ use Filament\Actions\BulkActionGroup; use Filament\Support\Icons\Heroicon; use Filament\Tables\Columns\TextColumn; +use Filament\Tables\Filters\SelectFilter; use Filament\Tables\Filters\TrashedFilter; use Filament\Tables\Table; @@ -75,6 +76,25 @@ public static function configure(Table $table): Table ...TimestampColumns::make(), ]) ->filters([ + SelectFilter::make('status') + ->label('Status') + ->options(NewsStatus::class) + ->native(false), + + SelectFilter::make('categories') + ->label('Kategori') + ->relationship('categories', 'name') + ->multiple() + ->preload() + ->native(false), + + SelectFilter::make('tags') + ->label('Tag') + ->relationship('tags', 'name') + ->multiple() + ->preload() + ->native(false), + TrashedFilter::make() ->native(false) ->visible(fn () => auth()->user()?->hasRole(RoleEnum::DEVELOPER->value)), diff --git a/app/Filament/Resources/Visitors/VisitorResource.php b/app/Filament/Resources/Visitors/VisitorResource.php index 855cca0..d60b9b9 100644 --- a/app/Filament/Resources/Visitors/VisitorResource.php +++ b/app/Filament/Resources/Visitors/VisitorResource.php @@ -6,9 +6,12 @@ use App\Models\Visitor; use BackedEnum; use Filament\Forms\Components\DatePicker; +use Filament\Forms\Components\Select; use Filament\Resources\Resource; +use Filament\Schemas\Components\Utilities\Get; use Filament\Support\Icons\Heroicon; use Filament\Tables\Columns\TextColumn; +use Filament\Tables\Enums\FiltersLayout; use Filament\Tables\Filters\Filter; use Filament\Tables\Filters\SelectFilter; use Filament\Tables\Table; @@ -79,26 +82,87 @@ public static function table(Table $table): Table ]) ->native(false), - Filter::make('date') + Filter::make('date_filter') ->schema([ - DatePicker::make('from') - ->label('Dari') - ->placeholder('Pilih Tanggal') - ->displayFormat('l, d F Y') + Select::make('date_type') + ->label('Jenis Filter Tanggal') + ->options([ + 'date' => 'Tanggal', + 'month' => 'Bulan & Tahun', + 'year' => 'Tahun', + 'range' => 'Rentang Tanggal', + ]) + ->live() ->native(false), - DatePicker::make('until') - ->label('Sampai') - ->placeholder('Pilih Tanggal') - ->displayFormat('l, d F Y') + DatePicker::make('specific_date') + ->label('Tanggal') + ->placeholder('Pilih tanggal') + ->visible(fn (Get $get) => $get('date_type') === 'date') ->native(false), + + Select::make('month') + ->label('Bulan') + ->options([ + 1 => 'Januari', + 2 => 'Februari', + 3 => 'Maret', + 4 => 'April', + 5 => 'Mei', + 6 => 'Juni', + 7 => 'Juli', + 8 => 'Agustus', + 9 => 'September', + 10 => 'Oktober', + 11 => 'November', + 12 => 'Desember', + ]) + ->visible(fn (Get $get) => $get('date_type') === 'month') + ->native(false), + + Select::make('year') + ->label('Tahun') + ->options(function () { + $years = range(date('Y'), 2020); + + return array_combine($years, $years); + }) + ->visible(fn (Get $get) => in_array($get('date_type'), ['month', 'year'])) + ->native(false), + + DatePicker::make('start_date') + ->label('Tanggal Mulai') + ->placeholder('Pilih tanggal mulai') + ->visible(fn (Get $get) => $get('date_type') === 'range') + ->native(false) + ->displayFormat('l, d F Y'), + + DatePicker::make('end_date') + ->label('Tanggal Selesai') + ->placeholder('Pilih tanggal selesai') + ->visible(fn (Get $get) => $get('date_type') === 'range') + ->native(false) + ->displayFormat('l, d F Y'), ]) ->query(function (Builder $query, array $data): Builder { - return $query - ->when($data['from'], fn (Builder $q): Builder => $q->whereDate('date', '>=', $data['from'])) - ->when($data['until'], fn (Builder $q): Builder => $q->whereDate('date', '<=', $data['until'])); + $type = $data['date_type'] ?? null; + $column = 'date'; + + return $query->when($type, function (Builder $query) use ($type, $data, $column) { + if ($type === 'date' && ! empty($data['specific_date'])) { + $query->whereDate($column, $data['specific_date']); + } elseif ($type === 'month' && ! empty($data['month']) && ! empty($data['year'])) { + $query->whereMonth($column, $data['month']) + ->whereYear($column, $data['year']); + } elseif ($type === 'year' && ! empty($data['year'])) { + $query->whereYear($column, $data['year']); + } elseif ($type === 'range' && ! empty($data['start_date']) && ! empty($data['end_date'])) { + $query->whereBetween($column, [$data['start_date'], $data['end_date']]); + } + }); }), - ]) + ], FiltersLayout::AboveContentCollapsible) + ->filtersFormColumns(3) ->emptyStateIcon(Heroicon::ChartBar) ->emptyStateDescription('Setelah Anda membubat data pertama, maka akan muncul disini.') ->defaultSort('date', 'desc')