UNPKG

@dnb/eufemia

Version:

DNB Eufemia Design System UI Library

46 lines (45 loc) 1.75 kB
"use client"; import React, { useCallback, useContext, useRef } from 'react'; import WizardContext from '../Context/WizardContext'; import { createReferenceKey, useSharedState } from '../../../../shared/helpers/useSharedState'; const useLayoutEffect = typeof window === 'undefined' ? React.useEffect : React.useLayoutEffect; export default function useStep(id = null, { onStepChange } = {}) { const setFormError = useCallback(() => null, []); const wizardContext = useContext(WizardContext) || { setFormError }; if (onStepChange && !id && wizardContext.id) { id = wizardContext.id; } const sharedDataRef = useRef(null); sharedDataRef.current = useSharedState(id ? 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 && context.totalSteps !== totalSteps) { context.totalSteps = totalSteps; } useLayoutEffect(() => { const { onStepChangeEventsRef } = context || {}; if (onStepChange && onStepChangeEventsRef !== null && onStepChangeEventsRef !== void 0 && onStepChangeEventsRef.current && !onStepChangeEventsRef.current.has(onStepChange)) { onStepChangeEventsRef === null || onStepChangeEventsRef === void 0 ? void 0 : onStepChangeEventsRef.current.add(onStepChange); } }, [context, onStepChange]); useLayoutEffect(() => { if (id) { sharedDataRef.current.extend({}); } }, [id]); return context; } //# sourceMappingURL=useStep.js.map