columns([ TextColumn::make('id'), ToggleColumn::make('meine') ->state(fn ($record) => ProjektUser::where('user_id', auth()->user()->id)->where('projekte_id', $record->id)->count()) ->beforeStateUpdated(function ($record, $state) { if ($state) { ProjektUser::create(['user_id' => auth()->user()->id, 'projekte_id' => $record->id]); } else { ProjektUser::where('user_id', auth()->user()->id)->where('projekte_id', $record->id)->delete(); } }), TextColumn::make('interner_name') ->badge() ->tooltip(fn ($record): HtmlString => new HtmlString($record->beschreibung)) ->label('Interner Name') ->color(fn ($record): string => match ($record->status) { 'entwurf' => 'primary', 'endfassung' => 'success', 'klone' => 'danger', }) ->wrap() ->searchable(), TextColumn::make('offizieller_name') ->wrap() ->searchable() ->label('Offizieller Name'), TextColumn::make('gutachter.company'), TextColumn::make('auftraggeber.company'), TextColumn::make('erstellung')->sortable(), ]) ->striped() ->defaultSort('erstellung', direction: 'desc') ->persistSortInSession() ->persistFiltersInSession() ->filters([ Filter::make('meine') ->schema([ Toggle::make('meine')->label('Meine Projekte'), ])->query(function (Builder $query, array $data): Builder { return $query->when( $data['meine'], function (Builder $query, $meine) { $query->whereHas('projekt_users', function ($query) { $query->where('projekt_users.user_id', auth()->user()->id); }); } ); }), SelectFilter::make('status') ->options(ProjektStatus::class), SelectFilter::make('gutachter_id') ->label('Gutachter') ->preload() ->options(function () { $res = Projekte::where('konto_id', Auth::user()->konto_id) ->groupBy('gutachter_id') ->pluck('gutachter_id')->toArray(); return Gutachter::query()->whereIn('id', $res)->orderBy('company')->pluck('company', 'id'); }), SelectFilter::make('auftraggeber_id') ->label('Auftraggeber') ->preload() ->options(function () { $res = Projekte::where('konto_id', Auth::user()->konto_id) ->groupBy('auftraggeber_id') ->pluck('auftraggeber_id')->toArray(); return Auftraggeber::query()->whereIn('id', $res)->orderBy('company')->pluck('company', 'id'); }), ], FiltersLayout::AboveContent) ->deferFilters(false) ->recordActions([ EditAction::make()->iconButton(), Action::make('dokument_klonen') ->action(fn (Projekte $record) => CloneProjekt::clone($record)) ->iconButton() ->icon('phosphor-copy') ->requiresConfirmation(), ]); } }