Skip to content

Commit

Permalink
refactor(form): reconcile PT member validation
Browse files Browse the repository at this point in the history
  • Loading branch information
skogsmaskin authored and rexxars committed Sep 23, 2022
1 parent 1e191be commit 6d2f18e
Showing 1 changed file with 11 additions and 4 deletions.
Original file line number Diff line number Diff line change
@@ -1,13 +1,17 @@
import {useMemo} from 'react'
import {useMemo, useRef} from 'react'
import {NodeValidation} from '@sanity/types'
import {BaseFormNode} from '../../../store'
import {EMPTY_ARRAY} from '../../../utils/empty'
import {useChildValidation} from '../../../studio/contexts/Validation'
import {_isBlockType} from '../_helpers'
import {immutableReconcile} from '../../../store/utils/immutableReconcile'

const NONEXISTENT_PATH = ['@@_NONEXISTENT_PATH_@@']

export function useMemberValidation(member: BaseFormNode | undefined) {
const memberValidation = member?.validation || EMPTY_ARRAY
const prev = useRef<NodeValidation[] | null>(null)
const memberValidation =
member?.validation && member.validation.length > 0 ? member.validation : EMPTY_ARRAY
const childValidation = useChildValidation(member?.path || NONEXISTENT_PATH)

const validation = useMemo(
Expand All @@ -27,12 +31,15 @@ export function useMemberValidation(member: BaseFormNode | undefined) {
[validation]
)

const reconciled = immutableReconcile(prev.current, validation)
prev.current = reconciled

return useMemo(() => {
return {
validation,
validation: reconciled,
hasError,
hasWarning,
hasInfo,
}
}, [validation, hasError, hasWarning, hasInfo])
}, [reconciled, hasError, hasWarning, hasInfo])
}

0 comments on commit 6d2f18e

Please sign in to comment.