columns([ TextColumn::make('date') ->label('Tanggal & Waktu') ->date('l, d F Y') ->sortable(), TextColumn::make('route') ->label('Halaman') ->searchable() ->sortable(), TextColumn::make('method') ->label('Method') ->badge() ->color(fn (string $state): string => match ($state) { 'GET' => 'success', 'POST' => 'warning', default => 'gray', }), TextColumn::make('status') ->label('Status') ->badge() ->color(fn (int $state): string => $state >= 200 && $state < 300 ? 'success' : 'danger'), TextColumn::make('ip') ->label('IP Address') ->searchable(), TextColumn::make('counter') ->label('Hits') ->numeric() ->sortable(), TextColumn::make('user.name') ->label('User') ->placeholder('Guest'), ]) ->defaultSort('date', 'desc') ->filters([ SelectFilter::make('method') ->options([ 'GET' => 'GET', 'POST' => 'POST', ]), Filter::make('date') ->schema([ DatePicker::make('from')->time()->autocomplete(false), DatePicker::make('until')->time()->autocomplete(false), ]) ->query(function (Builder $query, array $data): Builder { return $query ->when($data['from'], fn (Builder $q): Builder => $q->whereDate('date', '>=', $data['from'])) ->when($data['until'], fn (Builder $q): Builder => $q->whereDate('date', '<=', $data['until'])); }), ]) ->recordActions([]) ->toolbarActions([]); } public static function getPages(): array { return [ 'index' => ManageVisitors::route('/'), ]; } }