25 lines
1.5 KiB
JavaScript
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
|
|
}
|