UNPKG

@dnb/eufemia

Version:

DNB Eufemia Design System UI Library

68 lines (67 loc) 2.73 kB
"use client"; import { useCallback, useContext, useMemo } from 'react'; import { createReferenceKey, useSharedState } from "../../../../shared/helpers/useSharedState.js"; import DataContext from "../../DataContext/Context.js"; export default function useValidation(id = undefined) { const { data: sharedDataContext } = useSharedState(id ? createReferenceKey(id, 'data-context') : undefined); const { data } = useSharedState(id ? createReferenceKey(id, 'attachments') : undefined); const fallback = useCallback(() => false, []); const context = useContext(DataContext); const sharedContext = id ? sharedDataContext : undefined; const hasErrors = sharedContext?.hasErrors || data?.hasErrors || !id && context?.hasErrors || fallback; const hasFieldError = sharedContext?.hasFieldError || data?.hasFieldError || !id && context?.hasFieldError || fallback; const setSubmitState = sharedContext?.setSubmitState || data?.setSubmitState || !id && context?.setSubmitState || fallback; const setFormError = useCallback(error => { setSubmitState?.({ error }); }, [setSubmitState]); const { getFieldConnections, setFieldStatusCache } = useConnections(id); const setFieldStatus = useCallback((path, status) => { setFieldStatusCache(path, status); const connections = getFieldConnections(); connections?.[path]?.setEventResult?.(status); }, [getFieldConnections, setFieldStatusCache]); return useMemo(() => ({ hasErrors, hasFieldError, setFormError, setFieldStatus }), [hasErrors, hasFieldError, setFormError, setFieldStatus]); } function useConnections(id = undefined) { const { data: sharedDataContext } = useSharedState(id ? createReferenceKey(id, 'data-context') : undefined); const { get } = useSharedState(id ? createReferenceKey(id, 'attachments') : undefined); const dataContext = useContext(DataContext); const { fieldConnectionsRef } = dataContext || {}; const sharedFieldConnectionsRef = sharedDataContext?.fieldConnectionsRef; const getFieldConnections = useCallback(() => { const attachments = get(); const connections = sharedFieldConnectionsRef || attachments?.fieldConnectionsRef || !id && fieldConnectionsRef; return connections?.current; }, [fieldConnectionsRef, get, id, sharedFieldConnectionsRef]); const setFieldStatusCache = useCallback((path, status) => { const attachments = get(); if (attachments?.fieldStatusRef?.current) { attachments.fieldStatusRef.current[path] = status; } }, [get]); return useMemo(() => ({ getFieldConnections, setFieldStatusCache }), [getFieldConnections, setFieldStatusCache]); } //# sourceMappingURL=useValidation.js.map