UNPKG

3.03 kBSource Map (JSON)View Raw
1{"version":3,"sources":["useLinkTo.tsx"],"names":["useLinkTo","navigation","React","useContext","NavigationContext","linking","LinkingContext","linkTo","useCallback","path","startsWith","Error","undefined","options","state","getStateFromPath","config","root","current","dangerouslyGetParent","action","dispatch","reset"],"mappings":";;;;;;;AAAA;;AACA;;AAKA;;;;;;;;AAEe,SAASA,SAAT,GAAqB;AAClC,QAAMC,UAAU,GAAGC,KAAK,CAACC,UAAN,CAAiBC,uBAAjB,CAAnB;AACA,QAAMC,OAAO,GAAGH,KAAK,CAACC,UAAN,CAAiBG,uBAAjB,CAAhB;AAEA,QAAMC,MAAM,GAAGL,KAAK,CAACM,WAAN,CACZC,IAAD,IAAkB;AAChB,QAAI,CAACA,IAAI,CAACC,UAAL,CAAgB,GAAhB,CAAL,EAA2B;AACzB,YAAM,IAAIC,KAAJ,yCAA2CF,IAA3C,QAAN;AACD;;AAED,QAAIR,UAAU,KAAKW,SAAnB,EAA8B;AAC5B,YAAM,IAAID,KAAJ,CACJ,sFADI,CAAN;AAGD;;AAED,UAAM;AAAEE,MAAAA;AAAF,QAAcR,OAApB;AAEA,UAAMS,KAAK,GAAGD,OAAO,SAAP,IAAAA,OAAO,WAAP,IAAAA,OAAO,CAAEE,gBAAT,GACVF,OAAO,CAACE,gBAAR,CAAyBN,IAAzB,EAA+BI,OAAO,CAACG,MAAvC,CADU,GAEV,4BAAiBP,IAAjB,EAAuBI,OAAvB,aAAuBA,OAAvB,uBAAuBA,OAAO,CAAEG,MAAhC,CAFJ;;AAIA,QAAIF,KAAJ,EAAW;AACT,UAAIG,IAAI,GAAGhB,UAAX;AACA,UAAIiB,OAAJ,CAFS,CAIT;;AACA,aAAQA,OAAO,GAAGD,IAAI,CAACE,oBAAL,EAAlB,EAAgD;AAC9CF,QAAAA,IAAI,GAAGC,OAAP;AACD;;AAED,YAAME,MAAM,GAAG,8BAAmBN,KAAnB,EAA0BD,OAA1B,aAA0BA,OAA1B,uBAA0BA,OAAO,CAAEG,MAAnC,CAAf;;AAEA,UAAII,MAAM,KAAKR,SAAf,EAA0B;AACxBK,QAAAA,IAAI,CAACI,QAAL,CAAcD,MAAd;AACD,OAFD,MAEO;AACLH,QAAAA,IAAI,CAACK,KAAL,CAAWR,KAAX;AACD;AACF,KAhBD,MAgBO;AACL,YAAM,IAAIH,KAAJ,CAAU,iDAAV,CAAN;AACD;AACF,GArCY,EAsCb,CAACN,OAAD,EAAUJ,UAAV,CAtCa,CAAf;AAyCA,SAAOM,MAAP;AACD","sourcesContent":["import * as React from 'react';\nimport {\n getStateFromPath,\n getActionFromState,\n NavigationContext,\n} from '@react-navigation/core';\nimport LinkingContext from './LinkingContext';\n\nexport default function useLinkTo() {\n const navigation = React.useContext(NavigationContext);\n const linking = React.useContext(LinkingContext);\n\n const linkTo = React.useCallback(\n (path: string) => {\n if (!path.startsWith('/')) {\n throw new Error(`The path must start with '/' (${path}).`);\n }\n\n if (navigation === undefined) {\n throw new Error(\n \"Couldn't find a navigation object. Is your component inside a screen in a navigator?\"\n );\n }\n\n const { options } = linking;\n\n const state = options?.getStateFromPath\n ? options.getStateFromPath(path, options.config)\n : getStateFromPath(path, options?.config);\n\n if (state) {\n let root = navigation;\n let current;\n\n // Traverse up to get the root navigation\n while ((current = root.dangerouslyGetParent())) {\n root = current;\n }\n\n const action = getActionFromState(state, options?.config);\n\n if (action !== undefined) {\n root.dispatch(action);\n } else {\n root.reset(state);\n }\n } else {\n throw new Error('Failed to parse the path to a navigation state.');\n }\n },\n [linking, navigation]\n );\n\n return linkTo;\n}\n"]}
\No newline at end of file