columns([ TextColumn::make('title')->label('Judul')->searchable()->sortable(), TextColumn::make('category')->label('Kategori')->badge() ->color(fn ($state) => match ($state) { 'pengumuman' => 'warning', 'berita' => 'info', default => 'gray', }), TextColumn::make('status')->badge() ->color(fn ($state) => match ($state) { 'published' => 'success', 'pending' => 'warning', 'rejected' => 'danger', default => 'gray', }), TextColumn::make('author.name')->label('Penulis'), TextColumn::make('published_at')->label('Dipublikasi') ->dateTime('d M Y')->default('-')->sortable(), ]) ->filters([ SelectFilter::make('status')->options([ 'draft' => 'Draft', 'pending' => 'Menunggu', 'published' => 'Diterbitkan', 'rejected' => 'Ditolak', ]), ]) ->recordActions([ Action::make('publish') ->label('Terbitkan') ->icon('heroicon-o-check-circle') ->color('success') ->requiresConfirmation() ->visible(fn ($record) => $record->status === 'pending') ->action(fn ($record) => $record->update([ 'status' => 'published', 'published_at' => now(), 'reviewed_by' => auth()->id(), ])), Action::make('reject') ->label('Tolak') ->icon('heroicon-o-x-circle') ->color('danger') ->visible(fn ($record) => $record->status === 'pending') ->form([ Textarea::make('rejection_reason')->label('Alasan Penolakan')->required(), ]) ->action(fn ($record, array $data) => $record->update([ 'status' => 'rejected', 'reviewed_by' => auth()->id(), 'rejection_reason' => $data['rejection_reason'], ])), EditAction::make(), ]) ->toolbarActions([BulkActionGroup::make([DeleteBulkAction::make()])]); } }