UNPKG

@dnb/eufemia

Version:

DNB Eufemia Design System UI Library

69 lines (68 loc) 2.62 kB
"use strict"; "use client"; Object.defineProperty(exports, "__esModule", { value: true }); exports.default = useDataContextSnapshot; var _push = _interopRequireDefault(require("core-js-pure/stable/instance/push.js")); var _react = require("react"); var _Context = _interopRequireDefault(require("../../DataContext/Context.js")); var _index = _interopRequireDefault(require("../../Wizard/Context/index.js")); var _IsolationContext = _interopRequireDefault(require("./IsolationContext.js")); var _IsolationDataReference = require("./IsolationDataReference.js"); var _structuredClone = require("../../../../shared/helpers/structuredClone.js"); function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; } function useDataContextSnapshot({ enabled } = {}) { const [, forceUpdate] = (0, _react.useReducer)(() => ({}), {}); const { internalDataRef, setData } = (0, _react.useContext)(_Context.default); const isolationContext = (0, _react.useContext)(_IsolationContext.default); const hasWizard = Boolean((0, _react.useContext)(_index.default)); const [dataReferenceFallback] = (0, _react.useState)(() => { if (enabled && !(isolationContext !== null && isolationContext !== void 0 && isolationContext.dataReference)) { return (0, _IsolationDataReference.createDataReference)(); } }); const { dataReference = dataReferenceFallback, setIsolatedData } = isolationContext || {}; const { snapshotRef, eventsRef, update, refresh, cleanup } = dataReference || {}; const updateHandler = (0, _react.useCallback)((data = null) => { update(data || (0, _structuredClone.structuredClone)(internalDataRef === null || internalDataRef === void 0 ? void 0 : internalDataRef.current)); forceUpdate(); }, [internalDataRef, update]); (0, _react.useEffect)(() => { if (enabled && eventsRef) { var _context; (0, _push.default)(_context = eventsRef.current).call(_context, updateHandler); refresh({ deferred: hasWizard }); } return () => cleanup === null || cleanup === void 0 ? void 0 : cleanup(updateHandler); }, [cleanup, enabled, eventsRef, hasWizard, refresh, updateHandler]); const handleReset = (0, _react.useCallback)(() => { if (snapshotRef) { const data = (0, _structuredClone.structuredClone)(snapshotRef.current); setIsolatedData(data); setData(data); updateHandler(data); } }, [setData, setIsolatedData, snapshotRef, updateHandler]); return { handleReset, snapshotRef }; } //# sourceMappingURL=useDataContextSnapshot.js.map