@dnb/eufemia
Version:
DNB Eufemia Design System UI Library
27 lines (26 loc) • 1.1 kB
JavaScript
"use client";
import { useCallback, useContext, useMemo } from 'react';
import { createReferenceKey, useSharedState } from "../../../../shared/helpers/useSharedState.js";
import DataContext from "../../DataContext/Context.js";
const invalidUseSubmitErrorMessage = 'Form.useSubmit needs to run inside Form.Handler or have a valid id';
export default function useSubmit(id) {
const {
get
} = useSharedState(createReferenceKey(id, 'data-context'));
const dataContext = useContext(DataContext);
if (!id && !dataContext?.hasContext) {
throw new Error(invalidUseSubmitErrorMessage);
}
const submit = useCallback(() => {
var _context$handleSubmit;
const context = id ? get() : dataContext;
if (!context?.hasContext) {
return Promise.reject(new Error(invalidUseSubmitErrorMessage));
}
return (_context$handleSubmit = context.handleSubmit?.()) !== null && _context$handleSubmit !== void 0 ? _context$handleSubmit : Promise.resolve(undefined);
}, [dataContext, get, id]);
return useMemo(() => ({
submit
}), [submit]);
}
//# sourceMappingURL=useSubmit.js.map