columns([ ...RowIndexColumn::make(), TextColumn::make('title') ->label('Judul Pengumuman') ->searchable() ->sortable() ->wrap(), TextColumn::make('content') ->label('Isi Pengumuman') ->searchable() ->sortable() ->wrap() ->limit(100) ->html() ->toggleable(isToggledHiddenByDefault: true), TextColumn::make('type') ->label('Tipe Pengumuman') ->badge() ->sortable(), TextColumn::make('partnerMedia') ->label('Penerima Khusus') ->getStateUsing( fn ($record) => $record->partnerMedia->pluck('name')->toArray() ) ->listWithLineBreaks() ->limitList(3) ->expandableLimitedList() ->badge() ->placeholder( fn (Announcement $record) => $record->type === AnnouncementType::PUBLIC ? 'Publik' : 'Tidak ada penerima' ), ...TimestampColumns::make(), ]) ->filters([ SelectFilter::make('type') ->label('Tipe Pengumuman') ->options(AnnouncementType::class) ->native(false), TrashedFilter::make() ->native(false) ->visible(fn () => auth()->user()?->hasRole(RoleEnum::DEVELOPER->value)), ]) ->recordActions([ EditAction::make() ->modalWidth(Width::FiveExtraLarge) ->visible(fn (Announcement $record): bool => $record->type === AnnouncementType::PUBLIC), DeleteAction::make(), ForceDeleteAction::make(), RestoreAction::make(), ]) ->toolbarActions([ BulkActionGroup::make([ ...DefaultBulkActions::make('Pengumuman'), ]), ]) ->emptyStateIcon(Heroicon::OutlinedMegaphone) ->emptyStateHeading(fn () => CheerfulNotification::getByKey('announcement.empty_state_heading')) ->emptyStateDescription(fn () => CheerfulNotification::getByKey('announcement.empty_state')) ->defaultSort('created_at', 'desc') ->deferFilters(false) ->paginated([25, 50, 100, 'all']) ->deferLoading(); } }