Fix Records override save/clear: reload grid, allow blank overrides to suppress mappings

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
Paul Trowbridge 2026-04-25 12:28:35 -04:00
parent d3a423c6ad
commit 814dcb7af1

View File

@ -210,10 +210,7 @@ export default function Records({ source }) {
setPanelSaving(true) setPanelSaving(true)
setPanelMsg(null) setPanelMsg(null)
try { try {
// Only send cols that have a non-empty value const toSave = { ...overrideDraft }
const toSave = Object.fromEntries(
Object.entries(overrideDraft).filter(([, v]) => String(v).trim())
)
const updated = await api.setRecordOverrides(selectedRecord.id, toSave) const updated = await api.setRecordOverrides(selectedRecord.id, toSave)
setSelectedRecord(updated) setSelectedRecord(updated)
setOverrideDraft(updated.overrides || {}) setOverrideDraft(updated.overrides || {})
@ -221,10 +218,7 @@ export default function Records({ source }) {
setOverrideCols(prev => [...new Set([...prev, ...extraCols.filter(c => c.trim())])]) setOverrideCols(prev => [...new Set([...prev, ...extraCols.filter(c => c.trim())])])
setExtraCols([]) setExtraCols([])
setPanelMsg({ text: 'Saved.', ok: true }) setPanelMsg({ text: 'Saved.', ok: true })
setRows(rs => rs.map(r => r.id === updated.id load(offset, sort.col, sort.dir, filters)
? { ...r, _overridden: updated.overrides != null && Object.keys(updated.overrides).length > 0 }
: r
))
} catch (err) { } catch (err) {
setPanelMsg({ text: err.message, ok: false }) setPanelMsg({ text: err.message, ok: false })
} finally { } finally {
@ -241,7 +235,7 @@ export default function Records({ source }) {
setSelectedRecord(updated) setSelectedRecord(updated)
setOverrideDraft({}) setOverrideDraft({})
setPanelMsg({ text: 'Cleared.', ok: true }) 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) { } catch (err) {
setPanelMsg({ text: err.message, ok: false }) setPanelMsg({ text: err.message, ok: false })
} finally { } finally {
@ -257,7 +251,10 @@ export default function Records({ source }) {
// All override cols: known from DB + new ones added this session // All override cols: known from DB + new ones added this session
const allOverrideCols = [...new Set([...overrideCols, ...extraCols])] 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 ( return (
<div className="flex h-full min-h-0 overflow-hidden"> <div className="flex h-full min-h-0 overflow-hidden">