{ "version": 3, "sources": ["../../../../../../owl-nest/ulule/common/react-router-compat/index.tsx"], "sourcesContent": ["import * as React from 'react'\nimport {\n useNavigate as useBaseNavigate,\n useLocation,\n useParams,\n useBlocker,\n type BlockerFunction,\n NavigateFunction,\n NavigateOptions,\n} from 'react-router-dom'\nimport type { To, Location } from 'history'\n\ntype WithRouterExtraProps = {\n history: {\n push: (to: To) => void\n }\n location: Location\n match: {\n params: PARAMS\n }\n}\n\nexport function withRouter>>(\n Component: React.ComponentType,\n): React.ComponentType {\n ;(WithRouter as React.ComponentType).displayName = `WithRouter(${Component.displayName ?? '??'})`\n\n return WithRouter\n\n function WithRouter(props: PROPS) {\n const navigate = useNavigate()\n const location = useLocation()\n const params = useParams()\n\n return (\n {\n navigate(to)\n },\n }}\n location={location}\n match={{\n params,\n }}\n />\n )\n }\n}\n\ntype PromptProps = {\n message: string\n when: boolean\n}\n\nexport function Prompt({ message, when }: PromptProps) {\n useExtremelyUnstableAndDangerousPrompt(message, when)\n return null\n}\n\nexport function useExtremelyUnstableAndDangerousPrompt(message: string, when = true) {\n const mountedRef = React.useRef(false)\n\n React.useEffect(() => {\n mountedRef.current = true\n return () => {\n mountedRef.current = false\n }\n }, [])\n\n const blocker = React.useCallback(() => {\n if (!mountedRef.current) {\n return false\n }\n if (when) {\n return !window.confirm(message)\n }\n return false\n }, [message, when])\n\n useBlocker(blocker)\n}\n\nexport function useNavigate(): NavigateFunction {\n const baseNavigate = useBaseNavigate()\n const [call, setCall] = React.useState<[To | number, NavigateOptions | undefined] | undefined>(undefined)\n\n // Navigating after multiple state update does not work because react-router\n // uses transitions that are canceled by other state updates. Instead we set\n // in a state the url to navigate and after the state has setled (so in the\n // useEffect), we navigate\n\n React.useEffect(() => {\n if (call !== undefined) {\n if (typeof call[0] === 'number') {\n baseNavigate(call[0])\n } else {\n baseNavigate(call[0], call[1])\n }\n }\n }, [call])\n\n return ((toOrDelta: To | number, options: NavigateOptions | undefined) => {\n if (typeof toOrDelta === 'number') {\n setCall([toOrDelta, undefined])\n } else {\n setCall([toOrDelta, options])\n }\n }) as NavigateFunction\n}\n"], "mappings": "8LAAAA,IAAAC,IAAA,IAAAC,EAAuB,OAsBhB,SAASC,EACdC,EAC4B,CAxB9B,IAAAC,EAyBG,OAACC,EAA0C,YAAc,cAAc,QAAAD,EAAAD,EAAU,cAAV,KAAAC,EAAyB,KAAI,KAE9FC,EAEP,SAASA,EAAWC,EAAc,CAChC,IAAMC,EAAWC,EAAY,EACvBC,EAAWC,EAAY,EACvBC,EAASC,EAAU,EAEzB,OACE,gBAACT,EAAAU,EAAAC,EAAA,GACKR,GADL,CAEC,QAAS,CACP,KAAOS,GAAO,CACZR,EAASQ,CAAE,CACb,CACF,EACA,SAAUN,EACV,MAAO,CACL,OAAAE,CACF,GACF,CAEJ,CACF,CAYO,SAASK,EAAuCC,EAAiBC,EAAO,GAAM,CACnF,IAAMC,EAAmB,SAAgB,EAAK,EAExC,YAAU,KACdA,EAAW,QAAU,GACd,IAAM,CACXA,EAAW,QAAU,EACvB,GACC,CAAC,CAAC,EAEL,IAAMC,EAAgB,cAA6B,IAC5CD,EAAW,SAGZD,EACK,CAAC,OAAO,QAAQD,CAAO,EAHvB,GAMR,CAACA,EAASC,CAAI,CAAC,EAElBG,EAAWD,CAAO,CACpB,CAEO,SAASE,GAAgC,CAC9C,IAAMC,EAAeD,EAAgB,EAC/B,CAACE,EAAMC,CAAO,EAAU,WAAiE,MAAS,EAOxG,OAAM,YAAU,IAAM,CAChBD,IAAS,SACP,OAAOA,EAAK,CAAC,GAAM,SACrBD,EAAaC,EAAK,CAAC,CAAC,EAEpBD,EAAaC,EAAK,CAAC,EAAGA,EAAK,CAAC,CAAC,EAGnC,EAAG,CAACA,CAAI,CAAC,EAED,CAACE,EAAwBC,IAAyC,CAEtEF,EADE,OAAOC,GAAc,SACf,CAACA,EAAW,MAAS,EAErB,CAACA,EAAWC,CAAO,CAFG,CAIlC,CACF", "names": ["init_define_process_env", "init_sentry_release_injection_stub", "React", "withRouter", "Component", "_a", "WithRouter", "props", "navigate", "useNavigate", "location", "useLocation", "params", "useParams", "__spreadProps", "__spreadValues", "to", "useExtremelyUnstableAndDangerousPrompt", "message", "when", "mountedRef", "blocker", "useBlocker", "useNavigate", "baseNavigate", "call", "setCall", "toOrDelta", "options"] }