UNPKG

@dnb/eufemia

Version:

DNB Eufemia Design System UI Library

80 lines (79 loc) 3.25 kB
"use strict"; "use client"; Object.defineProperty(exports, "__esModule", { value: true }); exports.default = useStep; var _push = _interopRequireDefault(require("core-js-pure/stable/instance/push.js")); var _react = require("react"); var _WizardContext = _interopRequireDefault(require("../Context/WizardContext.js")); var _useSharedState = require("../../../../shared/helpers/useSharedState.js"); var _useIsomorphicLayoutEffect = require("../../../../shared/helpers/useIsomorphicLayoutEffect.js"); function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; } function useStep(id = null, { onStepChange } = {}) { const setFormError = (0, _react.useCallback)(() => null, []); const wizardContext = (0, _react.useContext)(_WizardContext.default) || { setFormError }; if (onStepChange && !id && wizardContext.id) { id = wizardContext.id; } const sharedDataRef = (0, _react.useRef)(null); sharedDataRef.current = (0, _useSharedState.useSharedState)(id ? (0, _useSharedState.createReferenceKey)(id, 'wizard') : undefined); const data = sharedDataRef.current.data; if (data && !data.setFormError) { data.setFormError = setFormError; } const context = data || wizardContext; const { totalStepsRef } = context; const totalSteps = (totalStepsRef === null || totalStepsRef === void 0 ? void 0 : totalStepsRef.current) || 0; if (context.totalSteps !== totalSteps) { context.totalSteps = totalSteps; } const actualSetActiveIndex = context.setActiveIndex; const pendingSetActiveIndexCallsRef = (0, _react.useRef)([]); const setActiveIndexRef = (0, _react.useRef)(); const setActiveIndexFromHook = (0, _react.useCallback)((index, options) => { var _context; const handler = setActiveIndexRef.current; if (handler) { handler(index, options); return; } (0, _push.default)(_context = pendingSetActiveIndexCallsRef.current).call(_context, [index, options]); }, []); (0, _useIsomorphicLayoutEffect.useIsomorphicLayoutEffect)(() => { setActiveIndexRef.current = actualSetActiveIndex; if (actualSetActiveIndex && pendingSetActiveIndexCallsRef.current.length > 0) { pendingSetActiveIndexCallsRef.current.forEach(([index, options]) => { actualSetActiveIndex(index, options); }); pendingSetActiveIndexCallsRef.current = []; } }, [actualSetActiveIndex]); (0, _useIsomorphicLayoutEffect.useIsomorphicLayoutEffect)(() => { const { onStepChangeEventsRef } = context; if (onStepChange && onStepChangeEventsRef !== null && onStepChangeEventsRef !== void 0 && onStepChangeEventsRef.current && !onStepChangeEventsRef.current.has(onStepChange)) { onStepChangeEventsRef === null || onStepChangeEventsRef === void 0 || onStepChangeEventsRef.current.add(onStepChange); } }, [context, onStepChange]); (0, _useIsomorphicLayoutEffect.useIsomorphicLayoutEffect)(() => { if (id) { sharedDataRef.current.extend({}); } }, [id]); const contextWithBridge = (0, _react.useMemo)(() => { return { ...context, setActiveIndex: setActiveIndexFromHook }; }, [context, setActiveIndexFromHook]); return contextWithBridge; } //# sourceMappingURL=useStep.js.map