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(), Action::make('submit') ->label('Ajukan') ->icon('heroicon-o-paper-airplane') ->color('info') ->requiresConfirmation() ->visible(fn ($record) => $record->status === 'draft') ->action(fn ($record) => $record->update(['status' => 'pending'])), Action::make('approve') ->label('Setujui') ->icon('heroicon-o-check-circle') ->color('success') ->requiresConfirmation() ->visible(fn ($record) => $record->status === 'pending') ->action(fn ($record) => $record->update([ 'status' => 'approved', 'approved_by' => auth()->id(), 'approved_at' => now(), ])), Action::make('reject') ->label('Tolak') ->icon('heroicon-o-x-circle') ->color('danger') ->requiresConfirmation() ->visible(fn ($record) => $record->status === 'pending') ->action(fn ($record) => $record->update(['status' => 'rejected'])), ]) ->toolbarActions([BulkActionGroup::make([DeleteBulkAction::make()])]); } }