@dnb/eufemia
Version:
DNB Eufemia Design System UI Library
70 lines (69 loc) • 3.92 kB
JavaScript
"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