headerActions([ Action::make('tuncate_table')->action(function () { UserActivity::truncate(); Notification::make() ->title('Tuncated table successfully') ->success() ->send(); }), ]) ->columns([ TextColumn::make('user.name'), TextColumn::make('ip'), TextColumn::make('country'), TextColumn::make('location'), TextColumn::make('created_at')->dateTime('M j, Y H:i'), ]) ->defaultSort('created_at', 'desc') ->deferFilters(false) ->hiddenFilterIndicators(false) ->persistFiltersInSession() ->filters([ Filter::make('created_at') ->columns(2)->columnSpan(3) ->schema([ Toggle::make('user_latest') ->onIcon('phosphor-user-fill') ->offIcon('phosphor-user') ->label('Logged User'), Select::make(name: 'user_id') ->hidden(fn () => auth()->user()->sport_id == 5) ->placeholder('User') ->prefixIcon('phosphor-user') ->hiddenLabel() ->label('') ->multiple() ->searchable() ->preload() ->options(function () { $res = UserActivity::groupBy('user_id')->pluck('user_id')->toArray(); return User::query()->whereIn('id', $res)->orderBy('name')->pluck('name', 'id'); }) ->live(), ]) ->query(function (Builder $query, array $data): Builder { return $query ->when( $data['user_latest'], function (Builder $query) { $res = UserActivity::query() ->whereIn('id', function ($q) { $q->select(DB::raw('MAX(id) FROM user_activities GROUP BY user_id')); }) ->pluck('id'); $query->whereIn('id', $res); } ) ->when( $data['user_id'], fn (Builder $query, $user_id): Builder => $query->where('user_id', $user_id)->orderBy('created_at', 'DESC'), ); })->indicateUsing(function (array $data): array { $indicators = []; if ($data['user_latest'] ?? null) { $indicators[] = Indicator::make('User latest')->color('info'); } if ($data['user_id'] ?? null) { $user = User::query()->whereIn('id', $data['user_id'])->value('name'); $indicators[] = Indicator::make($user)->color('info'); } return $indicators; }), ], layout: FiltersLayout::AboveContent); } }