columns([ TextColumn::make('user.email') ->label('Akun') ->formatStateUsing(fn ($state, Student $record) => "
Alamat Surel: {$state}
Nama Pengguna: {$record->user?->username}
") ->html() ->searchable(['email', 'username']) ->sortable() ->visible(fn () => auth()->user()->hasRole(RoleEnum::Developer)), TextColumn::make('full_name') ->label('Nama Lengkap') ->searchable(query: function (Builder $query, string $search) { $query->where('full_name', 'like', "%{$search}%") ->orWhere('student_number', 'like', "%{$search}%"); }) ->sortable() ->description(fn (Student $student) => $student->student_number), TextColumn::make('phone_number') ->label('No. Telepon') ->searchable() ->sortable(), TextColumn::make('sex') ->label('Jenis Kelamin') ->badge() ->sortable() ->searchable(query: function ($query, string $search) { $search = strtolower($search); if (str_contains('laki-laki', $search)) { $query->orWhere('sex', 'male'); } if (str_contains('perempuan', $search)) { $query->orWhere('sex', 'female'); } }), TextColumn::make('date_of_birth') ->label('TTL') ->date('d F Y') ->sortable() ->prefix(fn (Student $student) => $student->place_of_birth ? $student->place_of_birth.', ' : ''), TextColumn::make('address') ->label('Alamat') ->limit(50), ...TimestampColumns::make(), ]) ->filters([ SelectFilter::make('sex') ->label('Jenis Kelamin') ->options(Sex::class) ->native(false), TrashedFilter::make() ->native(false) ->visible(fn () => auth()->user()->hasRole(RoleEnum::Developer)), ]) ->recordActions([ ChangePasswordAction::make('changePassword'), EditAction::make() ->modalWidth(Width::Large), DeleteAction::make(), ForceDeleteAction::make(), RestoreAction::make(), ]) ->toolbarActions([ BulkActionGroup::make([ ...DefaultBulkActions::make('Mahasiswa'), ]), ]) ->emptyStateIcon(Heroicon::OutlinedUserPlus) ->emptyStateDescription('Setelah Anda membuat data pertama, maka akan muncul disini.') ->defaultSort('created_at', 'desc') ->deferFilters(false) ->paginated([25, 50, 100, 'all']) ->defaultPaginationPageOption(25); } }