query( Item::where('can_be_loaned', true)->where('type', "game")) ->columns([ TextColumn::make('desc') ->label('Description') ->sortable() ->searchable(), ImageColumn::make('image') ->label('Image'), TextColumn::make('players') ->label('Players') ->sortable(), TextColumn::make('play_time') ->label('Play Time') ->sortable(), TextColumn::make('age') ->label('Age') ->sortable(), IconColumn::make('reserved') ->label('Available') ->falseIcon('heroicon-o-check-badge') ->trueIcon('heroicon-o-x-mark') ->falseColor('success') ->trueColor('danger') ->default(false), ]) ->filters([ SelectFilter::make('category_id') ->label('Category') ->multiple() ->options(Category::all()->where('type', 'game')->pluck('name', 'id')), Filter::make('reserved') ->label('Available') ->query(fn (Builder $query): Builder => $query->where('reserved', false)) ->columnSpanFull() ->toggle() ],layout: FiltersLayout::AboveContent) ->actions([ Action::make('More info') ->modalSubmitAction(false) ->infolist([ Section::make('Game') ->schema([ ImageEntry::make('image') ->width(300) ->height('auto'), TextEntry::make('desc'), TextEntry::make('acquisition_date'), TextEntry::make('category.name'), TextEntry::make('players'), TextEntry::make('play_time'), TextEntry::make('age'), ]) ->columns(), ]), Action::make('reserve') ->label('Reserve') ->button() ->color('success') ->form([ TextInput::make('username') ->label('Name') ->required(), TextInput::make('email') ->label('Email') ->required(), ]) ->action(function (array $data, Item $record): void { Reserveditem::create([ 'item_id' => $record->id, 'reserved_date' => Carbon::now(), 'username' => $data['username'], 'email' => $data['email'] ]); Item::where('id', $record->id)->update(['reserved' => true]); }) ->hidden(fn ($record) => $record->reserved) ]) ->bulkActions([ ]); } }