UNPKG

@dnb/eufemia

Version:

DNB Eufemia Design System UI Library

70 lines (69 loc) 3.92 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 === null || sharedContext === void 0 ? void 0 : sharedContext.hasErrors) || (data === null || data === void 0 ? void 0 : data.hasErrors) || !id && (context === null || context === void 0 ? void 0 : context.hasErrors) || fallback; const hasFieldError = (sharedContext === null || sharedContext === void 0 ? void 0 : sharedContext.hasFieldError) || (data === null || data === void 0 ? void 0 : data.hasFieldError) || !id && (context === null || context === void 0 ? void 0 : context.hasFieldError) || fallback; const setSubmitState = (sharedContext === null || sharedContext === void 0 ? void 0 : sharedContext.setSubmitState) || (data === null || data === void 0 ? void 0 : data.setSubmitState) || !id && (context === null || context === void 0 ? void 0 : context.setSubmitState) || fallback; const setFormError = useCallback(error => { setSubmitState === null || setSubmitState === void 0 || setSubmitState({ error }); }, [setSubmitState]); const { getFieldConnections, setFieldStatusCache } = useConnections(id); const setFieldStatus = useCallback((path, status) => { var _connections$path, _connections$path$set; setFieldStatusCache(path, status); const connections = getFieldConnections(); connections === null || connections === void 0 || (_connections$path = connections[path]) === null || _connections$path === void 0 || (_connections$path$set = _connections$path.setEventResult) === null || _connections$path$set === void 0 || _connections$path$set.call(_connections$path, 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 === null || sharedDataContext === void 0 ? void 0 : sharedDataContext.fieldConnectionsRef; const getFieldConnections = useCallback(() => { const attachments = get(); const connections = sharedFieldConnectionsRef || (attachments === null || attachments === void 0 ? void 0 : attachments.fieldConnectionsRef) || !id && fieldConnectionsRef; return connections === null || connections === void 0 ? void 0 : connections.current; }, [fieldConnectionsRef, get, id, sharedFieldConnectionsRef]); const setFieldStatusCache = useCallback((path, status) => { var _attachments$fieldSta; const attachments = get(); if (attachments !== null && attachments !== void 0 && (_attachments$fieldSta = attachments.fieldStatusRef) !== null && _attachments$fieldSta !== void 0 && _attachments$fieldSta.current) { attachments.fieldStatusRef.current[path] = status; } }, [get]); return useMemo(() => ({ getFieldConnections, setFieldStatusCache }), [getFieldConnections, setFieldStatusCache]); } //# sourceMappingURL=useValidation.js.map