SeatMapPicker

Domain

Görsel koltuk seçim haritası: section/subsection sekme desteği, sıra-koltuk grid, renk kodlu durum, erişilebilirlik göstergesi.

Section + subsection + koltuk seçimi

Preview
Sahne / Saha
26 koltuk müsait / 30₺2.500
A
B
C
D
Müsait
Seçili
Rezerve
Dolu
Engelsiz

0 koltuk seçili / 4 max

Code
const sections = buildSectionTree(allSections, seatInfos, pricings);

<SeatMapPicker
  sections={sections}
  selectedSeatIds={selected}
  onSeatToggle={(id) => toggleSeat(id)}
  maxSelectable={4}
  showStage
/>

SVG Salon Haritası — tıkla → koltuk seç

Preview

Koltuk Haritası

Bölüme tıklayın → koltuk seçin

SAHNEParket₺1.20058/96 müsaitSol Yan₺80024/36 müsaitSağ Yan₺80024/36 müsaitÜst Balkon₺45040/70 müsait
Müsait
Seçili
Rezerve
Dolu
Engelsiz

0 koltuk seçili / 6 max

Code
import type { SectionMapShape } from '@/modules/domains/event/SeatMapPicker';

const mapShapes: SectionMapShape[] = [
  { sectionId: 'parket',     points: '170,93 510,93 558,290 122,290',                labelX: 340, labelY: 185 },
  { sectionId: 'sol-yan',   points: '32,93 170,93 122,290 18,248',                  labelX: 95,  labelY: 185 },
  { sectionId: 'sag-yan',   points: '510,93 648,93 662,248 558,290',                labelX: 585, labelY: 185 },
  { sectionId: 'ust-balkon', points: '18,248 122,290 558,290 662,248 674,438 6,438', labelX: 340, labelY: 360 },
];

<SeatMapPicker
  sections={sections}
  selectedSeatIds={selected}
  onSeatToggle={(id) => toggleSeat(id)}
  maxSelectable={6}
  mapShapes={mapShapes}
  mapViewBox="0 0 680 460"
  stagePoints="225,18 455,18 455,88 225,88"
  stageLabel="SAHNE"
  stageLabelX={340}
  stageLabelY={53}
/>
Sourcemodules/domains/event/SeatMapPicker.tsx