@dnb/eufemia
Version:
DNB Eufemia Design System UI Library
54 lines • 1.73 kB
JavaScript
import "core-js/modules/web.dom-collections.iterator.js";
import "core-js/modules/web.url.js";
import "core-js/modules/web.url.to-json.js";
import "core-js/modules/web.url-search-params.js";
import React, { useCallback } from 'react';
import useStep from './useStep';
const useLayoutEffect = typeof window === 'undefined' ? React.useEffect : React.useLayoutEffect;
export default function useReachRouter() {
let id = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : null;
let {
useLocation,
navigate
} = arguments.length > 1 ? arguments[1] : undefined;
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 === null || setActiveIndex === void 0 ? void 0 : setActiveIndex(routerIndex, {
skipStepChangeCallFromHook: true,
skipStepChangeCallBeforeMounted: true
});
}
}, [getIndex, setActiveIndex]);
return {
getIndex
};
}
//# sourceMappingURL=useReachRouter.js.map