UNPKG

6.79 kBSource Map (JSON)View Raw
1{"version":3,"names":["getPathFromState","NavigationContainerRefContext","NavigationHelpersContext","React","Platform","LinkingContext","useLinkTo","getStateFromParams","params","state","screen","routes","name","undefined","useLinkProps","to","action","root","useContext","navigation","options","linkTo","onPress","e","shouldHandle","OS","defaultPrevented","metaKey","altKey","ctrlKey","shiftKey","button","includes","currentTarget","target","preventDefault","dispatch","Error","getPathFromStateHelper","href","config","accessibilityRole"],"sources":["useLinkProps.tsx"],"sourcesContent":["import {\n getPathFromState,\n NavigationAction,\n NavigationContainerRefContext,\n NavigationHelpersContext,\n NavigatorScreenParams,\n ParamListBase,\n} from '@react-navigation/core';\nimport type { NavigationState, PartialState } from '@react-navigation/routers';\nimport * as React from 'react';\nimport { GestureResponderEvent, Platform } from 'react-native';\n\nimport LinkingContext from './LinkingContext';\nimport useLinkTo, { To } from './useLinkTo';\n\ntype Props<ParamList extends ReactNavigation.RootParamList> = {\n to: To<ParamList>;\n action?: NavigationAction;\n};\n\nconst getStateFromParams = (\n params: NavigatorScreenParams<ParamListBase, NavigationState> | undefined\n): PartialState<NavigationState> | NavigationState | undefined => {\n if (params?.state) {\n return params.state;\n }\n\n if (params?.screen) {\n return {\n routes: [\n {\n name: params.screen,\n params: params.params,\n // @ts-expect-error\n state: params.screen\n ? getStateFromParams(\n params.params as\n | NavigatorScreenParams<ParamListBase, NavigationState>\n | undefined\n )\n : undefined,\n },\n ],\n };\n }\n\n return undefined;\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 { options } = React.useContext(LinkingContext);\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 const getPathFromStateHelper = options?.getPathFromState ?? getPathFromState;\n\n const href =\n typeof to === 'string'\n ? to\n : getPathFromStateHelper(\n {\n routes: [\n {\n name: to.screen,\n // @ts-expect-error\n params: to.params,\n // @ts-expect-error\n state: getStateFromParams(to.params),\n },\n ],\n },\n options?.config\n );\n\n return {\n href,\n accessibilityRole: 'link' as const,\n onPress,\n };\n}\n"],"mappings":"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"}
\No newline at end of file