/* =====================================================================
aether-medical / Ansicht: Bausteine
Pflege der Textvorlagen für Behandlungs- und Berichtsbogen. Ein
Baustein ist vorbereiteter Text — er wird nie von selbst eingesetzt
und schreibt nichts in eine Dokumentation.
===================================================================== */
"use strict";
(() => {
const { sicher, aufruf, meldung, fenster, bestaetigen } = App;
const z = {
bereich: "behandlung", // gewählter Bogen
daten: null,
};
/* ---- Gerüst ------------------------------------------------------------ */
function reiterleiste(d) {
return `
${d.bereiche.map((b) => `
`).join("")}
`;
}
/* ---- Übersicht ---------------------------------------------------------- */
function uebersicht(behaelter) {
const d = z.daten;
behaelter.innerHTML = `
Bausteine
Vorformulierter Text für die Bögen. Ein Baustein füllt beim Einsetzen nur
das Formular — gespeichert wird danach von Hand, und vorhandener Text
bleibt stehen.
${reiterleiste(d)}
Bausteine für diesen BogenDie Reihenfolge bestimmt nur die Anzeige
`}`,
});
}
/* ---- Anlegen und bearbeiten ------------------------------------------------ */
function bearbeitenFenster(behaelter, b) {
const d = z.daten;
const neu = !b;
bestaetigen({
titel: neu ? `Baustein für den ${d.bereiche.find((e) => e.id === z.bereich).name}`
: `„${b.name}" bearbeiten`,
inhalt: `
Leer gelassene Felder bleiben beim Einsetzen
unberührt. Ein Baustein muss mindestens ein Feld füllen.
${d.felder.map((f) => `
`).join("")}
${neu ? "" : `
Der Bogen eines Bausteins lässt sich
nicht wechseln — die Felder des einen passen nicht auf den anderen.
`}`,
bestaetigenText: neu ? "Anlegen" : "Speichern",
bestaetigt: async (el, zu) => {
const name = el.querySelector("[name=name]").value.trim();
if (!name) return meldung("Bitte einen Namen angeben.", "fehler");
// Nur gefüllte Felder wandern in den Baustein
const inhalt = {};
d.felder.forEach((f) => {
const wert = el.querySelector(`[name=${f.id}]`).value.trim();
if (wert) inhalt[f.id] = wert;
});
if (!Object.keys(inhalt).length) {
return meldung("Bitte mindestens ein Feld ausfüllen.", "fehler");
}
try {
await aufruf("vorlage", "speichern", {
id: neu ? null : b.id,
bereich: z.bereich,
name,
sortierung: +el.querySelector("[name=sortierung]").value,
inhalt,
});
zu();
meldung(neu ? "Baustein angelegt." : "Baustein gespeichert.", "gut");
rendern(behaelter);
} catch (f) { meldung(f.message, "fehler"); }
},
});
}
function entfernenFenster(behaelter, b) {
bestaetigen({
titel: `„${b.name}" entfernen`,
gefahr: true,
inhalt: `
Der Baustein verschwindet aus der Auswahl.
ℹ
Was damit bereits geschrieben wurde, steht in den Bögen und bleibt
unberührt. Soll der Baustein nur vorübergehend verschwinden, ist
Abschalten der sanftere Weg.