UNPKG

@dnb/eufemia

Version:

DNB Eufemia Design System UI Library

70 lines (69 loc) 3.15 kB
"use strict"; "use client"; Object.defineProperty(exports, "__esModule", { value: true }); exports.default = useValidation; var _react = require("react"); var _useSharedState = require("../../../../shared/helpers/useSharedState.js"); var _Context = _interopRequireDefault(require("../../DataContext/Context.js")); function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; } function useValidation(id = undefined) { const sharedDataContext = id ? (0, _useSharedState.createSharedState)((0, _useSharedState.createReferenceKey)(id, 'data-context')) : null; const { data } = (0, _useSharedState.useSharedState)(id ? (0, _useSharedState.createReferenceKey)(id, 'attachments') : undefined); const fallback = (0, _react.useCallback)(() => false, []); const context = (0, _react.useContext)(_Context.default); const sharedContext = id ? sharedDataContext?.get() : 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 = (0, _react.useCallback)(error => { setSubmitState?.({ error }); }, [setSubmitState]); const { getFieldConnections, setFieldStatusCache } = useConnections(id); const setFieldStatus = (0, _react.useCallback)((path, status) => { setFieldStatusCache(path, status); const connections = getFieldConnections(); connections?.[path]?.setEventResult?.(status); }, [getFieldConnections, setFieldStatusCache]); return (0, _react.useMemo)(() => ({ hasErrors, hasFieldError, setFormError, setFieldStatus }), [hasErrors, hasFieldError, setFormError, setFieldStatus]); } function useConnections(id = undefined) { const sharedDataContext = id ? (0, _useSharedState.createSharedState)((0, _useSharedState.createReferenceKey)(id, 'data-context')) : null; const { get } = (0, _useSharedState.useSharedState)(id ? (0, _useSharedState.createReferenceKey)(id, 'attachments') : undefined); const dataContext = (0, _react.useContext)(_Context.default); const { fieldConnectionsRef } = dataContext || {}; const sharedFieldConnectionsRef = sharedDataContext?.get()?.fieldConnectionsRef; const getFieldConnections = (0, _react.useCallback)(() => { const attachments = get(); const connections = sharedFieldConnectionsRef || attachments?.fieldConnectionsRef || !id && fieldConnectionsRef; return connections?.current; }, [fieldConnectionsRef, get, id, sharedFieldConnectionsRef]); const setFieldStatusCache = (0, _react.useCallback)((path, status) => { const attachments = get(); if (attachments?.fieldStatusRef?.current) { attachments.fieldStatusRef.current[path] = status; } }, [get]); return (0, _react.useMemo)(() => ({ getFieldConnections, setFieldStatusCache }), [getFieldConnections, setFieldStatusCache]); } //# sourceMappingURL=useValidation.js.map