Files
Webklar-Kundenbereich/public/neu/fristen-streifen.js
T

53 lines
2.3 KiB
JavaScript

/* Kundenansicht neu: Widerrufsstreifen. Läuft eine Widerrufsfrist, steht über der Leiste ein schmaler Streifen
„Widerrufsfrist bis TT.MM. · Widerrufen“. Er ist nicht wegtippbar. Die Daten kommen von GET /api/fristen; jeder Fehler
(404 auf einem Server ohne P5, 500, Netz weg) und anzeigen !== true ergeben keinen Streifen. Daten in Europe/Berlin. */
import { h, leeren } from './dom.js'
/** Fristen vom Server holen; bei Fehlern jeder Art oder anzeigen !== true null. */
export async function ladeFristen(api) {
try {
const daten = await api('/api/fristen')
return daten?.anzeigen === true ? daten : null
} catch {
return null
}
}
const datumBerlin = new Intl.DateTimeFormat('de-DE', { timeZone: 'Europe/Berlin', day: '2-digit', month: '2-digit' })
/** 'Widerrufsfrist bis TT.MM.' in der Zeit von Berlin; ohne gültiges Datum 'Widerrufsfrist läuft'. */
export function streifenText(iso) {
const zeit = new Date(iso)
if (!iso || Number.isNaN(zeit.getTime())) return 'Widerrufsfrist läuft'
const teile = Object.fromEntries(datumBerlin.formatToParts(zeit).map((t) => [t.type, t.value]))
return `Widerrufsfrist bis ${teile.day}.${teile.month}.`
}
/** Frühestes Ende als ISO-Text: fruehestesEnde, sonst das kleinste bis, sonst ''. */
export function fruehesteFrist(daten) {
if (daten?.fruehestesEnde) return daten.fruehestesEnde
const zeiten = (daten?.fristen ?? []).map((f) => f?.bis).filter((b) => b && !Number.isNaN(Date.parse(b)))
return zeiten.sort((a, b) => Date.parse(a) - Date.parse(b))[0] ?? ''
}
/** Streifen in `wurzel` füllen: setze(daten) zeigt ihn, setze(null) versteckt ihn. Am Körper steht `kn-hat-streifen`, solange er sichtbar ist. */
export function baueStreifen(wurzel, { koerper = document.body } = {}) {
wurzel.classList.add('kn-streifen')
wurzel.setAttribute('role', 'region')
wurzel.setAttribute('aria-label', 'Widerrufsfrist')
return {
setze(daten) {
leeren(wurzel)
if (!daten) {
wurzel.hidden = true
koerper.classList.remove('kn-hat-streifen')
return
}
wurzel.append(streifenText(fruehesteFrist(daten)), ' · ', h('a', { class: 'kn-streifen-link', href: '/widerrufen.html' }, 'Widerrufen'))
wurzel.hidden = false
koerper.classList.add('kn-hat-streifen')
},
}
}