fix: prevent recursive form sync in type editor

This commit is contained in:
Matthieu
2025-09-18 11:44:08 +02:00
parent b568b22461
commit 367e356765

View File

@@ -103,10 +103,22 @@ const formData = reactive(createDefaultForm(props.modelValue))
const allExpanded = ref(false) const allExpanded = ref(false)
const expandAllTrigger = ref(0) const expandAllTrigger = ref(0)
let syncingFromParent = false
const toPlainObject = (value) => JSON.parse(JSON.stringify(value))
const lastSnapshot = ref(toPlainObject(createDefaultForm(props.modelValue)))
watch( watch(
() => props.modelValue, () => props.modelValue,
(value) => { (value) => {
Object.assign(formData, createDefaultForm(value)) const normalized = createDefaultForm(value)
if (JSON.stringify(normalized) === JSON.stringify(lastSnapshot.value)) {
return
}
syncingFromParent = true
Object.assign(formData, normalized)
lastSnapshot.value = toPlainObject(normalized)
syncingFromParent = false
}, },
{ deep: true } { deep: true }
) )
@@ -114,7 +126,14 @@ watch(
watch( watch(
formData, formData,
(value) => { (value) => {
emit('update:modelValue', createDefaultForm(value)) if (syncingFromParent) return
const normalized = createDefaultForm(value)
if (JSON.stringify(normalized) === JSON.stringify(lastSnapshot.value)) {
return
}
lastSnapshot.value = toPlainObject(normalized)
emit('update:modelValue', normalized)
}, },
{ deep: true } { deep: true }
) )
@@ -125,7 +144,11 @@ const toggleAllSections = () => {
} }
const resetForm = () => { const resetForm = () => {
Object.assign(formData, createDefaultForm(props.modelValue)) const normalized = createDefaultForm(props.modelValue)
syncingFromParent = true
Object.assign(formData, normalized)
lastSnapshot.value = toPlainObject(normalized)
syncingFromParent = false
allExpanded.value = false allExpanded.value = false
expandAllTrigger.value += 1 expandAllTrigger.value += 1
} }