From f1e5938ae189b081057c103ce6f90fe48fe56d3e Mon Sep 17 00:00:00 2001 From: Gerd Date: Sat, 19 Sep 2026 15:38:23 +0200 Subject: [PATCH] =?UTF-8?q?fix:=20R=C3=BCckkehr-Kontext=20f=C3=BCr=20Gespr?= =?UTF-8?q?=C3=A4chsnotizenliste=20erhalten?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Die Bearbeitungsmaske kehrt beim Speichern/Abbrechen nicht mehr mit dem Projekt der bearbeiteten Notiz zurück, sondern mit dem Filter der Liste, aus der sie geöffnet wurde. Liste reicht from_liste/return_projekt_id an die Maske durch; Maske wertet diesen Kontext in goBack() aus. Generated by Mistral Vibe. Co-Authored-By: Mistral Vibe --- Client/Components/call_log.ts | 50 +++++++++++++++++++++++++++++++---- 1 file changed, 45 insertions(+), 5 deletions(-) diff --git a/Client/Components/call_log.ts b/Client/Components/call_log.ts index 5e696fa..924b89d 100644 --- a/Client/Components/call_log.ts +++ b/Client/Components/call_log.ts @@ -41,19 +41,27 @@ export const call_log_liste: m.ClosureComponent = (vnode) => { telefon: "", notiz: "", wiedervorlage_datum: "", - erledigt: false + erledigt: false, + from_liste: "1" } if (filterProjektId !== null) { params.projekt_id = filterProjektId params.projekt_name = projektName params.kunden_name = kundenName + params.return_projekt_id = filterProjektId + params.return_projekt_name = projektName } m.route.set("/call_log", params) } const editCallLog = (log: iCallLog, e: Event) => { e.stopPropagation() - m.route.set("/call_log", {id: log.id}) + const params: any = {id: log.id, from_liste: "1"} + if (filterProjektId !== null) { + params.return_projekt_id = filterProjektId + params.return_projekt_name = projektName + } + m.route.set("/call_log", params) } const columnmapper: (node: iTreenode) => any[] = (node: iTreenode) => { @@ -204,6 +212,13 @@ export const Call_Log: m.ClosureComponent = (vnode) => { let tagListe: iTag[] = [] // Aktuell ausgewählte Tag-IDs im Formular. let selectedTagIds: number[] = [] + // Wurde die Maske aus der Gesprächsnotizenliste geöffnet? Wenn ja, + // erfolgt die Rückkehr dorthin mit dem ursprünglichen Listenfilter. + let fromListe: boolean = false + // Filter-Kontext der Liste, aus der die Maske geöffnet wurde. + // null bedeutet ungefiltert; ein Wert bedeutet projektgefiltert. + let returnProjektId: number | null = null + let returnProjektName: string = "" /** * Formatiert verstrichene Sekunden als mm:ss. @@ -218,6 +233,13 @@ export const Call_Log: m.ClosureComponent = (vnode) => { oninit: (vnode) => { const routeParams = m.route.param() const id = routeParams && routeParams.id ? parseInt(routeParams.id) : -1 + // Rückkehr-Kontext: wurde die Maske aus der Liste geöffnet und + // mit welchem Filter soll zurückgekehrt werden? + fromListe = !!(routeParams && routeParams.from_liste) + if (routeParams && routeParams.return_projekt_id) { + returnProjektId = parseInt(routeParams.return_projekt_id) + returnProjektName = routeParams.return_projekt_name || "" + } if (id !== -1) { // Gesprächsnotiz frisch vom Server holen. fetchCallLogById(id).then((result) => { @@ -297,6 +319,24 @@ export const Call_Log: m.ClosureComponent = (vnode) => { }) const tagColors: Map = new Map(tagListe.map((t: iTag) => [t.id, t.color] as [number, string])) + const goBack = () => { + const params: any = {} + if (fromListe) { + // Rückkehr in den Listenkontext, aus dem die Maske + // geöffnet wurde. Ohne return_projekt_id ungefiltert. + if (returnProjektId !== null) { + params.projekt_id = returnProjektId + params.projekt_name = returnProjektName + } + } else if (currentLog.projekt_id !== -1) { + // Fallback: Maske wurde nicht aus der Liste geöffnet + // (z.B. addCallLog aus projekt.ts/kontaktadresse.ts). + params.projekt_id = currentLog.projekt_id + params.projekt_name = currentLog.projekt_name + } + m.route.set("/calllogliste", params) + } + const submit = (form: HTMLFormElement): boolean => { const formData = new FormData(form) const gespeichertesLog: iCallLog = { @@ -316,14 +356,14 @@ export const Call_Log: m.ClosureComponent = (vnode) => { tag_ids: formData.getAll("tag_ids").map((v) => parseInt(v as string)).filter((n) => !isNaN(n)) } if (currentLog.id === -1) { - createCallLogREST(gespeichertesLog).then(() => m.route.set("/calllogliste", {projekt_id: currentLog.projekt_id, projekt_name: currentLog.projekt_name})).catch((e) => showServerError(e)) + createCallLogREST(gespeichertesLog).then(() => goBack()).catch((e) => showServerError(e)) } else { - updateCallLogREST(gespeichertesLog).then(() => m.route.set("/calllogliste", {projekt_id: currentLog.projekt_id, projekt_name: currentLog.projekt_name})).catch((e) => showServerError(e)) + updateCallLogREST(gespeichertesLog).then(() => goBack()).catch((e) => showServerError(e)) } return true } const cancel = (e: Event) => { - m.route.set("/calllogliste", {projekt_id: currentLog.projekt_id, projekt_name: currentLog.projekt_name}) + goBack() } return m("div.w3-container.w3-auto.form-view-container", m("h1", currentLog.id === -1 ? "Neue Gesprächsnotiz anlegen" : "Gesprächsnotiz"),