diff --git a/ui/src/pages/Records.jsx b/ui/src/pages/Records.jsx index 713a364..7836e36 100644 --- a/ui/src/pages/Records.jsx +++ b/ui/src/pages/Records.jsx @@ -210,10 +210,7 @@ export default function Records({ source }) { setPanelSaving(true) setPanelMsg(null) try { - // Only send cols that have a non-empty value - const toSave = Object.fromEntries( - Object.entries(overrideDraft).filter(([, v]) => String(v).trim()) - ) + const toSave = { ...overrideDraft } const updated = await api.setRecordOverrides(selectedRecord.id, toSave) setSelectedRecord(updated) setOverrideDraft(updated.overrides || {}) @@ -221,10 +218,7 @@ export default function Records({ source }) { setOverrideCols(prev => [...new Set([...prev, ...extraCols.filter(c => c.trim())])]) setExtraCols([]) setPanelMsg({ text: 'Saved.', ok: true }) - setRows(rs => rs.map(r => r.id === updated.id - ? { ...r, _overridden: updated.overrides != null && Object.keys(updated.overrides).length > 0 } - : r - )) + load(offset, sort.col, sort.dir, filters) } catch (err) { setPanelMsg({ text: err.message, ok: false }) } finally { @@ -241,7 +235,7 @@ export default function Records({ source }) { setSelectedRecord(updated) setOverrideDraft({}) setPanelMsg({ text: 'Cleared.', ok: true }) - setRows(rs => rs.map(r => r.id === updated.id ? { ...r, _overridden: false } : r)) + load(offset, sort.col, sort.dir, filters) } catch (err) { setPanelMsg({ text: err.message, ok: false }) } finally { @@ -257,7 +251,10 @@ export default function Records({ source }) { // All override cols: known from DB + new ones added this session const allOverrideCols = [...new Set([...overrideCols, ...extraCols])] - const isDirty = Object.values(overrideDraft).some(v => String(v).trim()) || extraCols.some(c => c.trim()) + const savedOverrides = selectedRecord?.overrides || {} + const isDirty = Object.values(overrideDraft).some(v => String(v).trim()) + || extraCols.some(c => c.trim()) + || Object.keys(savedOverrides).some(k => !String(overrideDraft[k] ?? '').trim()) return (