import { useLocation } from 'react-router'; import { useMemo } from 'react'; export default () => { const location = useLocation(); const getHashObject = (value: string): Record => value .substring(1) .split('&') .reduce((obj, str) => { const [key = '', value = ''] = str.split('='); return !str.trim() ? obj : { ...obj, [key]: value }; }, {}); const pathTo = (params: Record): string => { const current = getHashObject(location.hash); for (const key in params) { current[key] = params[key] ?? ''; } return Object.keys(current) .map(key => `${key}=${current[key]}`) .join('&'); }; const hash = useMemo((): Record => getHashObject(location.hash), [location.hash]); return { hash, pathTo }; };