UNPKG

@dnb/eufemia

Version:

DNB Eufemia Design System UI Library

50 lines (49 loc) 1.37 kB
"use client"; import { useCallback } from 'react'; import useStep from "./useStep.js"; import { useIsomorphicLayoutEffect as useLayoutEffect } from "../../../../shared/helpers/useIsomorphicLayoutEffect.js"; export default function useReachRouter(id = null, { useLocation, navigate }) { const name = id ? `${id}-step` : 'step'; const { setFormError } = useStep(id); const location = useLocation(); const onStepChange = useCallback(index => { try { const url = new URL(location.href); url.searchParams.set(name, String(index)); navigate(url.href); } catch (error) { setFormError(error); } }, [location.href, name, navigate, setFormError]); const { setActiveIndex } = useStep(id, { onStepChange }); const getIndex = useCallback(() => { try { const searchParams = new URLSearchParams(location.search); return parseFloat(searchParams.get(name)); } catch (error) { setFormError(error); } }, [location.search, name, setFormError]); useLayoutEffect(() => { const routerIndex = getIndex(); if (!isNaN(routerIndex)) { setActiveIndex?.(routerIndex, { skipStepChangeCallFromHook: true, skipStepChangeCallBeforeMounted: true }); } }, [getIndex, setActiveIndex]); return { getIndex }; } //# sourceMappingURL=useReachRouter.js.map