{"version":3,"file":"useRouter-1b6bb1ed.js","sources":["../../src/App/AppNavigator.tsx","../../src/components/hooks/useRouter/useRouter.tsx"],"sourcesContent":["import { AxlClipboard } from \"@axl/accel-framework/utils\";\r\nimport qs from \"qs\";\r\nimport { NavigateFunction, NavigateOptions } from \"react-router\";\r\n\r\nexport type AppNavigatorOptions = {\r\n includeOrigin?: boolean;\r\n}\r\n\r\nexport class AppNavigatorLink {\r\n constructor(public relativeUrl: string,\r\n private navigateFn: NavigateFunction) {\r\n }\r\n\r\n get originUrl() {\r\n return `${window.location.origin}${this.relativeUrl}`;\r\n }\r\n\r\n async copyToClipboard(origin = false) {\r\n const url = origin ? this.originUrl : this.relativeUrl;\r\n return AxlClipboard.copyText(url);\r\n }\r\n\r\n navigate(options?: NavigateOptions) {\r\n this.navigateFn(this.relativeUrl, options);\r\n }\r\n}\r\n\r\nexport default class AppNavigator {\r\n origin = window.location.origin;\r\n\r\n constructor(private navigateFn: NavigateFunction) {\r\n }\r\n\r\n getUrl(url: string, options: AppNavigatorOptions = { includeOrigin: false }) {\r\n if (options.includeOrigin)\r\n return `${this.origin}${url}`;\r\n return url;\r\n }\r\n\r\n getNavigateLink(url: string) {\r\n return new AppNavigatorLink(url, this.navigateFn);\r\n }\r\n\r\n learn = {\r\n getLearnUrl: (id: string, tab?: string, opts?: {\r\n commentId?: string,\r\n taskId?: string,\r\n }) => {\r\n tab = tab ? `/${tab}` : '';\r\n const args = opts && qs.stringify(opts);\r\n return this.getNavigateLink(`/learn/${id}${tab}${args ? `?${args}` : ''}`);\r\n }\r\n }\r\n\r\n library = {\r\n getLibraryUrl: (id: string, stepId?: string) => {\r\n return this.getNavigateLink(`/library/${id}/${stepId ?? ''}`);\r\n }\r\n }\r\n}\r\n","import { isEmpty } from '@axl/accel-framework/utils';\r\nimport AppNavigator from 'App/AppNavigator';\r\nimport qs from 'qs';\r\nimport { useMemo } from 'react';\r\nimport { useLocation, useMatch, useNavigate, useParams as useRouteParams } from 'react-router';\r\n\r\nexport function useRouter() {\r\n const match = useMatch('*');\r\n const location = useLocation();\r\n const navigate = useNavigate();\r\n const navigator = useMemo(() => new AppNavigator(navigate), [navigate]);\r\n const params = useParams();\r\n return {\r\n match,\r\n location,\r\n params,\r\n navigate,\r\n navigator,\r\n // TODO replace all usages with navigate => delete\r\n history: {\r\n push: (url: string) => navigate(url),\r\n replace: (url: string) => navigate(url, { replace: true })\r\n }\r\n };\r\n}\r\n\r\nexport function useParams(): T {\r\n const routeParams = useRouteParams();\r\n\r\n let searchParams = {};\r\n const location = useLocation();\r\n if (!isEmpty(location.search))\r\n searchParams = qs.parse(location.search.substr(1));\r\n\r\n let hashParams = {};\r\n if (!isEmpty(location.hash)) {\r\n hashParams = qs.parse(location.hash.substr(1));\r\n }\r\n return { ...routeParams, ...searchParams, ...hashParams } as any;\r\n}"],"names":["AppNavigatorLink","relativeUrl","navigateFn","origin","url","AxlClipboard","options","AppNavigator","id","tab","opts","args","qs","stepId","useRouter","match","useMatch","location","useLocation","navigate","useNavigate","navigator","useMemo","params","useParams","routeParams","useRouteParams","searchParams","isEmpty","hashParams"],"mappings":"yIAQO,MAAMA,CAAiB,CAC1B,YAAmBC,EACPC,EAA8B,CADvB,KAAA,YAAAD,EACP,KAAA,WAAAC,CACZ,CAEA,IAAI,WAAY,CACZ,MAAO,GAAG,OAAO,SAAS,SAAS,KAAK,aAC5C,CAEA,MAAM,gBAAgBC,EAAS,GAAO,CAClC,MAAMC,EAAMD,EAAS,KAAK,UAAY,KAAK,YACpC,OAAAE,EAAa,SAASD,CAAG,CACpC,CAEA,SAASE,EAA2B,CAC3B,KAAA,WAAW,KAAK,YAAaA,CAAO,CAC7C,CACJ,CAEA,MAAqBC,CAAa,CAG9B,YAAoBL,EAA8B,CAA9B,KAAA,WAAAA,EAFpB,KAAA,OAAS,OAAO,SAAS,OAejB,KAAA,MAAA,CACJ,YAAa,CAACM,EAAYC,EAAcC,IAGlC,CACID,EAAAA,EAAM,IAAIA,IAAQ,GACxB,MAAME,EAAOD,GAAQE,EAAG,UAAUF,CAAI,EAC/B,OAAA,KAAK,gBAAgB,UAAUF,IAAKC,IAAME,EAAO,IAAIA,IAAS,IAAI,CAC7E,CAAA,EAGM,KAAA,QAAA,CACN,cAAe,CAACH,EAAYK,IACjB,KAAK,gBAAgB,YAAYL,KAAMK,GAAA,KAAAA,EAAU,IAAI,CAChE,CA1BJ,CAEA,OAAOT,EAAaE,EAA+B,CAAE,cAAe,IAAS,CACzE,OAAIA,EAAQ,cACD,GAAG,KAAK,SAASF,IACrBA,CACX,CAEA,gBAAgBA,EAAa,CACzB,OAAO,IAAIJ,EAAiBI,EAAK,KAAK,UAAU,CACpD,CAkBJ,CCrDO,SAASU,GAAoB,CAC1B,MAAAC,EAAQC,EAAS,GAAG,EACpBC,EAAWC,IACXC,EAAWC,IACXC,EAAYC,UAAQ,IAAM,IAAIf,EAAaY,CAAQ,EAAG,CAACA,CAAQ,CAAC,EAChEI,EAASC,IACR,MAAA,CACH,MAAAT,EACA,SAAAE,EACA,OAAAM,EACA,SAAAJ,EACA,UAAAE,EAEA,QAAS,CACL,KAAOjB,GAAgBe,EAASf,CAAG,EACnC,QAAUA,GAAgBe,EAASf,EAAK,CAAE,QAAS,GAAM,CAC7D,CAAA,CAER,CAEO,SAASoB,GAAkB,CAC9B,MAAMC,EAAcC,IAEpB,IAAIC,EAAe,CAAA,EACnB,MAAMV,EAAWC,IACZU,EAAQX,EAAS,MAAM,IACxBU,EAAef,EAAG,MAAMK,EAAS,OAAO,OAAO,CAAC,CAAC,GAErD,IAAIY,EAAa,CAAA,EACjB,OAAKD,EAAQX,EAAS,IAAI,IACtBY,EAAajB,EAAG,MAAMK,EAAS,KAAK,OAAO,CAAC,CAAC,GAE1C,CAAE,GAAGQ,EAAa,GAAGE,EAAc,GAAGE,CAAW,CAC5D"}