Files
Webklar-Kundenbereich/public/fn-reiter.js
T

25 lines
1.5 KiB
JavaScript

/* Reiter der Funktionsmodule in der neuen Ansicht (Abo-Modell). Im Abo-Modell zeichnen Terminplaner, Webshop, Buchungskalender und
Analyse keine eigene Leiste, sondern melden ihre Reiter an die Etage 2 (public/neu/etage.js): CustomEvent 'kn:reiter' mit
bubbles und detail { eintraege: [{ key, label, kurz? }], aktiv, bei(key) }; eine leere Liste heisst „keine Reiter“.
Dieses Modul hat keine Importe und kennt weder DOM noch die Huelle. */
/** Kurzlabels fuer schmale Zeilen (C2): modul → { reiterKey: kurzes Wort }. Die Analyse braucht keine (Übersicht, Heatmap, Einstellungen). */
export const KURZLABELS = {
termine: { team: 'Team' },
shop: { uebersicht: 'Start', rechtliches: 'Recht' },
buchungen: { unterkuenfte: 'Preise' },
}
/** [{ key, label, … }] des Moduls → [{ key, label, kurz? }]; `kurz` nur mit Eintrag in KURZLABELS, alle anderen Felder fallen weg. */
export function reiterEintraege(modul, reiterListe) {
const kurz = Object.hasOwn(KURZLABELS, modul) ? KURZLABELS[modul] : {}
return reiterListe.map(({ key, label }) => (Object.hasOwn(kurz, key) ? { key, label, kurz: kurz[key] } : { key, label }))
}
/** Sendet 'kn:reiter' aus el. Ohne CustomEvent oder ohne el.dispatchEvent: false, sonst true. */
export function meldeReiter(el, { eintraege, aktiv = '', bei = () => {} } = {}) {
if (typeof CustomEvent !== 'function' || typeof el?.dispatchEvent !== 'function') return false
el.dispatchEvent(new CustomEvent('kn:reiter', { bubbles: true, detail: { eintraege, aktiv, bei } }))
return true
}