/* =====================================================================
aether-medical — Bausteine für die Bögen
Setzt vorformulierten Text in ein Formular ein. Mehr tut diese Datei
nicht, und mehr soll sie nicht tun:
* Sie schreibt nichts zum Server. Der Text landet im Textfeld,
gespeichert wird danach von Hand.
* Sie überschreibt nichts. Steht schon etwas im Feld, wird der
Baustein darunter gehängt.
* Sie wählt nichts aus. Welcher Baustein passt, entscheidet der,
der ihn einsetzt.
===================================================================== */
"use strict";
const Bausteine = (() => {
const { sicher, aufruf, meldung, bestaetigen } = App;
/**
* Hängt Text an ein Textfeld an, ohne Vorhandenes zu verlieren.
* @param {HTMLTextAreaElement} feld Zielfeld
* @param {string} text Einzusetzender Text
*/
function anhaengen(feld, text) {
const vorhanden = feld.value.trim();
feld.value = vorhanden ? vorhanden + "\n\n" + text : text;
}
/**
* Öffnet die Bausteinauswahl für einen Bogen.
* @param {object} o {
* modul Modulkennung, unter der die Aktion liegt
* behaelter Element, in dem die Textfelder stehen
* nachEinsetzen Rückruf nach dem Einsetzen (freiwillig)
* }
*/
async function einsetzen(o) {
let d;
try {
d = await aufruf(o.modul, "bausteine", {});
} catch (fehler) { return meldung(fehler.message, "fehler"); }
if (!d.bausteine.length) {
return meldung("Für diesen Bogen ist kein Baustein hinterlegt.", "fehler");
}
let gewaehlt = null; // aktuell gewählter Baustein
const abgewaehlt = {}; // Felder, die der Nutzer ausgenommen hat
bestaetigen({
titel: "Baustein einsetzen",
inhalt: `
🧩
Der Baustein füllt nur das Formular. Gespeichert wird nichts —
das machst du danach selbst. Text, der schon im Feld steht, bleibt
erhalten; der Baustein kommt darunter.
`,
bestaetigenText: "In den Bogen einsetzen",
bestaetigt: (el, zu) => {
if (!gewaehlt) return meldung("Bitte einen Baustein wählen.", "fehler");
const gefuellt = [];
const uebersprungen = [];
d.felder.forEach((feld) => {
const text = gewaehlt.inhalt[feld.id];
if (!text || abgewaehlt[feld.id]) return;
// Gesperrte Felder gibt es im Bogen gar nicht — sie bleiben aussen vor
const ziel = o.behaelter.querySelector(`textarea[name=${feld.id}]`);
if (!ziel) {
uebersprungen.push(feld.name);
return;
}
anhaengen(ziel, text);
gefuellt.push(feld.name);
});
zu();
if (!gefuellt.length) {
return meldung("Kein Feld des Bogens ließ sich füllen.", "fehler");
}
meldung(uebersprungen.length
? `Eingesetzt in ${gefuellt.length} Feld(er). Übersprungen: ${uebersprungen.join(", ")}.`
: `Eingesetzt in ${gefuellt.length} Feld(er). Noch nicht gespeichert.`, "gut");
if (o.nachEinsetzen) o.nachEinsetzen(gefuellt);
},
nachOeffnen: (hg) => {
const vorschau = hg.querySelector("[data-vorschau]");
/** Zeigt, was der Baustein in welches Feld schreiben würde */
function zeigeVorschau() {
vorschau.innerHTML = `
Wird eingesetztHäkchen entfernen, was nicht mit soll