@dnb/eufemia
Version:
DNB Eufemia Design System UI Library
44 lines • 1.41 kB
JavaScript
import React, { useCallback } from 'react';
import useStep from './useStep';
const useLayoutEffect = typeof window === 'undefined' ? React.useEffect : React.useLayoutEffect;
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));
router.push(`${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 ? void 0 : setActiveIndex(routerIndex, {
skipStepChangeCallFromHook: true,
skipStepChangeCallBeforeMounted: true
});
}
}, [getIndex, id, searchParams, setActiveIndex, setFormError]);
return {
getIndex
};
}
//# sourceMappingURL=useNextRouter.js.map