Merge pull request #5637 from Budibase/fix/conditional-form-validation

Deregister field validation when unmounting form fields
This commit is contained in:
Michael Drury 2022-05-04 13:31:17 +01:00 committed by GitHub
commit e6cb9917df
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 17 additions and 1 deletions

View File

@ -44,7 +44,6 @@
fieldApi = value?.fieldApi fieldApi = value?.fieldApi
fieldSchema = value?.fieldSchema fieldSchema = value?.fieldSchema
}) })
onDestroy(() => unsubscribe?.())
// Determine label class from position // Determine label class from position
$: labelClass = labelPos === "above" ? "" : `spectrum-FieldLabel--${labelPos}` $: labelClass = labelPos === "above" ? "" : `spectrum-FieldLabel--${labelPos}`
@ -52,6 +51,11 @@
const updateLabel = e => { const updateLabel = e => {
builderStore.actions.updateProp("label", e.target.textContent) builderStore.actions.updateProp("label", e.target.textContent)
} }
onDestroy(() => {
fieldApi?.deregister()
unsubscribe?.()
})
</script> </script>
<FieldGroupFallback> <FieldGroupFallback>

View File

@ -329,6 +329,17 @@
} }
} }
// We don't want to actually remove the field state when deregistering, just
// remove any errors and validation
const deregister = () => {
const fieldInfo = getField(field)
fieldInfo.update(state => {
state.fieldState.validator = null
state.fieldState.error = null
return state
})
}
// Updates the disabled state of a certain field // Updates the disabled state of a certain field
const setDisabled = fieldDisabled => { const setDisabled = fieldDisabled => {
const fieldInfo = getField(field) const fieldInfo = getField(field)
@ -348,6 +359,7 @@
reset, reset,
updateValidation, updateValidation,
setDisabled, setDisabled,
deregister,
validate: () => { validate: () => {
// Validate the field by force setting the same value again // Validate the field by force setting the same value again
const { fieldState } = get(getField(field)) const { fieldState } = get(getField(field))