Refactor ObjectForm Component to Use Fetched Data for Editing State

- Updated ObjectForm to prefer fetched snapshot data over stale objectData when entering edit mode, ensuring accurate state management.
- Enhanced logic to compute next object data based on the latest server data, improving user experience during editing.
- Simplified state change handling by integrating base data checks, reducing potential errors during data updates.
This commit is contained in:
Tom Butcher 2026-09-04 02:33:15 +01:00
parent 9a601245b6
commit 8b33a82a65

View File

@ -770,9 +770,13 @@ const ObjectForm = forwardRef(
isEditingRef.current = true isEditingRef.current = true
setIsEditing(true) setIsEditing(true)
const computedEntries = calculateComputedValues(objectData, model) // Prefer the fetched snapshot over a stale objectData closure
// (?action=edit can start before fetch finishes).
const baseData = serverObjectData.current
if (baseData) {
const computedEntries = calculateComputedValues(baseData, model)
const nextObjectData = { const nextObjectData = {
...applyComputedEntries(objectData, computedEntries), ...applyComputedEntries(baseData, computedEntries),
_isEditing: true _isEditing: true
} }
setObjectData(nextObjectData) setObjectData(nextObjectData)
@ -781,6 +785,9 @@ const ObjectForm = forwardRef(
objectData: nextObjectData, objectData: nextObjectData,
editDisabled: getEditDisabled(model, nextObjectData, userProfile) editDisabled: getEditDisabled(model, nextObjectData, userProfile)
}) })
} else {
onStateChangeRef.current({ isEditing: true })
}
} catch (err) { } catch (err) {
console.error(err) console.error(err)
showError( showError(