UNPKG

@dnb/eufemia

Version:

DNB Eufemia Design System UI Library

58 lines 1.93 kB
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 useQueryLocator() { let id = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : undefined; const { setFormError } = useStep(id); const name = id ? `${id}-step` : 'step'; const onStepChange = useCallback(index => { try { const url = new URL(window.location.href); url.searchParams.set(name, String(index)); window.history.pushState({}, '', url.toString()); } catch (error) { setFormError(error); } }, [name, setFormError]); const { setActiveIndex } = useStep(id, { onStepChange }); const getIndex = useCallback(() => { try { const searchParams = new URLSearchParams(window.location.search); return parseFloat(searchParams.get(name)); } catch (error) { setFormError(error); } }, [name, setFormError]); useLayoutEffect(() => { try { const popstateListener = () => { const routerIndex = getIndex(); if (!isNaN(routerIndex)) { setActiveIndex === null || setActiveIndex === void 0 ? void 0 : setActiveIndex(routerIndex, { skipStepChangeCallFromHook: true, skipStepChangeCallBeforeMounted: true }); } }; popstateListener(); window.addEventListener('popstate', popstateListener); return () => window.removeEventListener('popstate', popstateListener); } catch (error) { setFormError(error); } }, [getIndex, id, setActiveIndex, setFormError]); return { getIndex }; } //# sourceMappingURL=useQueryLocator.js.map