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:
parent
9a601245b6
commit
8b33a82a65
@ -770,17 +770,24 @@ const ObjectForm = forwardRef(
|
||||
isEditingRef.current = true
|
||||
setIsEditing(true)
|
||||
|
||||
const computedEntries = calculateComputedValues(objectData, model)
|
||||
const nextObjectData = {
|
||||
...applyComputedEntries(objectData, computedEntries),
|
||||
_isEditing: true
|
||||
// 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 = {
|
||||
...applyComputedEntries(baseData, computedEntries),
|
||||
_isEditing: true
|
||||
}
|
||||
setObjectData(nextObjectData)
|
||||
onStateChangeRef.current({
|
||||
isEditing: true,
|
||||
objectData: nextObjectData,
|
||||
editDisabled: getEditDisabled(model, nextObjectData, userProfile)
|
||||
})
|
||||
} else {
|
||||
onStateChangeRef.current({ isEditing: true })
|
||||
}
|
||||
setObjectData(nextObjectData)
|
||||
onStateChangeRef.current({
|
||||
isEditing: true,
|
||||
objectData: nextObjectData,
|
||||
editDisabled: getEditDisabled(model, nextObjectData, userProfile)
|
||||
})
|
||||
} catch (err) {
|
||||
console.error(err)
|
||||
showError(
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user