@dnb/eufemia
Version:
DNB Eufemia Design System UI Library
31 lines (30 loc) • 1.4 kB
JavaScript
;
"use client";
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = useSubmit;
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 }; }
const invalidUseSubmitErrorMessage = 'Form.useSubmit needs to run inside Form.Handler or have a valid id';
function useSubmit(id) {
const sharedDataContext = id ? (0, _useSharedState.createSharedState)((0, _useSharedState.createReferenceKey)(id, 'data-context')) : null;
const dataContext = (0, _react.useContext)(_Context.default);
if (!id && !dataContext?.hasContext) {
throw new Error(invalidUseSubmitErrorMessage);
}
const submit = (0, _react.useCallback)(() => {
var _context$handleSubmit;
const context = id ? sharedDataContext?.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, id, sharedDataContext]);
return (0, _react.useMemo)(() => ({
submit
}), [submit]);
}
//# sourceMappingURL=useSubmit.js.map