columns([ ToggleColumn::make('im_newsletter') ->onColor('success') ->label('Senden'), TextColumn::make('company')->label('Firma'), TextColumn::make('email'), TextColumn::make('vereidigung')->date()->sortable(), TextColumn::make('gender') ->label('Geschlecht') ->formatStateUsing(fn (string $state): string => match ($state) { '0' => 'Herr', '1' => 'Frau', '2' => 'Diverse', }), TextColumn::make('first_name')->label('Vorname'), TextColumn::make('last_name')->label('Nachname'), ]) ->filters([ Filter::make('mail_gruppen_id') ->columnSpanFull() ->columns(4) ->schema([ Select::make('mail_gruppen_id') ->hiddenLabel() ->preload() ->default(1) ->selectablePlaceholder(false) ->options(function (): array { return MailGruppen::pluck('name', 'id')->toArray(); }), Toggle::make('im_newsletter')->label('Im Newsletter'), DatePicker::make('vereidigung_von')->native(false)->hiddenLabel()->placeholder('Vereidigung von'), DatePicker::make('vereidigung_bis')->native(false)->hiddenLabel()->placeholder('Vereidigung bis'), ]) ->query(function (Builder $query, array $data): Builder { return $query ->when( $data['mail_gruppen_id'], fn (Builder $query, $mail_gruppen_id): Builder => $query->where('mail_gruppen_id', $mail_gruppen_id), )->when( $data['im_newsletter'], fn (Builder $query, $im_newsletter): Builder => $query->where('im_newsletter', $im_newsletter), )->when( $data['vereidigung_von'], fn (Builder $query, $date): Builder => $query->whereDate('vereidigung', '>=', $date), ) ->when( $data['vereidigung_bis'], fn (Builder $query, $date): Builder => $query->whereDate('vereidigung', '<=', $date), ); }), ], layout: FiltersLayout::AboveContent) ->filtersResetActionPosition(null) ->hiddenFilterIndicators() ->deferFilters(false) ->recordActions([ EditAction::make()->iconButton(), DeleteAction::make()->iconButton(), ]) ->toolbarActions([ BulkActionGroup::make([ BulkAction::make('im_newsletter_on') ->label('An Adressen senden') ->tooltip('Ausgewählte Adressen dem Newsletter hinzufügen') ->icon('heroicon-o-envelope') ->color('success') ->action(function (Collection $records, array $data): void { foreach ($records as $record) { /** @var object $record */ MailAdressen::where('id', '=', $record->id) ->update( ['im_newsletter' => 1] ); } }), BulkAction::make('im_newsletter_off') ->label('Nicht an Adressen senden') ->tooltip('Ausgewählte Adressen aus dem Newsletter herausnehmen') ->icon('heroicon-o-envelope') ->action(function (Collection $records, array $data): void { foreach ($records as $record) { /** @var object $record */ MailAdressen::where('id', '=', $record->id) ->update( ['im_newsletter' => 0] ); } }), DeleteBulkAction::make(), ]), ]); } }