query( User::query() ->withCount([ 'shifts', 'shifts as upcoming_shifts_count' => fn (Builder $q) => $q->where('status', 'planned'), 'shifts as active_shifts_count' => fn (Builder $q) => $q->where('status', 'in_progress'), ]) ) ->columns([ Tables\Columns\TextColumn::make('name') ->searchable() ->sortable(), Tables\Columns\TextColumn::make('email') ->searchable(), Tables\Columns\TextColumn::make('shifts_count') ->label('Total Shifts') ->sortable(), Tables\Columns\TextColumn::make('upcoming_shifts_count') ->label('Upcoming') ->sortable(), Tables\Columns\TextColumn::make('active_shifts_count') ->label('Active') ->sortable(), ]) ->actions([ Tables\Actions\Action::make('viewTimesheet') ->label('Timesheet') ->icon('heroicon-o-clock') ->url(fn (User $record) => Timesheets::getUrl(['staff_id' => $record->id])), ]); } }