UNPKG

2.38 kBSource Map (JSON)View Raw
1{"version":3,"names":["React","useNavigation","useNavigationState","selector","navigation","setResult","useState","getState","selectorRef","useRef","useEffect","current","unsubscribe","addListener","e","data","state"],"sources":["useNavigationState.tsx"],"sourcesContent":["import type { NavigationState, ParamListBase } from '@react-navigation/routers';\nimport * as React from 'react';\n\nimport type { NavigationProp } from './types';\nimport useNavigation from './useNavigation';\n\ntype Selector<ParamList extends ParamListBase, T> = (\n state: NavigationState<ParamList>\n) => T;\n\n/**\n * Hook to get a value from the current navigation state using a selector.\n *\n * @param selector Selector function to get a value from the state.\n */\nexport default function useNavigationState<ParamList extends ParamListBase, T>(\n selector: Selector<ParamList, T>\n): T {\n const navigation = useNavigation<NavigationProp<ParamList>>();\n\n // We don't care about the state value, we run the selector again at the end\n // The state is only to make sure that there's a re-render when we have a new value\n const [, setResult] = React.useState(() => selector(navigation.getState()));\n\n // We store the selector in a ref to avoid re-subscribing listeners every render\n const selectorRef = React.useRef(selector);\n\n React.useEffect(() => {\n selectorRef.current = selector;\n });\n\n React.useEffect(() => {\n const unsubscribe = navigation.addListener('state', (e) => {\n setResult(selectorRef.current(e.data.state));\n });\n\n return unsubscribe;\n }, [navigation]);\n\n return selector(navigation.getState());\n}\n"],"mappings":"AACA,OAAO,KAAKA,KAAZ,MAAuB,OAAvB;AAGA,OAAOC,aAAP,MAA0B,iBAA1B;;AAMA;AACA;AACA;AACA;AACA;AACA,eAAe,SAASC,kBAAT,CACbC,QADa,EAEV;EACH,MAAMC,UAAU,GAAGH,aAAa,EAAhC,CADG,CAGH;EACA;;EACA,MAAM,GAAGI,SAAH,IAAgBL,KAAK,CAACM,QAAN,CAAe,MAAMH,QAAQ,CAACC,UAAU,CAACG,QAAX,EAAD,CAA7B,CAAtB,CALG,CAOH;;EACA,MAAMC,WAAW,GAAGR,KAAK,CAACS,MAAN,CAAaN,QAAb,CAApB;EAEAH,KAAK,CAACU,SAAN,CAAgB,MAAM;IACpBF,WAAW,CAACG,OAAZ,GAAsBR,QAAtB;EACD,CAFD;EAIAH,KAAK,CAACU,SAAN,CAAgB,MAAM;IACpB,MAAME,WAAW,GAAGR,UAAU,CAACS,WAAX,CAAuB,OAAvB,EAAiCC,CAAD,IAAO;MACzDT,SAAS,CAACG,WAAW,CAACG,OAAZ,CAAoBG,CAAC,CAACC,IAAF,CAAOC,KAA3B,CAAD,CAAT;IACD,CAFmB,CAApB;IAIA,OAAOJ,WAAP;EACD,CAND,EAMG,CAACR,UAAD,CANH;EAQA,OAAOD,QAAQ,CAACC,UAAU,CAACG,QAAX,EAAD,CAAf;AACD"}
\No newline at end of file