P8 — Vyhledávání
Účel obrazovky
Fullscreen search overlay s okamžitými výsledky. Uživatel hledá akce, pořadatele i místa konání. Důraz na rychlost (debounced search) a discovery (populární tagy, historie).
Content Priority
Empty state (před hledáním)
- Search input s auto-focus a klávesnicí, placeholder „Hledejte akce, pořadatele, místa…" Search Input
- Nedávná hledání — poslední 5–10 hledání jako chips, tap → spustit hledání Chip / Filter Button
- Populární tagy / akce — trendující hledání jako tag chips (festival, divadlo, Národní divadlo…) Chip / Filter Button
- Tipy redakce — 2–3 doporučené akce jako mini karty Event Card (small)
Výsledky (po zadání 2+ znaků)
- Search input s query textem a „×" clear button Search Input
- Sekce „Akce" (N) — event karty (kompaktní) s highlighted matchem v názvu Section HeaderEvent Card (small)
- Sekce „Pořadatelé" (N) — mini karty s logem a názvem, highlighted match Section HeaderOrganizer Card
- Sekce „Místa" (N) — venue karty s názvem a městem Section HeaderVenue Card
- Quick preview — zkrácená event karta s hlavní info (thumbnail, název, datum, cena) Event Card (small)
Interakce
| Trigger | Akce | Cíl |
|---|---|---|
| Typing (2+ znaků) | Debounced search (300ms) | Real-time výsledky pod inputem |
| Tap na event výsledek | Navigace na detail | P3 — Detail akce |
| Tap na pořadatele | Navigace na profil | S13 — Profil pořadatele |
| Tap na místo | Navigace na venue | S12 — Detail místa |
| Tap na recent search chip | Vyplnit query, spustit hledání | Zobrazí výsledky pro daný query |
| Tap na populární tag | Vyplnit query + hledání | Výsledky pro tag |
| Tap „×" u search input | Clear query | Návrat na empty state |
| Tap „×" (zavřít) nebo back | Zavřít search overlay | Návrat na P1 |
| Keyboard „Search" | Spustit search | Navigace na P2 — Seznam akcí s full výsledky |
Stavy
| Stav | Popis | Vizuální chování |
|---|---|---|
| Empty | Před hledáním | Historie, populární tagy, tipy |
| Typing | Uživatel píše, < 2 znaky | Stále empty state, čeká na 2+ znaky |
| Searching | Debounce period / API call | Subtle spinner vedle search inputu |
| Results | Nalezeny výsledky | Sekce Akce / Pořadatelé / Místa |
| No results | 0 výsledků | X6 — Empty state hledání |
| Error | API selhala | „Vyhledávání je dočasně nedostupné" + retry |
| Offline | Bez připojení | „Pro vyhledávání potřebujete připojení" + cached recent searches |
Edge Cases a Error States
| Scénář | Řešení |
|---|---|
| Query 1 znak | Nespouštět search, zobrazit hint „Zadejte alespoň 2 znaky" |
| Velmi rychlé psaní | Debounce 300ms — odeslat jen poslední stav |
| Žádná historie hledání (nový uživatel) | Skrýt „Nedávná hledání", zobrazit jen populární tagy |
| Výsledky obsahují speciální znaky v názvech | Správný rendering diakritiků a HTML entities |
| Extrémně mnoho výsledků (500+) | Zobrazit top 5 per kategorie + „Zobrazit vše (N)" odkaz na P2 |
| Pomalé API | Zobrazit skeleton výsledky po 500ms, timeout po 10s → error |
Mobilní patterny a odlišení od webu
Co děláme jinak
- Fullscreen overlay místo inline search — web má search bar v header, na mobilu potřebujeme víc prostoru pro klávesnici a výsledky
- Auto-focus + klávesnice — okamžitý focus na input, uživatel může začít psát ihned
- Text highlighting — matchované části v názvech výsledků tučně
- Dual výsledky — web hledá jen akce, MA hledá akce + pořadatele + místa najednou
Aplikované patterny
- iOS:
UISearchControllerpattern,searchable()modifier v SwiftUI, debouncedPublisher - Android:
SearchBar(Material 3),Debouncev Kotlin Flow,SearchViews suggestions
Reference — Aktuální web
SCR-WEB-41Empty state — 'Our tips' karty, recent searches, popular tagySCR-WEB-42Výsledky — 'Show 258 events' + 'Show 27 organizers', highlighted matche
