UNPKG

4.33 kBSource Map (JSON)View Raw
1{"version":3,"sources":["useLinkProps.tsx"],"names":["NavigationContainerRefContext","NavigationHelpersContext","React","Platform","useLinkTo","useLinkProps","to","action","root","useContext","navigation","linkTo","onPress","e","shouldHandle","OS","defaultPrevented","metaKey","altKey","ctrlKey","shiftKey","button","undefined","includes","currentTarget","target","preventDefault","dispatch","Error","href","accessibilityRole"],"mappings":"AAAA,SAEEA,6BAFF,EAGEC,wBAHF,QAIO,wBAJP;AAKA,OAAO,KAAKC,KAAZ,MAAuB,OAAvB;AACA,SAAgCC,QAAhC,QAAgD,cAAhD;AAEA,OAAOC,SAAP,MAA8B,aAA9B;;AAOA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,SAASC,YAAT,CAEb;AAAEC,EAAAA,EAAF;AAAMC,EAAAA;AAAN,CAFa,EAEqB;AAClC,QAAMC,IAAI,GAAGN,KAAK,CAACO,UAAN,CAAiBT,6BAAjB,CAAb;AACA,QAAMU,UAAU,GAAGR,KAAK,CAACO,UAAN,CAAiBR,wBAAjB,CAAnB;AACA,QAAMU,MAAM,GAAGP,SAAS,EAAxB;;AAEA,QAAMQ,OAAO,GACXC,CADc,IAEX;AAAA;;AACH,QAAIC,YAAY,GAAG,KAAnB;;AAEA,QAAIX,QAAQ,CAACY,EAAT,KAAgB,KAAhB,IAAyB,CAACF,CAA9B,EAAiC;AAC/BC,MAAAA,YAAY,GAAGD,CAAC,GAAG,CAACA,CAAC,CAACG,gBAAN,GAAyB,IAAzC;AACD,KAFD,MAEO,IACL,CAACH,CAAC,CAACG,gBAAH,IAAuB;AACvB;AACA,MAAEH,CAAC,CAACI,OAAF,IAAaJ,CAAC,CAACK,MAAf,IAAyBL,CAAC,CAACM,OAA3B,IAAsCN,CAAC,CAACO,QAA1C,CAFA,MAEuD;AACvD;AACCP,IAAAA,CAAC,CAACQ,MAAF,IAAY,IAAZ,IAAoBR,CAAC,CAACQ,MAAF,KAAa,CAJlC,KAIwC;AACxC;AACA,KAACC,SAAD,EAAY,IAAZ,EAAkB,EAAlB,EAAsB,MAAtB,EAA8BC,QAA9B,qBAAuCV,CAAC,CAACW,aAAzC,qDAAuC,iBAAiBC,MAAxD,CAPK,CAO2D;AAP3D,MAQL;AACAZ,QAAAA,CAAC,CAACa,cAAF;AACAZ,QAAAA,YAAY,GAAG,IAAf;AACD;;AAED,QAAIA,YAAJ,EAAkB;AAChB,UAAIP,MAAJ,EAAY;AACV,YAAIG,UAAJ,EAAgB;AACdA,UAAAA,UAAU,CAACiB,QAAX,CAAoBpB,MAApB;AACD,SAFD,MAEO,IAAIC,IAAJ,EAAU;AACfA,UAAAA,IAAI,CAACmB,QAAL,CAAcpB,MAAd;AACD,SAFM,MAEA;AACL,gBAAM,IAAIqB,KAAJ,CACJ,kFADI,CAAN;AAGD;AACF,OAVD,MAUO;AACLjB,QAAAA,MAAM,CAACL,EAAD,CAAN;AACD;AACF;AACF,GAnCD;;AAqCA,SAAO;AACLuB,IAAAA,IAAI,EAAEvB,EADD;AAELwB,IAAAA,iBAAiB,EAAE,MAFd;AAGLlB,IAAAA;AAHK,GAAP;AAKD","sourcesContent":["import {\n NavigationAction,\n NavigationContainerRefContext,\n NavigationHelpersContext,\n} from '@react-navigation/core';\nimport * as React from 'react';\nimport { GestureResponderEvent, Platform } from 'react-native';\n\nimport useLinkTo, { To } from './useLinkTo';\n\ntype Props<ParamList extends ReactNavigation.RootParamList> = {\n to: To<ParamList>;\n action?: NavigationAction;\n};\n\n/**\n * Hook to get props for an anchor tag so it can work with in page navigation.\n *\n * @param props.to Absolute path to screen (e.g. `/feeds/hot`).\n * @param props.action Optional action to use for in-page navigation. By default, the path is parsed to an action based on linking config.\n */\nexport default function useLinkProps<\n ParamList extends ReactNavigation.RootParamList\n>({ to, action }: Props<ParamList>) {\n const root = React.useContext(NavigationContainerRefContext);\n const navigation = React.useContext(NavigationHelpersContext);\n const linkTo = useLinkTo<ParamList>();\n\n const onPress = (\n e?: React.MouseEvent<HTMLAnchorElement, MouseEvent> | GestureResponderEvent\n ) => {\n let shouldHandle = false;\n\n if (Platform.OS !== 'web' || !e) {\n shouldHandle = e ? !e.defaultPrevented : true;\n } else if (\n !e.defaultPrevented && // onPress prevented default\n // @ts-expect-error: these properties exist on web, but not in React Native\n !(e.metaKey || e.altKey || e.ctrlKey || e.shiftKey) && // ignore clicks with modifier keys\n // @ts-expect-error: these properties exist on web, but not in React Native\n (e.button == null || e.button === 0) && // ignore everything but left clicks\n // @ts-expect-error: these properties exist on web, but not in React Native\n [undefined, null, '', 'self'].includes(e.currentTarget?.target) // let browser handle \"target=_blank\" etc.\n ) {\n e.preventDefault();\n shouldHandle = true;\n }\n\n if (shouldHandle) {\n if (action) {\n if (navigation) {\n navigation.dispatch(action);\n } else if (root) {\n root.dispatch(action);\n } else {\n throw new Error(\n \"Couldn't find a navigation object. Is your component inside NavigationContainer?\"\n );\n }\n } else {\n linkTo(to);\n }\n }\n };\n\n return {\n href: to,\n accessibilityRole: 'link' as const,\n onPress,\n };\n}\n"]}
\No newline at end of file