diff --git a/app/Http/Controllers/Api/CountryController.php b/app/Http/Controllers/Api/CountryController.php new file mode 100644 index 00000000..441598c0 --- /dev/null +++ b/app/Http/Controllers/Api/CountryController.php @@ -0,0 +1,85 @@ +select('id', 'name', 'code') + ->orderBy('name') + ->when( + $request->search, + fn (Builder $query) => $query + ->where('name', 'ilike', "%{$request->search}%") + ->orWhere('code', 'ilike', "%{$request->search}%") + ) + ->when( + $request->exists('selected'), + fn (Builder $query) => $query->whereIn('code', $request->input('selected', [])), + fn (Builder $query) => $query->limit(10) + ) + ->get() + ->map(function (Country $country) { + $country->flag = asset('vendor/blade-country-flags/4x3-'.$country->code.'.svg'); + + return $country; + }); + } + + /** + * Store a newly created resource in storage. + * + * @param \Illuminate\Http\Request $request + * @return \Illuminate\Http\Response + */ + public function store(Request $request) + { + // + } + + /** + * Display the specified resource. + * + * @param \App\Models\Country $country + * @return \Illuminate\Http\Response + */ + public function show(Country $country) + { + // + } + + /** + * Update the specified resource in storage. + * + * @param \Illuminate\Http\Request $request + * @param \App\Models\Country $country + * @return \Illuminate\Http\Response + */ + public function update(Request $request, Country $country) + { + // + } + + /** + * Remove the specified resource from storage. + * + * @param \App\Models\Country $country + * @return \Illuminate\Http\Response + */ + public function destroy(Country $country) + { + // + } +} diff --git a/resources/views/livewire/frontend/header.blade.php b/resources/views/livewire/frontend/header.blade.php index 818c0218..25fb1e83 100644 --- a/resources/views/livewire/frontend/header.blade.php +++ b/resources/views/livewire/frontend/header.blade.php @@ -89,13 +89,15 @@ placeholder="Land wechseln" wire:model="c" :clearable="false" - > - @foreach($countries as $country) - - @endforeach - + :searchable="true" + :async-data="route('api.countries.index')" + option-label="name" + option-value="code" + :template="[ + 'name' => 'user-option', + 'config' => ['src' => 'flag'] + ]" + /> @auth
diff --git a/resources/views/livewire/frontend/welcome.blade.php b/resources/views/livewire/frontend/welcome.blade.php index c932dabc..47011ccd 100644 --- a/resources/views/livewire/frontend/welcome.blade.php +++ b/resources/views/livewire/frontend/welcome.blade.php @@ -17,13 +17,15 @@ placeholder="Land wechseln" wire:model="c" :clearable="false" - > - @foreach($countries as $country) - - @endforeach - + :searchable="true" + :async-data="route('api.countries.index')" + option-label="name" + option-value="code" + :template="[ + 'name' => 'user-option', + 'config' => ['src' => 'flag'] + ]" + />
diff --git a/routes/api.php b/routes/api.php index 8c3a87e9..64d6c49e 100644 --- a/routes/api.php +++ b/routes/api.php @@ -23,6 +23,12 @@ Route::middleware('auth:sanctum') return $request->user(); }); +Route::middleware([]) + ->as('api.') + ->group(function () { + Route::resource('countries', \App\Http\Controllers\Api\CountryController::class); + }); + Route::get('/lnurl-auth-callback', function (\Illuminate\Http\Request $request) { if (lnurl\auth($request->k1, $request->sig, $request->key)) { // find User by $wallet_public_key