UNPKG

@dnb/eufemia

Version:

DNB Eufemia Design System UI Library

25 lines (24 loc) 1.46 kB
"use client"; import { useCallback, useContext, useMemo } from 'react'; import { createReferenceKey, createSharedState } 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 sharedDataContext = id ? createSharedState(createReferenceKey(id, 'data-context')) : null; const dataContext = useContext(DataContext); if (!id && !(dataContext !== null && dataContext !== void 0 && dataContext.hasContext)) { throw new Error(invalidUseSubmitErrorMessage); } const submit = useCallback(() => { var _context$handleSubmit, _context$handleSubmit2; const context = id ? sharedDataContext === null || sharedDataContext === void 0 ? void 0 : sharedDataContext.get() : dataContext; if (!(context !== null && context !== void 0 && context.hasContext)) { return Promise.reject(new Error(invalidUseSubmitErrorMessage)); } return (_context$handleSubmit = (_context$handleSubmit2 = context.handleSubmit) === null || _context$handleSubmit2 === void 0 ? void 0 : _context$handleSubmit2.call(context)) !== null && _context$handleSubmit !== void 0 ? _context$handleSubmit : Promise.resolve(undefined); }, [dataContext, id, sharedDataContext]); return useMemo(() => ({ submit }), [submit]); } //# sourceMappingURL=useSubmit.js.map