columns([ ...RowIndexColumn::make(), TextColumn::make('user.name') ->label('Pemohon') ->searchable() ->sortable() ->description(fn (DataChangeRequest $record): ?string => $record?->entity?->name) ->visible(! auth()->user()->hasRole(RoleEnum::PERUSAHAAN->value)), TextColumn::make('entity_type') ->label('Jenis Data') ->searchable() ->sortable() ->description(fn (DataChangeRequest $record): ?string => match (true) { isset($record->new_data['__delete_request__']) => CheerfulNotification::getByKey('data_change.deletion'), empty($record->old_data) => CheerfulNotification::getByKey('data_change.addition'), default => CheerfulNotification::getByKey('data_change.change'), }) ->formatStateUsing(fn (DataChangeRequest $record): ?string => match ($record->entity_type) { Company::class => 'Perusahaan', PartnerMedia::class => 'Media', Journalist::class => 'Jurnalis', default => 'Lainnya', }) ->color(fn (DataChangeRequest $record): ?string => match ($record->entity_type) { Company::class => 'success', PartnerMedia::class => 'info', Journalist::class => 'warning', default => 'secondary', }) ->badge(), TextColumn::make('status') ->label('Status') ->searchable() ->sortable() ->badge() ->formatStateUsing(fn (DataChangeStatus $state): string => $state->getLabel()) ->color(fn (DataChangeStatus $state): string => $state->getColor()) ->description(fn (DataChangeRequest $record): ?string => $record?->review ? 'Oleh: '.$record->review?->reviewer?->name : ''), TextColumn::make('change_reason') ->label('Alasan Perubahan') ->limit(50), TextColumn::make('review.note') ->label('Alasan Penolakan') ->limit(50), TextColumn::make('created_at') ->label('Tgl Permohonan') ->date() ->sortable() ->dateTime('l, d F Y H:i:s') ->wrap(), ]) ->filters([ SelectFilter::make('status') ->label('Status') ->options(DataChangeStatus::class) ->native(false), TrashedFilter::make() ->native(false) ->visible(fn () => auth()->user()?->hasRole(RoleEnum::DEVELOPER->value)), ]) ->recordActions([ ViewAction::make(), AcceptAction::make('accept'), RejectAction::make('reject'), ]) ->toolbarActions([ BulkActionGroup::make([ ...DefaultBulkActions::make('permohonan perubahan data'), ]), ]) ->emptyStateIcon(Heroicon::OutlinedDocumentText) ->emptyStateHeading(fn () => CheerfulNotification::getByKey('data_change.empty_state_heading')) ->emptyStateDescription(fn () => CheerfulNotification::getByKey('data_change.empty_state')) ->defaultSort('created_at', 'desc') ->deferFilters(false) ->paginated([25, 50, 100, 'all']) ->deferLoading(); } }