New design

This commit is contained in:
2025-12-20 17:44:35 +01:00
parent c693f7c7ed
commit bc25bb1626
12 changed files with 826 additions and 299 deletions

View File

@@ -1,60 +1,130 @@
<div class="container mx-auto py-8">
<h1 class="text-2xl font-bold mb-6">Sök person</h1>
<form wire:submit.prevent="search" class="mb-8 flex flex-col md:flex-row gap-4 items-end">
<div class="flex-1">
<label for="firstName" class="block text-sm font-medium">Förnamn</label>
<input id="firstName" type="text" wire:model.defer="firstName" class="mt-1 block w-full border rounded px-3 py-2" placeholder="Förnamn...">
<div class="min-h-screen bg-gradient-to-br from-blue-50 to-indigo-100">
<div class="container mx-auto py-12 px-4">
<!-- Header Section -->
<div class="text-center mb-12">
<div class="flex items-center justify-center mb-6">
<a wire:navigate href="{{ route('home') }}" class="text-blue-600 hover:text-blue-700 mr-4">
<svg class="w-6 h-6" fill="none" stroke="currentColor" viewBox="0 0 24 24">
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2"
d="M10 19l-7-7m0 0l7-7m-7 7h18"></path>
</svg>
</a>
<div class="w-12 h-12 bg-blue-100 rounded-lg flex items-center justify-center">
<svg class="w-6 h-6 text-blue-600" fill="none" stroke="currentColor" viewBox="0 0 24 24">
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2"
d="M16 7a4 4 0 11-8 0 4 4 0 018 0zM12 14a7 7 0 00-7 7h14a7 7 0 00-7-7z"></path>
</svg>
</div>
</div>
<h1 class="text-4xl md:text-5xl font-bold text-gray-900 mb-4">Sök Ledamöter</h1>
<p class="text-lg text-gray-600 max-w-2xl mx-auto mb-8">
Sök efter riksdagsledamöter genom namn eller parti och utforska deras rösthistorik och uppdrag
</p>
</div>
<div class="flex-1">
<label for="lastName" class="block text-sm font-medium">Efternamn</label>
<input id="lastName" type="text" wire:model.defer="lastName" class="mt-1 block w-full border rounded px-3 py-2" placeholder="Efternamn...">
<!-- Search Form -->
<div class="bg-white rounded-lg shadow-md border border-gray-200 p-6 mb-8 max-w-4xl mx-auto">
<form wire:submit.prevent="search" class="flex flex-col md:flex-row gap-4 items-end">
<div class="flex-1">
<input id="firstName" type="text" wire:model.defer="firstName"
class="w-full border border-gray-300 rounded-lg px-4 py-2 focus:ring-2 focus:ring-blue-500 focus:border-blue-500 transition-colors text-black"
placeholder="Förnamn...">
</div>
<div class="flex-1">
<input id="lastName" type="text" wire:model.defer="lastName"
class="w-full border border-gray-300 rounded-lg px-4 py-2 focus:ring-2 focus:ring-blue-500 focus:border-blue-500 transition-colors text-black"
placeholder="Efternamn...">
</div>
<div class="md:w-48">
<select id="party" wire:model.defer="party"
class="w-full border border-gray-300 rounded-lg px-4 py-2 focus:ring-2 focus:ring-blue-500 focus:border-blue-500 transition-colors text-black">
<option value="" class="text-gray-700">Alla partier</option>
@foreach ($parties as $partyOption)
<option class="text-gray-700" value="{{ $partyOption->value }}">{{ $partyOption->label() }}
</option>
@endforeach
</select>
</div>
<button type="submit"
class="bg-blue-600 hover:bg-blue-700 text-white px-8 py-2 rounded-lg font-medium transition-colors duration-200 flex items-center cursor-pointer">
<svg class="w-4 h-4 mr-2" fill="none" stroke="currentColor" viewBox="0 0 24 24">
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2"
d="M21 21l-6-6m2-5a7 7 0 11-14 0 7 7 0 0114 0z"></path>
</svg>
Sök
</button>
</form>
</div>
<div>
<label for="party" class="block text-sm font-medium">Parti</label>
<select id="party" wire:model.defer="party" class="mt-1 block w-full border rounded px-3 py-2">
<option value="" class="text-black">Alla partier</option>
@foreach($parties as $partyOption)
<option class="text-black" value="{{ $partyOption->value }}">{{ $partyOption->label() }}</option>
@endforeach
</select>
</div>
<button type="submit" class="bg-blue-600 text-white px-6 py-2 rounded">Sök</button>
</form>
<div class="text-center" wire:loading>
<div role="status">
<svg aria-hidden="true" class="w-8 h-8 text-neutral-tertiary animate-spin fill-brand" viewBox="0 0 100 101" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M100 50.5908C100 78.2051 77.6142 100.591 50 100.591C22.3858 100.591 0 78.2051 0 50.5908C0 22.9766 22.3858 0.59082 50 0.59082C77.6142 0.59082 100 22.9766 100 50.5908ZM9.08144 50.5908C9.08144 73.1895 27.4013 91.5094 50 91.5094C72.5987 91.5094 90.9186 73.1895 90.9186 50.5908C90.9186 27.9921 72.5987 9.67226 50 9.67226C27.4013 9.67226 9.08144 27.9921 9.08144 50.5908Z" fill="currentColor"/>
<path d="M93.9676 39.0409C96.393 38.4038 97.8624 35.9116 97.0079 33.5539C95.2932 28.8227 92.871 24.3692 89.8167 20.348C85.8452 15.1192 80.8826 10.7238 75.2124 7.41289C69.5422 4.10194 63.2754 1.94025 56.7698 1.05124C51.7666 0.367541 46.6976 0.446843 41.7345 1.27873C39.2613 1.69328 37.813 4.19778 38.4501 6.62326C39.0873 9.04874 41.5694 10.4717 44.0505 10.1071C47.8511 9.54855 51.7191 9.52689 55.5402 10.0491C60.8642 10.7766 65.9928 12.5457 70.6331 15.2552C75.2735 17.9648 79.3347 21.5619 82.5849 25.841C84.9175 28.9121 86.7997 32.2913 88.1811 35.8758C89.083 38.2158 91.5421 39.6781 93.9676 39.0409Z" fill="currentFill"/>
</svg>
<span class="sr-only">Loading...</span>
</div>
<!-- Loading State -->
<div class="hidden" wire:loading.block wire:target="search">
<div class="flex justify-center items-center py-16">
<div class="w-12 h-12 border-4 border-t-blue-600 border-blue-200 rounded-full animate-spin"></div>
<span class="ml-4 text-gray-600 font-medium">Söker ledamöter...</span>
</div>
</div>
<!-- Results Section -->
<div wire:loading.remove>
@if ($results && isset($results->personlista->person))
<div class="bg-white rounded-lg shadow-md border border-gray-200 p-6 max-w-4xl mx-auto">
<div class="flex items-center mb-6">
<svg class="w-5 h-5 text-green-600 mr-2" fill="none" stroke="currentColor"
viewBox="0 0 24 24">
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2"
d="M9 12l2 2 4-4m6 2a9 9 0 11-18 0 9 9 0 0118 0z"></path>
</svg>
<h2 class="text-xl font-semibold text-gray-900">Sökresultat</h2>
</div>
<div class="space-y-4">
@php
$persons = $results->personlista->person;
if (
!is_array($persons) ||
(isset($persons->intressent_id) && is_string($persons->intressent_id))
) {
$persons = [$persons];
}
@endphp
@foreach ($persons as $person)
<div
class="bg-gray-50 rounded-lg p-4 hover:bg-gray-100 transition-colors border border-gray-200">
<div class="flex items-center">
<img src="{{ $person->bild_url_80 ?? '' }}" alt="{{ $person->tilltalsnamn }}"
class="w-16 h-16 rounded-lg object-cover mr-4 border border-gray-300">
<div class="flex-1">
<a wire:navigate href="{{ route('person.show', $person->intressent_id) }}"
class="text-xl font-bold text-blue-600 hover:text-blue-700 transition-colors">
{{ $person->tilltalsnamn }} {{ $person->efternamn }} ({{ $person->parti }})
</a>
<div class="text-gray-600 mt-1 flex items-center gap-2">
<img src="{{ App\Enums\Parties::from($person->parti)->logo() }}"
width="32">
{{ $person->valkrets }}
</div>
<div class="text-sm text-gray-500 mt-1">{{ $person->status }}</div>
</div>
<svg class="w-5 h-5 text-gray-400" fill="none" stroke="currentColor"
viewBox="0 0 24 24">
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2"
d="M9 5l7 7-7 7"></path>
</svg>
</div>
</div>
@endforeach
</div>
</div>
</div>
@elseif ($results && (!isset($results->personlista->person) || empty($results->personlista->person)))
<div class="bg-yellow-50 border border-yellow-200 rounded-lg p-6 max-w-4xl mx-auto">
<div class="flex items-center">
<svg class="w-5 h-5 text-yellow-600 mr-2" fill="none" stroke="currentColor" viewBox="0 0 24 24">
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2"
d="M12 8v4m0 4h.01M21 12a9 9 0 11-18 0 9 9 0 0118 0z"></path>
</svg>
<span class="text-yellow-800 font-medium">Inga ledamöter hittades med de angivna sökkriterier.</span>
</div>
</div>
@endif
</div>
@if($results && isset($results->personlista->person))
<div class="shadow rounded p-4">
<h2 class="text-lg font-semibold mb-4">Resultat</h2>
<ul>
@php
$persons = $results->personlista->person;
if (!is_array($persons) || (isset($persons->intressent_id) && is_string($persons->intressent_id))) {
$persons = [$persons];
}
@endphp
@foreach($persons as $person)
<li class="mb-4 flex items-center border-b pb-4">
<img src="{{ $person->bild_url_192 ?? '' }}" alt="{{ $person->tilltalsnamn }}" class="w-16 h-16 rounded mr-4">
<div class="flex-1">
<a wire:navigate href="{{ route('person.show', $person->intressent_id) }}" class="text-blue-700 font-bold text-lg hover:underline">
{{ $person->tilltalsnamn }} {{ $person->efternamn }}
</a>
<div class="text-sm text-gray-600">{{ $person->parti }} | {{ $person->valkrets }}</div>
</div>
</li>
@endforeach
</ul>
</div>
@elseif($results && (!isset($results->personlista->person) || empty($results->personlista->person)))
<div class="text-red-600">Inga personer hittades.</div>
@endif
</div>
</div>