UNPKG

@dnb/eufemia

Version:

DNB Eufemia Design System UI Library

72 lines (71 loc) 2.73 kB
"use strict"; "use client"; Object.defineProperty(exports, "__esModule", { value: true }); exports.default = useDataContextSnapshot; require("core-js/modules/web.dom-collections.iterator.js"); var _react = require("react"); var _Context = _interopRequireDefault(require("../../DataContext/Context")); var _Context2 = _interopRequireDefault(require("../../Wizard/Context")); var _IsolationContext = _interopRequireDefault(require("./IsolationContext")); var _IsolationDataReference = require("./IsolationDataReference"); var _structuredClone = _interopRequireDefault(require("@ungap/structured-clone")); function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; } function useDataContextSnapshot() { let { enabled } = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; 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)(_Context2.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)(function () { let data = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : null; update(data || (0, _structuredClone.default)(internalDataRef === null || internalDataRef === void 0 ? void 0 : internalDataRef.current)); forceUpdate(); }, [internalDataRef, update]); (0, _react.useEffect)(() => { if (enabled && eventsRef) { eventsRef.current.push(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)(() => { window.requestAnimationFrame(() => { if (snapshotRef) { const data = (0, _structuredClone.default)(snapshotRef.current); setIsolatedData(data); setData(data); updateHandler(data); } }); }, [setData, setIsolatedData, snapshotRef, updateHandler]); return { handleReset, snapshotRef }; } //# sourceMappingURL=useDataContextSnapshot.js.map