diff --git a/src/api/employees.js b/src/api/employees.js index d7341b7..e6e38ce 100644 --- a/src/api/employees.js +++ b/src/api/employees.js @@ -223,6 +223,22 @@ export async function fetchEmployeeInstance(instanceId) { return rows.find((r) => String(r.instance_id) === String(instanceId)) || null } +/** + * An employee-table row's values under the Update field ids. Update maps every + * field into the table, so the row holds what was last saved even though the + * workflow views return only the INIT fields. + */ +function updateValuesFromTable(row) { + if (!row) return {} + const byLabel = new Map(Object.entries(row).map(([k, v]) => [normLabel(k), v])) + const out = {} + for (const f of EMPLOYEE_UPDATE_FIELDS) { + const v = byLabel.get(normLabel(f.label)) + if (v !== undefined && v !== null && v !== '') out[f.id] = v + } + return out +} + /** * Show the latest saved values on the details page. * @@ -242,7 +258,13 @@ export async function withLatestInstanceValues(view, instanceId) { } if (!instance) return view - const record = { ...view.record, ...instance } + let tableRow = null + try { + tableRow = await fetchEmployeeTableRow(instance) + } catch { + // Keep the instance values. + } + const record = { ...view.record, ...instance, ...updateValuesFromTable(tableRow) } const latest = new Map( [...latestByLabel(ALL_EMPLOYEE_FIELDS, record)].map(([label, v]) => [normLabel(label), v]), )