Fix with translations and favicon

This commit is contained in:
Anna-Sara Sélea 2026-08-19 07:38:46 +02:00
parent 8f3986c8c2
commit 9d0852560d
17 changed files with 117 additions and 28 deletions

View file

@ -51,14 +51,17 @@ class Reserve extends BasePage implements HasTable
protected string $view = 'filament.pages.reserve'; protected string $view = 'filament.pages.reserve';
protected static ?string $title = 'Reservera spel'; public function getTitle(): string
{
return __('Reserve games');
}
public static function table(Table $table): Table public static function table(Table $table): Table
{ {
return $table return $table
->query( Item::where('can_be_loaned', true)->whereIn('type', ["game", "literature"])) ->query( Item::where('can_be_loaned', true)->whereIn('type', ["game", "literature"]))
->emptyStateHeading('Inga resultat') ->emptyStateHeading(__('No results'))
->searchable(true) ->searchable(true)
->columns([ ->columns([
Grid::make() Grid::make()
@ -67,11 +70,11 @@ class Reserve extends BasePage implements HasTable
Stack::make([ Stack::make([
TextColumn::make('reserved') TextColumn::make('reserved')
->weight(FontWeight::Bold) ->weight(FontWeight::Bold)
->formatStateUsing(fn (string $state): string => $state ? 'Utlånad' : 'Tillgänglig') ->formatStateUsing(fn (string $state): string => $state ? __('On loan') : __('Available'))
->color(fn($record) => $record->reserved ? 'danger' : 'success' ) ->color(fn($record) => $record->reserved ? 'danger' : 'success' )
->badge(), ->badge(),
ImageColumn::make('image') ImageColumn::make('image')
->label('Bild') ->label(__('Image'))
->disk('public') ->disk('public')
->size('100%') ->size('100%')
->extraImgAttributes([ ->extraImgAttributes([
@ -80,29 +83,29 @@ class Reserve extends BasePage implements HasTable
]), ]),
//->visibility('private'), //->visibility('private'),
TextColumn::make('desc') TextColumn::make('desc')
->label('Beskrivning') ->label(__('Description'))
->sortable() ->sortable()
->searchable() ->searchable()
->weight(FontWeight::Bold) ->weight(FontWeight::Bold)
->size(TextSize::Large), ->size(TextSize::Large),
Stack::make([ Stack::make([
TextColumn::make('players') TextColumn::make('players')
->label('Antal spelare') ->label(__('Players'))
->default('Ingen uppgift') ->default(__('No information'))
->sortable() ->sortable()
->prefix('Spelare: '), ->prefix(__('Players') . ': '),
//->suffix(' st'), //->suffix(' st'),
TextColumn::make('play_time') TextColumn::make('play_time')
->label('Speltid') ->label(__('Play time'))
->sortable() ->sortable()
->default('Ingen uppgift') ->default(__('No information'))
->prefix('Speltid (min): '), ->prefix(__('Play time (min)') . ': '),
//->suffix(' min'), //->suffix(' min'),
TextColumn::make('age') TextColumn::make('age')
->label('Ålder') ->label(__('Age'))
->sortable() ->sortable()
->default('Ingen uppgift') ->default(__('No information'))
->prefix('Ålder: ') ->prefix(__('Age') . ': ')
//->suffix(' år'), //->suffix(' år'),
]) ])
->extraAttributes(['class' => 'reserve-card-meta']) ->extraAttributes(['class' => 'reserve-card-meta'])
@ -129,7 +132,7 @@ class Reserve extends BasePage implements HasTable
Filter::make('filters') Filter::make('filters')
->form([ ->form([
Select::make('type') Select::make('type')
->label('Typ') ->label(__('Type'))
->live() ->live()
->options([ ->options([
'game' => __('Game'), 'game' => __('Game'),
@ -137,13 +140,13 @@ class Reserve extends BasePage implements HasTable
]), ]),
Select::make('category_id') Select::make('category_id')
->multiple() ->multiple()
->label('Kategorier Litteratur') ->label(__('Category literature'))
->options(Category::all()->whereIn('type', 'literature')->pluck('name', 'id')) ->options(Category::all()->whereIn('type', 'literature')->pluck('name', 'id'))
->hidden(fn ($get): string => $get('type') == 'game' || $get('type') == ''), ->hidden(fn ($get): string => $get('type') == 'game' || $get('type') == ''),
Select::make('category_id') Select::make('category_id')
->multiple() ->multiple()
->label('Kategorier Spel') ->label(__('Category games'))
->options(Category::all()->whereIn('type', 'game')->pluck('name', 'id')) ->options(Category::all()->whereIn('type', 'game')->pluck('name', 'id'))
->hidden(fn ($get): string => $get('type') == 'literature' || $get('type') == ''), ->hidden(fn ($get): string => $get('type') == 'literature' || $get('type') == ''),
]) ])
@ -164,30 +167,30 @@ class Reserve extends BasePage implements HasTable
]) ])
->columnSpan(2), ->columnSpan(2),
Filter::make('reserved') Filter::make('reserved')
->label('Tillgänglig') ->label(__('Available'))
->query(fn (Builder $query): Builder => $query->where('reserved', false)) ->query(fn (Builder $query): Builder => $query->where('reserved', false))
->columnSpanFull() ->columnSpanFull()
->toggle() ->toggle()
],layout: FiltersLayout::AboveContent) ],layout: FiltersLayout::AboveContent)
->actions([ ->actions([
Action::make('reserve') Action::make('reserve')
->label('Reservera') ->label(__('Reserve'))
->button() ->button()
->color('primary') ->color('primary')
->form([ ->form([
TextInput::make('username') TextInput::make('username')
->label('Namn') ->label(__('Name'))
->required(), ->required(),
TextInput::make('email') TextInput::make('email')
->label('Email') ->label(__('Email'))
->email() ->email()
->required(), ->required(),
TextInput::make('phone') TextInput::make('phone')
->label('Telefonnummer') ->label(__('Phone'))
->tel() ->tel()
->required(), ->required(),
Checkbox::make('gdpr') Checkbox::make('gdpr')
->label('Genom att checka i denna rutan godkänner du att vi lagrar din mailadress och telefonnummer.') ->label(__('By checking this box you agree that we store your email address and phone number.'))
->accepted(), ->accepted(),
]) ])
->action(function (array $data, Item $record): void { ->action(function (array $data, Item $record): void {
@ -204,8 +207,8 @@ class Reserve extends BasePage implements HasTable
Mail::to(env('MAIL_TO_ADDRESS')) Mail::to(env('MAIL_TO_ADDRESS'))
->send(new ReservationCreated($reservation)); ->send(new ReservationCreated($reservation));
Notification::make() Notification::make()
->title('Spelet är reserverat!') ->title(__('The game is reserved!'))
->body('Ett bekräftelsemail har skickats till emailadressen du uppgav. Läs det för mer info om utlämning av spelet.') ->body(__('A confirmation email has been sent to the address you provided. Read it for more information about collecting the game.'))
->success() ->success()
->seconds(10) ->seconds(10)
->send(); ->send();

View file

@ -341,7 +341,7 @@ class ItemResource extends Resource
->tel() ->tel()
->required(), ->required(),
Checkbox::make('gdpr') Checkbox::make('gdpr')
->label('Genom att checka i denna rutan godkänner du att vi lagrar din mailadress och telefonnummer.') ->label(__('By checking this box you agree that we store your email address and phone number.'))
->accepted(), ->accepted(),
]) ])
->action(function (array $data, Item $record): void { ->action(function (array $data, Item $record): void {

View file

@ -66,11 +66,13 @@ class ReserveditemResource extends Resource
->required(), ->required(),
TextInput::make('email') TextInput::make('email')
->label('Email') ->label('Email')
->translateLabel()
->default(null) ->default(null)
->email() ->email()
->required(), ->required(),
TextInput::make('phone') TextInput::make('phone')
->label('Phone') ->label('Phone')
->translateLabel()
->default(null) ->default(null)
->tel() ->tel()
->required(), ->required(),
@ -104,10 +106,12 @@ class ReserveditemResource extends Resource
->icon('heroicon-m-user'), ->icon('heroicon-m-user'),
TextColumn::make('email') TextColumn::make('email')
->label('Email') ->label('Email')
->translateLabel()
->sortable() ->sortable()
->icon('heroicon-m-envelope'), ->icon('heroicon-m-envelope'),
TextColumn::make('phone') TextColumn::make('phone')
->label('Phone') ->label('Phone')
->translateLabel()
->sortable() ->sortable()
->icon('heroicon-m-phone'), ->icon('heroicon-m-phone'),
TextColumn::make('reserved_date') TextColumn::make('reserved_date')

View file

@ -41,6 +41,7 @@ class ReserveditemResourceUser extends Resource
->schema([ ->schema([
Select::make('item_id') Select::make('item_id')
->label('Choose an item to reserve') ->label('Choose an item to reserve')
->translateLabel()
->relationship( ->relationship(
name: 'item', name: 'item',
titleAttribute: 'desc', titleAttribute: 'desc',
@ -62,21 +63,27 @@ class ReserveditemResourceUser extends Resource
->columns([ ->columns([
TextColumn::make('items.desc') TextColumn::make('items.desc')
->label('Name') ->label('Name')
->translateLabel()
->sortable(), ->sortable(),
TextColumn::make('username') TextColumn::make('username')
->label('User') ->label('User')
->translateLabel()
->sortable(), ->sortable(),
TextColumn::make('reserved_date') TextColumn::make('reserved_date')
->label('Reserved date') ->label('Reserved date')
->translateLabel()
->sortable(), ->sortable(),
TextColumn::make('delivered_date') TextColumn::make('delivered_date')
->label('Delivery date') ->label('Delivery date')
->translateLabel()
->sortable(), ->sortable(),
TextColumn::make('return_date') TextColumn::make('return_date')
->label('Return date') ->label('Return date')
->translateLabel()
->sortable(), ->sortable(),
TextColumn::make('returned_date') TextColumn::make('returned_date')
->label('Returned') ->label('Returned')
->translateLabel()
->sortable(), ->sortable(),
]) ])
->filters([ ->filters([

View file

@ -27,6 +27,7 @@ class AdminPanelProvider extends PanelProvider
->id('admin') ->id('admin')
->path('/') ->path('/')
->login() ->login()
->favicon(asset('img/favicon-32.png') . '?v=2')
->colors([ ->colors([
'primary' => Color::hex('#0080bb'), 'primary' => Color::hex('#0080bb'),
]) ])

View file

@ -29,7 +29,10 @@ class PublicPanelProvider extends PanelProvider
->brandName('vBytes') ->brandName('vBytes')
->brandLogo(asset('img/logo.png')) ->brandLogo(asset('img/logo.png'))
->brandLogoHeight('2rem') ->brandLogoHeight('2rem')
// ?v= tvingar webbläsare att hämta om ikonen; höj siffran vid byte
->favicon(asset('img/favicon-32.png') . '?v=2')
->topNavigation() ->topNavigation()
->navigation(false)
->darkMode(true) ->darkMode(true)
->renderHook( ->renderHook(
PanelsRenderHook::TOPBAR_END, PanelsRenderHook::TOPBAR_END,

66
lang/sv.json Normal file
View file

@ -0,0 +1,66 @@
{
"A confirmation email has been sent to the address you provided. Read it for more information about collecting the game.": "Ett bekräftelsemail har skickats till emailadressen du uppgav. Läs det för mer info om utlämning av spelet.",
"Acquisition date": "Inköpsdatum",
"Age": "Ålder",
"Available": "Tillgänglig",
"By checking this box you agree that we store your email address and phone number.": "Genom att checka i denna rutan godkänner du att vi lagrar din mailadress och telefonnummer.",
"Can be loaned": "Kan lånas",
"Categories": "Kategorier",
"Category": "Kategori",
"Category games": "Kategorier Spel",
"Category id": "Kategori",
"Category items": "Kategorier Prylar",
"Category literature": "Kategorier Litteratur",
"Choose an item to reserve": "Välj en post att reservera",
"Cost": "Pris",
"Create new": "Skapa ny",
"Delivered": "Utlämnad",
"Delivered date": "Utlämningsdatum",
"Delivery date": "Utlämningsdatum",
"Desc": "Beskrivning",
"Description": "Beskrivning",
"Email": "Email",
"Game": "Spel",
"Image": "Bild",
"Inventory": "Inventarie",
"Is admin": "Administratör",
"Item": "Pryl",
"Item id": "Post",
"Literature": "Litteratur",
"Loanable": "Kan lånas",
"More info": "Mer info",
"Most reserved game": "Mest reserverade spel",
"Name": "Namn",
"No information": "Ingen uppgift",
"No results": "Inga resultat",
"On loan": "Utlånad",
"Password": "Lösenord",
"Phone": "Telefonnummer",
"Play time": "Speltid",
"Play time (min)": "Speltid (min)",
"Players": "Spelare",
"Price": "Pris",
"Quantity": "Antal",
"Reservation": "Reservation",
"Reservation date": "Reservationsdatum",
"Reservations": "Reservationer",
"Reservations at the moment": "Aktuella reservationer",
"Reservations over time": "Reservationer över tid",
"Reserve": "Reservera",
"Reserve games": "Reservera spel",
"Reserved": "Reserverad",
"Reserved date": "Reservationsdatum",
"Return date": "Återlämningsdatum",
"Returned": "Återlämnad",
"Returned date": "Återlämnad datum",
"The game is reserved!": "Spelet är reserverat!",
"Total amount of games": "Antal spel",
"Total amount of items": "Antal prylar",
"Total amount of literature": "Antal litteratur",
"Total number of users": "Antal användare",
"Type": "Typ",
"User": "Användare",
"Username": "Namn",
"Users": "Användare",
"Welcome! Here you can reserve games that you would like to borrow.": "Välkommen! Här kan du reservera spel som du gärna vill låna."
}

BIN
public/apple-touch-icon.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 30 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 49 KiB

After

Width:  |  Height:  |  Size: 15 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 30 KiB

BIN
public/img/favicon-16.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 KiB

BIN
public/img/favicon-32.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2 KiB

BIN
public/img/logo-mark.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.6 KiB

View file

@ -6,6 +6,11 @@
<title inertia>{{ config('app.name', 'Laravel') }}</title> <title inertia>{{ config('app.name', 'Laravel') }}</title>
<link rel="icon" href="{{ asset('favicon.ico') }}?v=2" sizes="any">
<link rel="icon" type="image/png" sizes="32x32" href="{{ asset('img/favicon-32.png') }}?v=2">
<link rel="icon" type="image/png" sizes="16x16" href="{{ asset('img/favicon-16.png') }}?v=2">
<link rel="apple-touch-icon" href="{{ asset('img/apple-touch-icon.png') }}?v=2">
<!-- Fonts --> <!-- Fonts -->
<link rel="preconnect" href="https://fonts.bunny.net"> <link rel="preconnect" href="https://fonts.bunny.net">
<link href="https://fonts.bunny.net/css?family=figtree:400,500,600&display=swap" rel="stylesheet" /> <link href="https://fonts.bunny.net/css?family=figtree:400,500,600&display=swap" rel="stylesheet" />

View file

@ -26,7 +26,7 @@
</style> </style>
<p class="text-sm text-gray-500 dark:text-gray-400 -mt-4"> <p class="text-sm text-gray-500 dark:text-gray-400 -mt-4">
Välkommen! Här kan du reservera spel som du gärna vill låna. {{ __('Welcome! Here you can reserve games that you would like to borrow.') }}
</p> </p>
{{ $this->table }} {{ $this->table }}