From aef6978b2aca402351016c60c440a34fba9339e4 Mon Sep 17 00:00:00 2001 From: tuxarmy Date: Fri, 3 Apr 2026 04:22:34 +0700 Subject: [PATCH] feat: tambah Filament 5 resources dengan schemas dan tables --- .../Resources/Activities/ActivityResource.php | 40 ++++++++++++++++++ .../Activities/Pages/CreateActivity.php | 11 +++++ .../Activities/Pages/EditActivity.php | 19 +++++++++ .../Activities/Pages/ListActivities.php | 19 +++++++++ .../Activities/Schemas/ActivityForm.php | 42 +++++++++++++++++++ .../Activities/Tables/ActivitiesTable.php | 41 ++++++++++++++++++ .../Resources/Approvals/ApprovalResource.php | 40 ++++++++++++++++++ .../Approvals/Pages/CreateApproval.php | 11 +++++ .../Approvals/Pages/EditApproval.php | 19 +++++++++ .../Approvals/Pages/ListApprovals.php | 19 +++++++++ .../Approvals/Schemas/ApprovalForm.php | 27 ++++++++++++ .../Approvals/Tables/ApprovalsTable.php | 39 +++++++++++++++++ .../Resources/Audits/AuditResource.php | 40 ++++++++++++++++++ .../Resources/Audits/Pages/CreateAudit.php | 11 +++++ .../Resources/Audits/Pages/EditAudit.php | 19 +++++++++ .../Resources/Audits/Pages/ListAudits.php | 19 +++++++++ .../Resources/Audits/Schemas/AuditForm.php | 32 ++++++++++++++ .../Resources/Audits/Tables/AuditsTable.php | 34 +++++++++++++++ .../CashCategories/CashCategoryResource.php | 40 ++++++++++++++++++ .../Pages/CreateCashCategory.php | 11 +++++ .../CashCategories/Pages/EditCashCategory.php | 19 +++++++++ .../Pages/ListCashCategories.php | 19 +++++++++ .../Schemas/CashCategoryForm.php | 16 +++++++ .../Tables/CashCategoriesTable.php | 23 ++++++++++ .../CashRecords/CashRecordResource.php | 40 ++++++++++++++++++ .../CashRecords/Pages/CreateCashRecord.php | 11 +++++ .../CashRecords/Pages/EditCashRecord.php | 19 +++++++++ .../CashRecords/Pages/ListCashRecords.php | 19 +++++++++ .../CashRecords/Schemas/CashRecordForm.php | 25 +++++++++++ .../CashRecords/Tables/CashRecordsTable.php | 34 +++++++++++++++ .../Resources/Divisions/DivisionResource.php | 40 ++++++++++++++++++ .../Divisions/Pages/CreateDivision.php | 11 +++++ .../Divisions/Pages/EditDivision.php | 19 +++++++++ .../Divisions/Pages/ListDivisions.php | 19 +++++++++ .../Divisions/Schemas/DivisionForm.php | 18 ++++++++ .../Divisions/Tables/DivisionsTable.php | 24 +++++++++++ .../Resources/Users/Pages/CreateUser.php | 11 +++++ .../Resources/Users/Pages/EditUser.php | 19 +++++++++ .../Resources/Users/Pages/ListUsers.php | 19 +++++++++ .../Resources/Users/Schemas/UserForm.php | 42 +++++++++++++++++++ .../Resources/Users/Tables/UsersTable.php | 36 ++++++++++++++++ app/Filament/Resources/Users/UserResource.php | 40 ++++++++++++++++++ .../Resources/Votes/Pages/CreateVote.php | 11 +++++ .../Resources/Votes/Pages/EditVote.php | 19 +++++++++ .../Resources/Votes/Pages/ListVotes.php | 19 +++++++++ .../Resources/Votes/Schemas/VoteForm.php | 30 +++++++++++++ .../Resources/Votes/Tables/VotesTable.php | 36 ++++++++++++++++ app/Filament/Resources/Votes/VoteResource.php | 40 ++++++++++++++++++ 48 files changed, 1211 insertions(+) create mode 100644 app/Filament/Resources/Activities/ActivityResource.php create mode 100644 app/Filament/Resources/Activities/Pages/CreateActivity.php create mode 100644 app/Filament/Resources/Activities/Pages/EditActivity.php create mode 100644 app/Filament/Resources/Activities/Pages/ListActivities.php create mode 100644 app/Filament/Resources/Activities/Schemas/ActivityForm.php create mode 100644 app/Filament/Resources/Activities/Tables/ActivitiesTable.php create mode 100644 app/Filament/Resources/Approvals/ApprovalResource.php create mode 100644 app/Filament/Resources/Approvals/Pages/CreateApproval.php create mode 100644 app/Filament/Resources/Approvals/Pages/EditApproval.php create mode 100644 app/Filament/Resources/Approvals/Pages/ListApprovals.php create mode 100644 app/Filament/Resources/Approvals/Schemas/ApprovalForm.php create mode 100644 app/Filament/Resources/Approvals/Tables/ApprovalsTable.php create mode 100644 app/Filament/Resources/Audits/AuditResource.php create mode 100644 app/Filament/Resources/Audits/Pages/CreateAudit.php create mode 100644 app/Filament/Resources/Audits/Pages/EditAudit.php create mode 100644 app/Filament/Resources/Audits/Pages/ListAudits.php create mode 100644 app/Filament/Resources/Audits/Schemas/AuditForm.php create mode 100644 app/Filament/Resources/Audits/Tables/AuditsTable.php create mode 100644 app/Filament/Resources/CashCategories/CashCategoryResource.php create mode 100644 app/Filament/Resources/CashCategories/Pages/CreateCashCategory.php create mode 100644 app/Filament/Resources/CashCategories/Pages/EditCashCategory.php create mode 100644 app/Filament/Resources/CashCategories/Pages/ListCashCategories.php create mode 100644 app/Filament/Resources/CashCategories/Schemas/CashCategoryForm.php create mode 100644 app/Filament/Resources/CashCategories/Tables/CashCategoriesTable.php create mode 100644 app/Filament/Resources/CashRecords/CashRecordResource.php create mode 100644 app/Filament/Resources/CashRecords/Pages/CreateCashRecord.php create mode 100644 app/Filament/Resources/CashRecords/Pages/EditCashRecord.php create mode 100644 app/Filament/Resources/CashRecords/Pages/ListCashRecords.php create mode 100644 app/Filament/Resources/CashRecords/Schemas/CashRecordForm.php create mode 100644 app/Filament/Resources/CashRecords/Tables/CashRecordsTable.php create mode 100644 app/Filament/Resources/Divisions/DivisionResource.php create mode 100644 app/Filament/Resources/Divisions/Pages/CreateDivision.php create mode 100644 app/Filament/Resources/Divisions/Pages/EditDivision.php create mode 100644 app/Filament/Resources/Divisions/Pages/ListDivisions.php create mode 100644 app/Filament/Resources/Divisions/Schemas/DivisionForm.php create mode 100644 app/Filament/Resources/Divisions/Tables/DivisionsTable.php create mode 100644 app/Filament/Resources/Users/Pages/CreateUser.php create mode 100644 app/Filament/Resources/Users/Pages/EditUser.php create mode 100644 app/Filament/Resources/Users/Pages/ListUsers.php create mode 100644 app/Filament/Resources/Users/Schemas/UserForm.php create mode 100644 app/Filament/Resources/Users/Tables/UsersTable.php create mode 100644 app/Filament/Resources/Users/UserResource.php create mode 100644 app/Filament/Resources/Votes/Pages/CreateVote.php create mode 100644 app/Filament/Resources/Votes/Pages/EditVote.php create mode 100644 app/Filament/Resources/Votes/Pages/ListVotes.php create mode 100644 app/Filament/Resources/Votes/Schemas/VoteForm.php create mode 100644 app/Filament/Resources/Votes/Tables/VotesTable.php create mode 100644 app/Filament/Resources/Votes/VoteResource.php diff --git a/app/Filament/Resources/Activities/ActivityResource.php b/app/Filament/Resources/Activities/ActivityResource.php new file mode 100644 index 0000000..1be828f --- /dev/null +++ b/app/Filament/Resources/Activities/ActivityResource.php @@ -0,0 +1,40 @@ + ListActivities::route('/'), + 'create' => CreateActivity::route('/create'), + 'edit' => EditActivity::route('/{record}/edit'), + ]; + } +} diff --git a/app/Filament/Resources/Activities/Pages/CreateActivity.php b/app/Filament/Resources/Activities/Pages/CreateActivity.php new file mode 100644 index 0000000..7731008 --- /dev/null +++ b/app/Filament/Resources/Activities/Pages/CreateActivity.php @@ -0,0 +1,11 @@ +components([ + TextInput::make('title')->label('Judul')->required(), + Textarea::make('description')->label('Deskripsi')->rows(3)->columnSpanFull(), + DatePicker::make('start_date')->label('Mulai')->required(), + DatePicker::make('end_date')->label('Selesai')->required(), + Select::make('status') + ->options([ + 'draft' => 'Draft', + 'pending' => 'Pending', + 'approved' => 'Disetujui', + 'rejected' => 'Ditolak', + ]) + ->default('draft') + ->required(), + Select::make('participants') + ->label('Peserta') + ->relationship('participants', 'name') + ->multiple() + ->preload() + ->searchable() + ->columnSpanFull(), + DateTimePicker::make('executed_at')->label('Waktu Pelaksanaan'), + Textarea::make('execution_notes')->label('Catatan Pelaksanaan')->rows(3)->columnSpanFull(), + ]); + } +} diff --git a/app/Filament/Resources/Activities/Tables/ActivitiesTable.php b/app/Filament/Resources/Activities/Tables/ActivitiesTable.php new file mode 100644 index 0000000..077b15a --- /dev/null +++ b/app/Filament/Resources/Activities/Tables/ActivitiesTable.php @@ -0,0 +1,41 @@ +columns([ + TextColumn::make('title')->label('Judul')->searchable()->sortable(), + TextColumn::make('start_date')->label('Mulai')->date('d M Y')->sortable(), + TextColumn::make('end_date')->label('Selesai')->date('d M Y'), + TextColumn::make('status')->badge() + ->color(fn ($state) => match ($state) { + 'approved' => 'success', + 'rejected' => 'danger', + 'pending' => 'warning', + default => 'gray', + }), + TextColumn::make('creator.name')->label('Dibuat Oleh'), + ]) + ->filters([ + SelectFilter::make('status')->options([ + 'draft' => 'Draft', + 'pending' => 'Pending', + 'approved' => 'Disetujui', + 'rejected' => 'Ditolak', + ]), + ]) + ->recordActions([EditAction::make()]) + ->toolbarActions([BulkActionGroup::make([DeleteBulkAction::make()])]); + } +} diff --git a/app/Filament/Resources/Approvals/ApprovalResource.php b/app/Filament/Resources/Approvals/ApprovalResource.php new file mode 100644 index 0000000..aa67369 --- /dev/null +++ b/app/Filament/Resources/Approvals/ApprovalResource.php @@ -0,0 +1,40 @@ + ListApprovals::route('/'), + 'create' => CreateApproval::route('/create'), + 'edit' => EditApproval::route('/{record}/edit'), + ]; + } +} diff --git a/app/Filament/Resources/Approvals/Pages/CreateApproval.php b/app/Filament/Resources/Approvals/Pages/CreateApproval.php new file mode 100644 index 0000000..1a051c3 --- /dev/null +++ b/app/Filament/Resources/Approvals/Pages/CreateApproval.php @@ -0,0 +1,11 @@ +components([ + TextInput::make('model_type')->label('Tipe Model')->required(), + TextInput::make('model_id')->label('ID Model')->numeric()->required(), + TextInput::make('required_approvals')->label('Jumlah Persetujuan')->numeric()->default(1), + Select::make('status') + ->options([ + 'pending' => 'Pending', + 'approved' => 'Disetujui', + 'rejected' => 'Ditolak', + ]) + ->default('pending') + ->required(), + ]); + } +} diff --git a/app/Filament/Resources/Approvals/Tables/ApprovalsTable.php b/app/Filament/Resources/Approvals/Tables/ApprovalsTable.php new file mode 100644 index 0000000..262046d --- /dev/null +++ b/app/Filament/Resources/Approvals/Tables/ApprovalsTable.php @@ -0,0 +1,39 @@ +columns([ + TextColumn::make('model_type')->label('Tipe'), + TextColumn::make('model_id')->label('ID'), + TextColumn::make('required_approvals')->label('Dibutuhkan'), + TextColumn::make('items_count')->counts('items')->label('Sudah Approve'), + TextColumn::make('status')->badge() + ->color(fn ($state) => match ($state) { + 'approved' => 'success', + 'rejected' => 'danger', + default => 'warning', + }), + ]) + ->filters([ + SelectFilter::make('status')->options([ + 'pending' => 'Pending', + 'approved' => 'Disetujui', + 'rejected' => 'Ditolak', + ]), + ]) + ->recordActions([EditAction::make()]) + ->toolbarActions([BulkActionGroup::make([DeleteBulkAction::make()])]); + } +} diff --git a/app/Filament/Resources/Audits/AuditResource.php b/app/Filament/Resources/Audits/AuditResource.php new file mode 100644 index 0000000..9a70f30 --- /dev/null +++ b/app/Filament/Resources/Audits/AuditResource.php @@ -0,0 +1,40 @@ + ListAudits::route('/'), + 'create' => CreateAudit::route('/create'), + 'edit' => EditAudit::route('/{record}/edit'), + ]; + } +} diff --git a/app/Filament/Resources/Audits/Pages/CreateAudit.php b/app/Filament/Resources/Audits/Pages/CreateAudit.php new file mode 100644 index 0000000..cd0e8d2 --- /dev/null +++ b/app/Filament/Resources/Audits/Pages/CreateAudit.php @@ -0,0 +1,11 @@ +components([ + Select::make('auditor_id')->label('Auditor') + ->options(User::pluck('name', 'id')) + ->searchable() + ->required(), + TextInput::make('model_type')->label('Tipe Model')->required(), + TextInput::make('model_id')->label('ID Model')->numeric()->required(), + Select::make('issue_type')->label('Jenis Temuan') + ->options(['warning' => 'Peringatan', 'critical' => 'Kritis']) + ->required(), + Textarea::make('description')->label('Deskripsi')->rows(3)->required()->columnSpanFull(), + Select::make('status') + ->options(['open' => 'Terbuka', 'resolved' => 'Selesai']) + ->default('open') + ->required(), + ]); + } +} diff --git a/app/Filament/Resources/Audits/Tables/AuditsTable.php b/app/Filament/Resources/Audits/Tables/AuditsTable.php new file mode 100644 index 0000000..47a4520 --- /dev/null +++ b/app/Filament/Resources/Audits/Tables/AuditsTable.php @@ -0,0 +1,34 @@ +columns([ + TextColumn::make('auditor.name')->label('Auditor'), + TextColumn::make('model_type')->label('Tipe'), + TextColumn::make('issue_type')->label('Jenis')->badge() + ->color(fn ($state) => $state === 'critical' ? 'danger' : 'warning'), + TextColumn::make('description')->label('Deskripsi')->limit(50), + TextColumn::make('status')->badge() + ->color(fn ($state) => $state === 'resolved' ? 'success' : 'danger'), + TextColumn::make('created_at')->label('Tanggal')->date('d M Y'), + ]) + ->filters([ + SelectFilter::make('issue_type')->options(['warning' => 'Peringatan', 'critical' => 'Kritis']), + SelectFilter::make('status')->options(['open' => 'Terbuka', 'resolved' => 'Selesai']), + ]) + ->recordActions([EditAction::make()]) + ->toolbarActions([BulkActionGroup::make([DeleteBulkAction::make()])]); + } +} diff --git a/app/Filament/Resources/CashCategories/CashCategoryResource.php b/app/Filament/Resources/CashCategories/CashCategoryResource.php new file mode 100644 index 0000000..f873832 --- /dev/null +++ b/app/Filament/Resources/CashCategories/CashCategoryResource.php @@ -0,0 +1,40 @@ + ListCashCategories::route('/'), + 'create' => CreateCashCategory::route('/create'), + 'edit' => EditCashCategory::route('/{record}/edit'), + ]; + } +} diff --git a/app/Filament/Resources/CashCategories/Pages/CreateCashCategory.php b/app/Filament/Resources/CashCategories/Pages/CreateCashCategory.php new file mode 100644 index 0000000..3e08d11 --- /dev/null +++ b/app/Filament/Resources/CashCategories/Pages/CreateCashCategory.php @@ -0,0 +1,11 @@ +components([ + TextInput::make('name')->label('Nama')->required(), + ]); + } +} diff --git a/app/Filament/Resources/CashCategories/Tables/CashCategoriesTable.php b/app/Filament/Resources/CashCategories/Tables/CashCategoriesTable.php new file mode 100644 index 0000000..9c3dc78 --- /dev/null +++ b/app/Filament/Resources/CashCategories/Tables/CashCategoriesTable.php @@ -0,0 +1,23 @@ +columns([ + TextColumn::make('name')->label('Nama')->searchable(), + TextColumn::make('records_count')->counts('records')->label('Transaksi'), + ]) + ->recordActions([EditAction::make()]) + ->toolbarActions([BulkActionGroup::make([DeleteBulkAction::make()])]); + } +} diff --git a/app/Filament/Resources/CashRecords/CashRecordResource.php b/app/Filament/Resources/CashRecords/CashRecordResource.php new file mode 100644 index 0000000..7edd20a --- /dev/null +++ b/app/Filament/Resources/CashRecords/CashRecordResource.php @@ -0,0 +1,40 @@ + ListCashRecords::route('/'), + 'create' => CreateCashRecord::route('/create'), + 'edit' => EditCashRecord::route('/{record}/edit'), + ]; + } +} diff --git a/app/Filament/Resources/CashRecords/Pages/CreateCashRecord.php b/app/Filament/Resources/CashRecords/Pages/CreateCashRecord.php new file mode 100644 index 0000000..5200a23 --- /dev/null +++ b/app/Filament/Resources/CashRecords/Pages/CreateCashRecord.php @@ -0,0 +1,11 @@ +components([ + Select::make('category_id')->label('Kategori') + ->options(CashCategory::pluck('name', 'id')) + ->required(), + TextInput::make('amount')->label('Jumlah (Rp)')->numeric()->required(), + Textarea::make('description')->label('Keterangan')->required()->columnSpanFull(), + DatePicker::make('date')->label('Tanggal')->required(), + ]); + } +} diff --git a/app/Filament/Resources/CashRecords/Tables/CashRecordsTable.php b/app/Filament/Resources/CashRecords/Tables/CashRecordsTable.php new file mode 100644 index 0000000..5ffff84 --- /dev/null +++ b/app/Filament/Resources/CashRecords/Tables/CashRecordsTable.php @@ -0,0 +1,34 @@ +columns([ + TextColumn::make('date')->label('Tanggal')->date('d M Y')->sortable(), + TextColumn::make('category.name')->label('Kategori'), + TextColumn::make('amount')->label('Jumlah')->money('IDR')->sortable(), + TextColumn::make('description')->label('Keterangan')->limit(40), + TextColumn::make('creator.name')->label('Dibuat Oleh'), + TextColumn::make('verifier.name')->label('Diverifikasi')->default('-'), + TextColumn::make('verified_at')->label('Tgl Verifikasi')->dateTime('d M Y')->default('-'), + ]) + ->filters([ + SelectFilter::make('category_id')->label('Kategori') + ->options(CashCategory::pluck('name', 'id')), + ]) + ->recordActions([EditAction::make()]) + ->toolbarActions([BulkActionGroup::make([DeleteBulkAction::make()])]); + } +} diff --git a/app/Filament/Resources/Divisions/DivisionResource.php b/app/Filament/Resources/Divisions/DivisionResource.php new file mode 100644 index 0000000..c2ce60f --- /dev/null +++ b/app/Filament/Resources/Divisions/DivisionResource.php @@ -0,0 +1,40 @@ + ListDivisions::route('/'), + 'create' => CreateDivision::route('/create'), + 'edit' => EditDivision::route('/{record}/edit'), + ]; + } +} diff --git a/app/Filament/Resources/Divisions/Pages/CreateDivision.php b/app/Filament/Resources/Divisions/Pages/CreateDivision.php new file mode 100644 index 0000000..3af672f --- /dev/null +++ b/app/Filament/Resources/Divisions/Pages/CreateDivision.php @@ -0,0 +1,11 @@ +components([ + TextInput::make('name')->label('Nama')->required(), + Textarea::make('description')->label('Deskripsi')->rows(3)->columnSpanFull(), + ]); + } +} diff --git a/app/Filament/Resources/Divisions/Tables/DivisionsTable.php b/app/Filament/Resources/Divisions/Tables/DivisionsTable.php new file mode 100644 index 0000000..96a7ad6 --- /dev/null +++ b/app/Filament/Resources/Divisions/Tables/DivisionsTable.php @@ -0,0 +1,24 @@ +columns([ + TextColumn::make('name')->label('Nama')->searchable()->sortable(), + TextColumn::make('description')->label('Deskripsi')->limit(50), + TextColumn::make('members_count')->counts('members')->label('Anggota'), + ]) + ->recordActions([EditAction::make()]) + ->toolbarActions([BulkActionGroup::make([DeleteBulkAction::make()])]); + } +} diff --git a/app/Filament/Resources/Users/Pages/CreateUser.php b/app/Filament/Resources/Users/Pages/CreateUser.php new file mode 100644 index 0000000..125b3ff --- /dev/null +++ b/app/Filament/Resources/Users/Pages/CreateUser.php @@ -0,0 +1,11 @@ +components([ + TextInput::make('name')->required(), + TextInput::make('email')->email()->unique(ignoreRecord: true), + TextInput::make('password')->password()->revealable() + ->required(fn ($operation) => $operation === 'create') + ->dehydrateStateUsing(fn ($state) => filled($state) ? bcrypt($state) : null) + ->dehydrated(fn ($state) => filled($state)), + TextInput::make('phone')->label('Telepon'), + Textarea::make('address')->label('Alamat')->rows(2)->columnSpanFull(), + Select::make('division_id')->label('Divisi') + ->options(Division::pluck('name', 'id')) + ->searchable(), + Select::make('status') + ->options(['aktif' => 'Aktif', 'nonaktif' => 'Nonaktif']) + ->default('aktif') + ->required() + ->live(), + Textarea::make('inactive_reason')->label('Alasan Nonaktif') + ->visible(fn ($get) => $get('status') === 'nonaktif') + ->required(fn ($get) => $get('status') === 'nonaktif') + ->columnSpanFull(), + DatePicker::make('last_activity_date')->label('Terakhir Aktif'), + Select::make('roles')->relationship('roles', 'name') + ->multiple()->preload()->label('Role'), + ]); + } +} diff --git a/app/Filament/Resources/Users/Tables/UsersTable.php b/app/Filament/Resources/Users/Tables/UsersTable.php new file mode 100644 index 0000000..c06dec2 --- /dev/null +++ b/app/Filament/Resources/Users/Tables/UsersTable.php @@ -0,0 +1,36 @@ +columns([ + TextColumn::make('name')->searchable()->sortable(), + TextColumn::make('email')->searchable(), + TextColumn::make('phone')->label('Telepon'), + TextColumn::make('division.name')->label('Divisi')->sortable(), + TextColumn::make('status')->badge() + ->color(fn ($state) => $state === 'aktif' ? 'success' : 'danger'), + TextColumn::make('roles.name')->label('Role')->badge(), + ]) + ->filters([ + SelectFilter::make('status') + ->options(['aktif' => 'Aktif', 'nonaktif' => 'Nonaktif']), + SelectFilter::make('division_id')->label('Divisi') + ->options(Division::pluck('name', 'id')), + ]) + ->recordActions([EditAction::make()]) + ->toolbarActions([BulkActionGroup::make([DeleteBulkAction::make()])]); + } +} diff --git a/app/Filament/Resources/Users/UserResource.php b/app/Filament/Resources/Users/UserResource.php new file mode 100644 index 0000000..b145e80 --- /dev/null +++ b/app/Filament/Resources/Users/UserResource.php @@ -0,0 +1,40 @@ + ListUsers::route('/'), + 'create' => CreateUser::route('/create'), + 'edit' => EditUser::route('/{record}/edit'), + ]; + } +} diff --git a/app/Filament/Resources/Votes/Pages/CreateVote.php b/app/Filament/Resources/Votes/Pages/CreateVote.php new file mode 100644 index 0000000..ec6cc5e --- /dev/null +++ b/app/Filament/Resources/Votes/Pages/CreateVote.php @@ -0,0 +1,11 @@ +components([ + TextInput::make('title')->label('Judul')->required(), + Textarea::make('description')->label('Deskripsi')->rows(3)->columnSpanFull(), + Select::make('type')->options([ + 'activity' => 'Kegiatan', + 'finance' => 'Keuangan', + 'general' => 'Umum', + ])->required(), + Select::make('status') + ->options(['open' => 'Buka', 'closed' => 'Tutup']) + ->default('open') + ->required(), + DateTimePicker::make('deadline')->label('Batas Waktu'), + ]); + } +} diff --git a/app/Filament/Resources/Votes/Tables/VotesTable.php b/app/Filament/Resources/Votes/Tables/VotesTable.php new file mode 100644 index 0000000..f80dde2 --- /dev/null +++ b/app/Filament/Resources/Votes/Tables/VotesTable.php @@ -0,0 +1,36 @@ +columns([ + TextColumn::make('title')->label('Judul')->searchable(), + TextColumn::make('type')->badge(), + TextColumn::make('status')->badge() + ->color(fn ($state) => $state === 'open' ? 'success' : 'gray'), + TextColumn::make('deadline')->label('Batas Waktu')->dateTime('d M Y H:i'), + TextColumn::make('items_count')->counts('items')->label('Suara'), + ]) + ->filters([ + SelectFilter::make('status')->options(['open' => 'Buka', 'closed' => 'Tutup']), + SelectFilter::make('type')->options([ + 'activity' => 'Kegiatan', + 'finance' => 'Keuangan', + 'general' => 'Umum', + ]), + ]) + ->recordActions([EditAction::make()]) + ->toolbarActions([BulkActionGroup::make([DeleteBulkAction::make()])]); + } +} diff --git a/app/Filament/Resources/Votes/VoteResource.php b/app/Filament/Resources/Votes/VoteResource.php new file mode 100644 index 0000000..2196266 --- /dev/null +++ b/app/Filament/Resources/Votes/VoteResource.php @@ -0,0 +1,40 @@ + ListVotes::route('/'), + 'create' => CreateVote::route('/create'), + 'edit' => EditVote::route('/{record}/edit'), + ]; + } +}