UNPKG

@dnb/eufemia

Version:

DNB Eufemia Design System UI Library

48 lines (47 loc) 1.62 kB
"use client"; import _URLSearchParams from "core-js-pure/stable/url-search-params/index.js"; import _pushInstanceProperty from "core-js-pure/stable/instance/push.js"; import { useCallback } from 'react'; import useStep from "./useStep.js"; import { useIsomorphicLayoutEffect as useLayoutEffect } from "../../../../shared/helpers/useIsomorphicLayoutEffect.js"; export default function useNextRouter(id = null, { useRouter, usePathname, useSearchParams }) { const name = id ? `${id}-step` : 'step'; const { setFormError } = useStep(id); const router = useRouter(); const pathname = usePathname(); const searchParams = useSearchParams(); const onStepChange = useCallback(index => { try { const params = new _URLSearchParams(searchParams.toString()); params.set(name, String(index)); _pushInstanceProperty(router).call(router, `${pathname}?${params.toString()}`); } catch (error) { setFormError(error); } }, [name, pathname, router, searchParams, setFormError]); const { setActiveIndex } = useStep(id, { onStepChange }); const getIndex = useCallback(() => parseFloat(searchParams.get(name)), [name, searchParams]); useLayoutEffect(() => { const routerIndex = getIndex(); if (!isNaN(routerIndex)) { setActiveIndex === null || setActiveIndex === void 0 || setActiveIndex(routerIndex, { skipStepChangeCallFromHook: true, skipStepChangeCallBeforeMounted: true }); } }, [getIndex, id, searchParams, setActiveIndex, setFormError]); return { getIndex }; } //# sourceMappingURL=useNextRouter.js.map