query( Donation::query() ->with(['customer', 'donationType', 'donationConfirmation', 'appeal']) ->latest('created_at') ) ->columns([ IconColumn::make('is_confirmed') ->label('') ->boolean() ->getStateUsing(fn (Donation $r) => $r->isConfirmed()) ->trueIcon('heroicon-o-check-circle') ->falseIcon('heroicon-o-x-circle') ->trueColor('success') ->falseColor('danger'), TextColumn::make('customer.name') ->label('Donor') ->description(fn (Donation $d) => $d->customer?->email) ->searchable(query: function (\Illuminate\Database\Eloquent\Builder $query, string $search) { $query->whereHas('customer', fn ($q) => $q ->where('first_name', 'like', "%{$search}%") ->orWhere('last_name', 'like', "%{$search}%") ->orWhere('email', 'like', "%{$search}%") ); }), TextColumn::make('amount') ->label('Amount') ->money('gbp', divideBy: 100) ->sortable() ->weight('bold'), TextColumn::make('donationType.display_name') ->label('Cause') ->badge() ->color('success') ->limit(20), TextColumn::make('appeal.name') ->label('Fundraiser') ->limit(20) ->placeholder('Direct donation'), TextColumn::make('created_at') ->label('When') ->since() ->sortable(), ]) ->actions([ Action::make('view_donor') ->label('View Donor') ->icon('heroicon-o-user') ->url(fn (Donation $d) => $d->customer_id ? CustomerResource::getUrl('edit', ['record' => $d->customer_id]) : null) ->visible(fn (Donation $d) => (bool) $d->customer_id), ]) ->paginated([5, 10]) ->defaultSort('created_at', 'desc'); } }