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:
1 parent
d30adf1579
commit
f1e5938ae1
1 file changed
+45
-5
@@ -41,19 +41,27 @@ export const call_log_liste: m.ClosureComponent = (vnode) => {
|
|||||||
telefon: "",
|
telefon: "",
|
||||||
notiz: "",
|
notiz: "",
|
||||||
wiedervorlage_datum: "",
|
wiedervorlage_datum: "",
|
||||||
erledigt: false
|
erledigt: false,
|
||||||
|
from_liste: "1"
|
||||||
}
|
}
|
||||||
if (filterProjektId !== null) {
|
if (filterProjektId !== null) {
|
||||||
params.projekt_id = filterProjektId
|
params.projekt_id = filterProjektId
|
||||||
params.projekt_name = projektName
|
params.projekt_name = projektName
|
||||||
params.kunden_name = kundenName
|
params.kunden_name = kundenName
|
||||||
|
params.return_projekt_id = filterProjektId
|
||||||
|
params.return_projekt_name = projektName
|
||||||
}
|
}
|
||||||
m.route.set("/call_log", params)
|
m.route.set("/call_log", params)
|
||||||
}
|
}
|
||||||
|
|
||||||
const editCallLog = (log: iCallLog, e: Event) => {
|
const editCallLog = (log: iCallLog, e: Event) => {
|
||||||
e.stopPropagation()
|
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) => {
|
const columnmapper: (node: iTreenode) => any[] = (node: iTreenode) => {
|
||||||
@@ -204,6 +212,13 @@ export const Call_Log: m.ClosureComponent = (vnode) => {
|
|||||||
let tagListe: iTag[] = []
|
let tagListe: iTag[] = []
|
||||||
// Aktuell ausgewählte Tag-IDs im Formular.
|
// Aktuell ausgewählte Tag-IDs im Formular.
|
||||||
let selectedTagIds: number[] = []
|
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.
|
* Formatiert verstrichene Sekunden als mm:ss.
|
||||||
@@ -218,6 +233,13 @@ export const Call_Log: m.ClosureComponent = (vnode) => {
|
|||||||
oninit: (vnode) => {
|
oninit: (vnode) => {
|
||||||
const routeParams = m.route.param()
|
const routeParams = m.route.param()
|
||||||
const id = routeParams && routeParams.id ? parseInt(routeParams.id) : -1
|
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) {
|
if (id !== -1) {
|
||||||
// Gesprächsnotiz frisch vom Server holen.
|
// Gesprächsnotiz frisch vom Server holen.
|
||||||
fetchCallLogById(id).then((result) => {
|
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 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 submit = (form: HTMLFormElement): boolean => {
|
||||||
const formData = new FormData(form)
|
const formData = new FormData(form)
|
||||||
const gespeichertesLog: iCallLog = {
|
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))
|
tag_ids: formData.getAll("tag_ids").map((v) => parseInt(v as string)).filter((n) => !isNaN(n))
|
||||||
}
|
}
|
||||||
if (currentLog.id === -1) {
|
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 {
|
} 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
|
return true
|
||||||
}
|
}
|
||||||
const cancel = (e: Event) => {
|
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",
|
return m("div.w3-container.w3-auto.form-view-container",
|
||||||
m("h1", currentLog.id === -1 ? "Neue Gesprächsnotiz anlegen" : "Gesprächsnotiz"),
|
m("h1", currentLog.id === -1 ? "Neue Gesprächsnotiz anlegen" : "Gesprächsnotiz"),
|
||||||
|
|||||||
Reference in new issue
Block a user