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í
- Výběr typu události (termín / blokace / dovolená)
- Výběr data (s navigací šipkami, calendar picker)
- Výběr terapeuta + výkonu (filtrované dle dostupnosti)
- Zobrazení volných termínů (výpočet z AvailabilityBlock minus obsazené CalendarEvent)
- Výběr místnosti (auto-select pokud jen jedna možnost)
- Výběr klienta — povinné pro typ
appointment - Volitelné: poznámka, celodenní příznak
- 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 |