Přeskočit na hlavní obsah

P4 — Seat Map (adresné sezení)

Screen IDP4
Typ Primární
FázeMVP
Odhad8 h
Účel obrazovky

Interaktivní plán sálu, kde si uživatel vybírá konkrétní sedadla. Klíčová obrazovka pro adresné akce — musí být přehledná, rychle reagovat na gesta a jasně komunikovat cenové kategorie a dostupnost.


Content Priority

  1. Event info header — název akce, datum, čas, venue + sál (kompaktní, 1–2 řádky) App Bar / Top Navigation
  2. Countdown timer — vizuální progress bar s odpočtem (typicky 15–20 min), start při prvním výběru sedadla Countdown Timer
  3. SVG/Canvas viewport — vykreslený plán sálu s jednotlivými sedadly, scéna nahoře, vchody označené Seat Map Viewport
  4. Barevné kódování cenových kategorií — min. 4 barvy + šedá pro vyprodáno, jasná vizuální hierarchie Category Seat Legend
  5. Sekce sálu — přízemí, balkón, lóže vizuálně oddělené čárami a labely Seat Map Viewport
  6. Legenda — cenové kategorie s barvami a cenami, toggle viditelnost per kategorie Category Seat Legend
  7. Selected seats chips — horizontální strip pod header s vybranými sedadly jako chips (řada + sedadlo + cena), tap → deselect Chip / Filter Button
  8. Bottom bar — počet vybraných sedadel, celková cena, CTA „Pokračovat do košíku" CTA Sticky BarPrimary Button

Interakce

TriggerAkceCíl
Tap na volné sedadloBottom sheet s detailem sedadlaDetail: řada, číslo, kategorie, cena, CTA „Přidat"
Tap na „Přidat" v bottom sheetPřidání do výběruSedadlo změní barvu na „selected", chip se přidá do stripu, celková cena se aktualizuje
Tap na selected chipDeselect sedadlaSedadlo se vrátí do původní barvy, chip zmizí, cena se přepočítá
Pinch-to-zoomZoom in/out sáluPlynulý zoom s min/max limity
Double tapZoom in na danou oblastAnimovaný zoom 2×
Pan (tah jedním prstem)Posun viewportPřesouvání po sálu
„Pokračovat do košíku"Přechod na košíkP5 — Košík
Timer warning < 2 minInline warningX5 — Warning timer
Timer expiry (0:00)Timeout errorX4 — Chyba timeout
Tap na legendu kategoriiToggle viditelnostSedadla dané kategorie se ztlumí/zobrazí

Stavy

StavPopisVizuální chování
LoadingNačítání plánu sáluCentered spinner + „Načítáme plán sálu…"
Loaded — žádný výběrSál zobrazen, 0 vybraných sedadelCTA „Pokračovat" disabled, timer neběží
Loaded — výběr1+ sedadel vybránoTimer běží, CTA „Pokračovat do košíku (X Kč)" active
Timer warningZbývá < 2 minTimer pulsuje červeně, warning banner
Timer expiredČas vypršelRedirect na X4, sedadla uvolněna
Max limit reachedDosažen max. počet vstupenekToast „Maximum X vstupenek per objednávku", další tapping ignorován
ErrorSál se nepodařilo načístRetry CTA

Edge Cases a Error States

ScénářŘešení
Sedadlo obsazeno během výběru jiným uživatelemToast „Sedadlo X bylo právě obsazeno", automatický deselect + vizuální refresh daného sedadla
Velmi velký sál (2000+ sedadel)Výchozí zoom = celý sál, progressive rendering, lazy load sedadel při zoom
Sál má nestandardní tvar (L-tvar, kruhovitý)SVG musí být flexibilní, ne grid-based
Uživatel vybere sedadla ve dvou různých sekcích (přízemí + balkón)Povoleno — chips zobrazují sekci u každého sedadla
Countdown timer běží i na pozadí (app minimize)Timer pokračuje server-side, při návratu sync s API
Ztráta připojení během výběruOffline banner, vybraná sedadla v lokálním stavu, retry při obnovení
Sedadlo pro vozíčkářeSpeciální ikona (♿), bottom sheet ukazuje info o bezbariérovosti
Lóže (skupina sedadel prodávaných jako celek)Tap na lóži vybere všechna sedadla v ní, zobrazit „Lóže pro X osob"

