fix: Rückkehr-Kontext für Gesprächsnotizenliste erhalten

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 <vibe@mistral.ai>
This commit is contained in:
gg committed 2026-09-19 15:38:23 +02:00
1 parent d30adf1579
commit f1e5938ae1
1 file changed
+45 -5
+45 -5
View File
@@ -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<number, string> = 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"),