🌍 Add dynamic country parameter to settings routes and enhance data relationships

- Updated settings route links to include `country` parameter dynamically resolved from session.
- Improved relational queries by adding `city.country` to meetups map and `coursesEvents.course` to lecturers data.
This commit is contained in:
HolgerHatGarKeineNode
2025-11-23 20:50:59 +01:00
parent 6f7ee806ae
commit 572dbf1f31
6 changed files with 15 additions and 15 deletions

View File

@@ -78,7 +78,7 @@
<flux:menu.separator/> <flux:menu.separator/>
<flux:menu.radio.group> <flux:menu.radio.group>
<flux:menu.item :href="route_with_country('settings.profile')" icon="cog" <flux:menu.item :href="route('settings.profile', ['country' => str(session('lang_country', 'de'))->after('-')->lower()])" icon="cog"
wire:navigate>{{ __('Settings') }}</flux:menu.item> wire:navigate>{{ __('Settings') }}</flux:menu.item>
</flux:menu.radio.group> </flux:menu.radio.group>

View File

@@ -69,7 +69,7 @@
<flux:spacer/> <flux:spacer/>
<flux:navlist variant="outline"> <flux:navlist variant="outline">
<flux:navlist.item icon="language" :href="route('settings.profile')" <flux:navlist.item icon="language" :href="route('settings.profile', ['country' => str(session('lang_country', 'de'))->after('-')->lower()])"
:current="request()->routeIs('settings.profile')" :current="request()->routeIs('settings.profile')"
wire:navigate> wire:navigate>
{{ __('Sprache wechseln') }} {{ __('Sprache wechseln') }}
@@ -128,7 +128,7 @@
<flux:menu.separator/> <flux:menu.separator/>
<flux:menu.radio.group> <flux:menu.radio.group>
<flux:menu.item :href="route('settings.profile')" icon="cog" <flux:menu.item :href="route('settings.profile', ['country' => str(session('lang_country', 'de'))->after('-')->lower()])" icon="cog"
wire:navigate>{{ __('Settings') }}</flux:menu.item> wire:navigate>{{ __('Settings') }}</flux:menu.item>
</flux:menu.radio.group> </flux:menu.radio.group>
@@ -189,7 +189,7 @@
<flux:menu.separator/> <flux:menu.separator/>
<flux:menu.radio.group> <flux:menu.radio.group>
<flux:menu.item :href="route('settings.profile')" icon="cog" <flux:menu.item :href="route('settings.profile', ['country' => str(session('lang_country', 'de'))->after('-')->lower()])" icon="cog"
wire:navigate>{{ __('Settings') }}</flux:menu.item> wire:navigate>{{ __('Settings') }}</flux:menu.item>
</flux:menu.radio.group> </flux:menu.radio.group>

View File

@@ -1,9 +1,9 @@
<div class="flex items-start max-md:flex-col"> <div class="flex items-start max-md:flex-col">
<div class="me-10 w-full pb-4 md:w-[220px]"> <div class="me-10 w-full pb-4 md:w-[220px]">
<flux:navlist> <flux:navlist>
<flux:navlist.item :href="route('settings.profile')" wire:navigate>{{ __('Profile') }}</flux:navlist.item> <flux:navlist.item :href="route('settings.profile', ['country' => str(session('lang_country', 'de'))->after('-')->lower()])" wire:navigate>{{ __('Profile') }}</flux:navlist.item>
{{--<flux:navlist.item :href="route('settings.password')" wire:navigate>{{ __('Password') }}</flux:navlist.item>--}} {{--<flux:navlist.item :href="route('settings.password')" wire:navigate>{{ __('Password') }}</flux:navlist.item>--}}
<flux:navlist.item :href="route('settings.appearance')" wire:navigate>{{ __('Appearance') }}</flux:navlist.item> <flux:navlist.item :href="route('settings.appearance', ['country' => str(session('lang_country', 'de'))->after('-')->lower()])" wire:navigate>{{ __('Appearance') }}</flux:navlist.item>
</flux:navlist> </flux:navlist>
</div> </div>

View File

@@ -23,14 +23,17 @@ class extends Component {
public function with(): array public function with(): array
{ {
return [ return [
'lecturers' => Lecturer::with([ 'lecturers' => Lecturer::query()
'createdBy', 'coursesEvents' => fn($query) => $query->where('from', '>=', now())->orderBy('from', 'asc') ->with([
'createdBy',
'coursesEvents' => fn($query) => $query->where('from', '>=', now())->orderBy('from', 'asc'),
'coursesEvents.course',
]) ])
->withExists([ ->withExists([
'coursesEvents as has_future_events' => fn($query) => $query->where('from', '>=', now()) 'coursesEvents as has_future_events' => fn($query) => $query->where('from', '>=', now()),
]) ])
->withCount([ ->withCount([
'coursesEvents as future_events_count' => fn($query) => $query->where('from', '>=', now()) 'coursesEvents as future_events_count' => fn($query) => $query->where('from', '>=', now()),
]) ])
->when($this->search, fn($query) ->when($this->search, fn($query)
=> $query => $query

View File

@@ -44,7 +44,7 @@ class extends Component {
'meetups.simplex', 'meetups.simplex',
'meetups.signal', 'meetups.signal',
]) ])
->with(['city:id,country_id,longitude,latitude']) ->with(['city:id,country_id,longitude,latitude', 'city.country'])
->get() ->get()
->map(function ($meetup) { ->map(function ($meetup) {
$meetup->load(['meetupEvents' => function($query) { $meetup->load(['meetupEvents' => function($query) {

View File

@@ -107,10 +107,7 @@ Route::middleware(['auth'])
Volt::route('venue-create', 'venues.create')->name('venues.create'); Volt::route('venue-create', 'venues.create')->name('venues.create');
Volt::route('venue-edit/{venue}', 'venues.edit')->name('venues.edit'); Volt::route('venue-edit/{venue}', 'venues.edit')->name('venues.edit');
});
Route::middleware(['auth'])
->group(function () {
Route::redirect('settings', 'settings/profile'); Route::redirect('settings', 'settings/profile');
Volt::route('settings/profile', 'settings.profile')->name('settings.profile'); Volt::route('settings/profile', 'settings.profile')->name('settings.profile');