Mobilní patterny a odlišení od webu

Co děláme zásadně jinak

  • Grafický SVG sál — web Colosseum používá textový grid (řady písmen a čísel), MA bude mít vizuální plán sálu s reálným rozmístěním sedadel (jako CineStar)
  • Pinch-to-zoom — nativní gesto pro zoom, web nemá (jen +/- buttony)
  • Bottom sheet pro detail sedadla — na webu tooltip, na mobilu nativní bottom sheet s více prostorem pro info
  • Chips pro vybraná sedadla — horizontální scroll strip, na webu toto chybí

Co přebíráme z webu

  • Barevné kódování cenových kategorií
  • Legenda s cenami

Aplikované patterny

  • iOS: UIScrollView s minimumZoomScale/maximumZoomScale, UIPanGestureRecognizer, .sheet() modifier pro bottom sheet
  • Android: TransformableState v Compose pro zoom/pan, BottomSheetScaffold (Material 3), SnackbarHost pro toasty

API Data

GET/cashdesk/event/{eventId}GET/cashdesk/event/matrix/{eventId}GET/cashdesk/event/state/{eventId}POST/cart/ticket/add/eventGET/cart
OperaceEndpointTriggerPoznámka
Seat map dataGET /cashdesk/event/{eventId}Otevření seat mapyVrací HallSeatOnline[] s x1,y1,x2,y2 koordináty, barvou (#AARRGGBB), rotací
Maticové rozloženíGET /cashdesk/event/matrix/{eventId}Alternativní viewMaticový layout sálu
Refresh stavůGET /cashdesk/event/state/{eventId}Polling (5–10s)Jen stavy sedadel (ItemState enum), ne celý layout
Přidání do košíkuPOST /cart/ticket/add/eventTap „Pokračovat"Odešle pole ticket_id selected sedadel
Aktuální košíkGET /cartPo přidáníVrací aktualizovaný košík s validity (countdown)
CoreAPI poznatek — Seat map formát

Sedadla jsou JSON obdélníky s x1, y1, x2, y2 (souřadnice rohů), color (#AARRGGBB), rotation (stupně clockwise). Sály mají sekce (HallSection) s tvary: Rectangle, Triangle, Quadrilateral, Ellipse. Multi-seats: seat_group_id kladná = dvojsedadlo (vybírat společně), záporná = single. Klient renderuje Canvas/SVG z těchto JSON dat.


Reference — Aktuální web

SCR-WEB-29: Textový grid sálu — přízemí + balkón, barevná legenda, zoom buttony
Web ColosseumSCR-WEB-29Textový grid sálu — přízemí + balkón, barevná legenda, zoom buttony
SCR-WEB-30: 3 vybraná sedadla na balkónu, celková cena v bottom bar
Web ColosseumSCR-WEB-303 vybraná sedadla na balkónu, celková cena v bottom bar

Reference — CineStar benchmark

SCR-CS-03: Grafický plán sálu s barevným kódováním, stepper, bottom sheet
CineStar benchmarkSCR-CS-03Grafický plán sálu s barevným kódováním, stepper, bottom sheet
SCR-CS-06: Legenda sedaček — standardní, VIP, vozíčkáře, lehátko, vybrané, obsazené
CineStar benchmarkSCR-CS-06Legenda sedaček — standardní, VIP, vozíčkáře, lehátko, vybrané, obsazené
SCR-CS-08: 3 vybraná sedadla jako chips, CTA 'Pokračovat' active
CineStar benchmarkSCR-CS-083 vybraná sedadla jako chips, CTA 'Pokračovat' active
SCR-CS-09: Warning toast — maximální počet sedadel je 6
CineStar benchmarkSCR-CS-09Warning toast — maximální počet sedadel je 6
Inspirace z CineStar

CineStar má nejlepší referenci pro seat map v českém kontextu: grafický SVG sál, stepper progress, chips pro výběr, bottom sheet s detailem sedadla a jasná legenda. Přebíráme většinu UX patternů, ale přidáváme countdown timer (CineStar ho nemá viditelně).