Skip to content

Komponenty

Popis klíčových sdílených komponent aplikace.

EventDialog

Soubor: src/components/calendar/EventDialog.jsx

Nejkomplexnější komponenta aplikace. Slouží pro vytváření i editaci událostí v kalendáři.

Workflow při vytváření

  1. Výběr typu události (termín / blokace / dovolená)
  2. Výběr data (s navigací šipkami, calendar picker)
  3. Výběr terapeuta + výkonu (filtrované dle dostupnosti)
  4. Zobrazení volných termínů (výpočet z AvailabilityBlock minus obsazené CalendarEvent)
  5. Výběr místnosti (auto-select pokud jen jedna možnost)
  6. Výběr klienta — povinné pro typ appointment
  7. Volitelné: poznámka, celodenní příznak
  8. Po uložení → nabídka platebního odkazu / e-mailu

Logika volných slotů

Pro každý AvailabilityBlock terapeuta na dané datum:
  - Zkontroluj service_types (pokud je vybrán výkon)
  - Generuj sloty po 10 min od start_time do end_time - duration
  - Vyřaď sloty s konfliktem (překryv s existujícími CalendarEvent)
  - Zobraz jen :00 a :30 sloty (čistší UX)

Další režimy

  • Ruční mód — admin přepne na ruční zadání časů, obejde logiku volných slotů
  • Edit mód — platební panel zobrazuje stav platby z PaymentLog; tlačítko „Karta klienta" naviguje na /clients/:id

AvailabilityBlockDialog

Soubor: src/components/availability/AvailabilityBlockDialog.jsx

Formulář pro vytvoření a editaci kapacitního bloku terapeuta.

  • Výběr opakování (dny v týdnu, vzor, start/end datum)
  • Multi-select povolených výkonů
  • Kontrola konfliktů před uložením (volá backend checkAvailabilityConflicts)

CalendarUtils

Soubor: src/components/calendar/CalendarUtils.jsx

Sdílené utility a konstanty pro kalendářové komponenty.

Funkce / konstanta Popis
VIEW_MODES Konstanty pro přepínání pohledů
EVENT_TYPE_LABELS Překlady typů událostí
STATUS_LABELS Překlady stavů termínů
STATUS_COLORS Barevné mapování stavů
getVisibleDates(date, viewMode, workingDays) Výpočet viditelných dnů pro daný pohled
timeToMinutes(time) Převod HH:MM na minuty
minutesToTime(minutes) Převod minut na HH:MM
getEventPosition(event, dayStart) Pixelová pozice události v day sloupci
isAvailabilityBlockActiveOnDate(block, date) Kontrola zda je recurring blok aktivní k danému datu