diff --git a/app/Filament/Pages/Reserve.php b/app/Filament/Pages/Reserve.php index 93d4e79..d67dbcc 100644 --- a/app/Filament/Pages/Reserve.php +++ b/app/Filament/Pages/Reserve.php @@ -49,7 +49,9 @@ class Reserve extends BasePage implements HasTable public static function table(Table $table): Table { return $table - ->query( Item::where('can_be_loaned', true)->where('type', "game")) + ->query( Item::where('can_be_loaned', true)->whereIn('type', ["game", "literature"])) + ->emptyStateHeading('Inga resultat') + ->searchable(true) ->columns([ Grid::make() ->columns(1) @@ -93,7 +95,9 @@ class Reserve extends BasePage implements HasTable ->default('Ingen uppgift') ->prefix('Ålder: ') //->suffix(' år'), - ])->extraAttributes(['class' => 'space-y-3 h-full']) + ]) + ->extraAttributes(['class' => 'space-y-3 h-full']) + ->hidden(fn ($record) => $record->type === 'literature'), ])->extraAttributes(['class' => 'space-y-3 h-full']) ]) @@ -113,11 +117,43 @@ class Reserve extends BasePage implements HasTable 'xl' => 4, ]) ->filters([ - SelectFilter::make('category_id') - ->multiple() - ->preload() - ->label('Kategori') - ->options(Category::all()->where('type', 'game')->pluck('name', 'id')), + Filter::make('filters') + ->form([ + Select::make('type') + ->label('Typ') + ->live() + ->options([ + 'game' => __('Game'), + 'literature' => __('Literature') + ]), + Select::make('category_id') + ->multiple() + ->label('Kategorier Litteratur') + ->options(Category::all()->whereIn('type', 'literature')->pluck('name', 'id')) + + ->hidden(fn ($get): string => $get('type') == 'game' || $get('type') == ''), + Select::make('category_id') + ->multiple() + ->label('Kategorier Spel') + ->options(Category::all()->whereIn('type', 'game')->pluck('name', 'id')) + ->hidden(fn ($get): string => $get('type') == 'literature' || $get('type') == ''), + ]) + ->query(function (Builder $query, array $data): Builder { + return $query + ->when( + $data['type'], + fn (Builder $query, $type): Builder => $query->where('type', $type), + ) + ->when( + $data['category_id'], + fn (Builder $query, $category_id): Builder => $query->whereIn('category_id', $category_id), + ); + }) + ->columns([ + 'deafult' => 1, + 'md' => 2, + ]) + ->columnSpan(2), Filter::make('reserved') ->label('Tillgänglig') ->query(fn (Builder $query): Builder => $query->where('reserved', false)) @@ -166,34 +202,54 @@ class Reserve extends BasePage implements HasTable ->send(); }) ->hidden(fn ($record) => $record->reserved), - Action::make('Mer info') - ->modalSubmitAction(false) - ->button() - ->color('primary') + Action::make('More info') + ->translateLabel() + ->modalSubmitAction(false) ->infolist([ - Section::make('Spel') + Section::make('') ->schema([ - ImageEntry::make('image') - ->label('Bild') + ImageEntry::make('image') + ->translateLabel() ->width(300) ->height('auto'), //->disk('local') //->visibility('private'), TextEntry::make('desc') - ->label('Beskrivning'), + ->label('Description') + ->translateLabel(), TextEntry::make('acquisition_date') - ->label('Inköpsdatum'), + ->translateLabel(), TextEntry::make('category.name') - ->label('Kategori'), + ->translateLabel(), TextEntry::make('players') - ->label('Antal spelare'), + ->translateLabel(), TextEntry::make('play_time') - ->label('Speltid'), + ->translateLabel(), TextEntry::make('age') - ->label('Ålder'), + ->translateLabel(), + TextEntry::make('cost') + ->translateLabel(), ]) - ->columns(), - ]), + ->columns() + ->hidden(fn ($record) => $record->type === 'literature'), + Section::make('') + ->translateLabel() + ->schema([ + ImageEntry::make('image') + ->translateLabel(), + TextEntry::make('desc') + ->label('Description') + ->translateLabel(), + TextEntry::make('acquisition_date') + ->translateLabel(), + TextEntry::make('category.name') + ->translateLabel(), + TextEntry::make('cost') + ->translateLabel(), + ]) + ->columns() + ->hidden(fn ($record) => $record->type === "game"), + ]), ]) ->bulkActions([ ]); diff --git a/app/Filament/Resources/CategoryResource.php b/app/Filament/Resources/CategoryResource.php index cfba2e1..54016be 100644 --- a/app/Filament/Resources/CategoryResource.php +++ b/app/Filament/Resources/CategoryResource.php @@ -50,8 +50,9 @@ class CategoryResource extends Resource ->translateLabel() ->required() ->options([ - 'game' => 'Game', - 'item' => 'Item', + 'game' => __('Game'), + 'literature' => __('Literature'), + 'item' => __('Item') ]), ]); } diff --git a/app/Filament/Resources/ItemResource.php b/app/Filament/Resources/ItemResource.php index 4714166..61b111e 100644 --- a/app/Filament/Resources/ItemResource.php +++ b/app/Filament/Resources/ItemResource.php @@ -70,6 +70,7 @@ class ItemResource extends Resource ->options([ 'game' => __('Game'), 'item' => __('Item'), + 'literature' => __('Literature') ]) ->default('game') ->live(), @@ -96,7 +97,7 @@ class ItemResource extends Resource ->minValue(0) ->maxValue(1000) ->default(0) - ->hidden(fn ($get): string => $get('type') == 'game'), + ->hidden(fn ($get): string => $get('type') == 'game' || $get('type') == 'literature' ), Select::make('category_id') ->label('Category') ->translateLabel() @@ -110,23 +111,23 @@ class ItemResource extends Resource ->translateLabel() ->maxLength(255) ->default(null) - ->hidden(fn ($get): string => $get('type') == 'item'), + ->hidden(fn ($get): string => $get('type') == 'item' || $get('type') == 'literature' ), TextInput::make('players') ->label('Players') ->translateLabel() ->maxLength(255) ->default(null) - ->hidden(fn ($get): string => $get('type') == 'item'), + ->hidden(fn ($get): string => $get('type') == 'item' || $get('type') == 'literature' ), TextInput::make('play_time') ->label('Play time') ->translateLabel() ->maxLength(255) ->default(null) - ->hidden(fn ($get): string => $get('type') == 'item'), + ->hidden(fn ($get): string => $get('type') == 'item'|| $get('type') == 'literature' ), Toggle::make('can_be_loaned') ->label('Loanable') ->translateLabel() - ->hidden(fn ($get): string => $get('type') == 'game'), + ->hidden(fn ($get): string => $get('type') == 'game' || $get('type') == 'literature' ), ]); } @@ -170,20 +171,52 @@ class ItemResource extends Resource ->default(false), ]) ->filters([ - SelectFilter::make('type') - ->translateLabel() - ->multiple() - ->options([ - 'game' => __('Game'), - 'item' => __('Item'), - ]), - SelectFilter::make('category_id') - ->label('Category') - ->translateLabel() - ->multiple() - ->options( - Category::all()->pluck('name', 'id'), - ), + Filter::make('filters') + ->form([ + Select::make('type') + ->label('Type') + ->live() + ->translateLabel() + ->options([ + 'game' => __('Game'), + 'literature' => __('Literature'), + 'item' => __('Item') + ]), + Select::make('category_id') + ->multiple() + ->translateLabel() + ->label('Category literature') + ->options(Category::all()->whereIn('type', 'literature')->pluck('name', 'id')) + ->hidden(fn ($get): string => $get('type') == 'game' || $get('type') == 'item'|| $get('type') == ''), + Select::make('category_id') + ->multiple() + ->translateLabel() + ->label('Category games') + ->options(Category::all()->whereIn('type', 'game')->pluck('name', 'id')) + ->hidden(fn ($get): string => $get('type') == 'literature' || $get('type') == 'item'|| $get('type') == ''), + Select::make('category_id') + ->multiple() + ->translateLabel() + ->label('Category items') + ->options(Category::all()->whereIn('type', 'item')->pluck('name', 'id')) + ->hidden(fn ($get): string => $get('type') == 'literature' || $get('type') == 'game'|| $get('type') == ''), + ]) + ->query(function (Builder $query, array $data): Builder { + return $query + ->when( + $data['type'], + fn (Builder $query, $type): Builder => $query->where('type', $type), + ) + ->when( + $data['category_id'], + fn (Builder $query, $category_id): Builder => $query->whereIn('category_id', $category_id), + ); + }) + ->columns([ + 'deafult' => 1, + 'md' => 2, + ]) + ->columnSpan(2), Filter::make('reserved') ->label('Available') ->translateLabel() @@ -207,9 +240,9 @@ class ItemResource extends Resource ImageEntry::make('image') ->translateLabel() ->width(300) - ->height('auto') - ->disk('local') - ->visibility('private'), + ->height('auto'), + //->disk('local') + //->visibility('private'), TextEntry::make('desc') ->label('Description') ->translateLabel(), @@ -227,7 +260,7 @@ class ItemResource extends Resource ->translateLabel(), ]) ->columns() - ->hidden(fn ($record) => $record->type === "item"), + ->hidden(fn ($record) => $record->type === "item" || $record->type === 'literature'), Section::make('') ->translateLabel() ->schema([ @@ -246,8 +279,25 @@ class ItemResource extends Resource ->translateLabel(), ]) ->columns() - ->hidden(fn ($record) => $record->type === "game"), - ]), + ->hidden(fn ($record) => $record->type === "game" || $record->type === 'literature'), + Section::make('') + ->translateLabel() + ->schema([ + ImageEntry::make('image') + ->translateLabel(), + TextEntry::make('desc') + ->label('Description') + ->translateLabel(), + TextEntry::make('acquisition_date') + ->translateLabel(), + TextEntry::make('category.name') + ->translateLabel(), + TextEntry::make('cost') + ->translateLabel(), + ]) + ->columns() + ->hidden(fn ($record) => $record->type === "game" || $record->type === 'item'), + ]), Tables\Actions\EditAction::make() ->button() diff --git a/app/Filament/Resources/ItemResource/Pages/CreateItem.php b/app/Filament/Resources/ItemResource/Pages/CreateItem.php index 1b7d9ee..770fc05 100644 --- a/app/Filament/Resources/ItemResource/Pages/CreateItem.php +++ b/app/Filament/Resources/ItemResource/Pages/CreateItem.php @@ -19,7 +19,7 @@ class CreateItem extends CreateRecord protected function handleRecordCreation(array $data): Model { - if ($data['type'] == "game") + if ($data['type'] == "game" || $data['type'] == "literature") { $data['can_be_loaned'] = true; } diff --git a/lang/vendor/filament-panels/sv.json b/lang/vendor/filament-panels/sv.json index edf89b1..2c2a052 100644 --- a/lang/vendor/filament-panels/sv.json +++ b/lang/vendor/filament-panels/sv.json @@ -36,5 +36,9 @@ "Total number of games": "Totalt antal spel i lager", "Total number of items": "Totalt antal saker i lager", "Reserved games and items": "Reserverade spel och saker", - "Phone": "Telefonnummer" + "Phone": "Telefonnummer", + "Literature": "Litteratur", + "Category literature": "Kategori litteratur", + "Category games": "Kategori spel", + "Category items": "Kategori saker" } \ No newline at end of file