@react-navigation/native 6.0.11 → 6.0.12
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
|
@@ -32,6 +32,8 @@ function useLinking(ref, _ref) {
|
|
|
32
32
|
// Workaround for https://github.com/facebook/react-native/issues/25675
|
|
33
33
|
setTimeout(resolve, 150))]),
|
|
34
34
|
subscribe = listener => {
|
|
35
|
+
var _Linking$removeEventL;
|
|
36
|
+
|
|
35
37
|
const callback = _ref2 => {
|
|
36
38
|
let {
|
|
37
39
|
url
|
|
@@ -39,14 +41,16 @@ function useLinking(ref, _ref) {
|
|
|
39
41
|
return listener(url);
|
|
40
42
|
};
|
|
41
43
|
|
|
42
|
-
const subscription = _reactNative.Linking.addEventListener('url', callback);
|
|
44
|
+
const subscription = _reactNative.Linking.addEventListener('url', callback); // Storing this in a local variable stops Jest from complaining about import after teardown
|
|
45
|
+
|
|
43
46
|
|
|
47
|
+
const removeEventListener = (_Linking$removeEventL = _reactNative.Linking.removeEventListener) === null || _Linking$removeEventL === void 0 ? void 0 : _Linking$removeEventL.bind(_reactNative.Linking);
|
|
44
48
|
return () => {
|
|
45
49
|
// https://github.com/facebook/react-native/commit/6d1aca806cee86ad76de771ed3a1cc62982ebcd7
|
|
46
50
|
if (subscription !== null && subscription !== void 0 && subscription.remove) {
|
|
47
51
|
subscription.remove();
|
|
48
52
|
} else {
|
|
49
|
-
|
|
53
|
+
removeEventListener === null || removeEventListener === void 0 ? void 0 : removeEventListener('url', callback);
|
|
50
54
|
}
|
|
51
55
|
};
|
|
52
56
|
},
|
|
@@ -105,7 +109,7 @@ function useLinking(ref, _ref) {
|
|
|
105
109
|
}
|
|
106
110
|
|
|
107
111
|
const path = (0, _extractPathFromURL.default)(prefixesRef.current, url);
|
|
108
|
-
return path ? getStateFromPathRef.current(path, configRef.current) : undefined;
|
|
112
|
+
return path !== undefined ? getStateFromPathRef.current(path, configRef.current) : undefined;
|
|
109
113
|
}, []);
|
|
110
114
|
const getInitialState = React.useCallback(() => {
|
|
111
115
|
let state;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["useLinking.native.tsx"],"names":["linkingHandlers","useLinking","ref","independent","enabled","prefixes","filter","config","getInitialURL","Promise","race","Linking","resolve","setTimeout","subscribe","listener","callback","url","subscription","addEventListener","remove","removeEventListener","getStateFromPath","getStateFromPathDefault","getActionFromState","getActionFromStateDefault","React","useEffect","process","env","NODE_ENV","undefined","length","console","error","Platform","OS","join","trim","handler","Symbol","push","index","indexOf","splice","enabledRef","useRef","prefixesRef","filterRef","configRef","getInitialURLRef","getStateFromPathRef","getActionFromStateRef","current","getStateFromURL","useCallback","path","getInitialState","state","then","thenable","onfulfilled","catch","navigation","rootState","getRootState","routes","some","r","routeNames","includes","name","warn","action","dispatch","e","message","resetRoot"],"mappings":"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","sourcesContent":["import {\n getActionFromState as getActionFromStateDefault,\n getStateFromPath as getStateFromPathDefault,\n NavigationContainerRef,\n ParamListBase,\n} from '@react-navigation/core';\nimport * as React from 'react';\nimport { Linking, Platform } from 'react-native';\n\nimport extractPathFromURL from './extractPathFromURL';\nimport type { LinkingOptions } from './types';\n\ntype ResultState = ReturnType<typeof getStateFromPathDefault>;\n\ntype Options = LinkingOptions<ParamListBase> & {\n independent?: boolean;\n};\n\nlet linkingHandlers: Symbol[] = [];\n\nexport default function useLinking(\n ref: React.RefObject<NavigationContainerRef<ParamListBase>>,\n {\n independent,\n enabled = true,\n prefixes,\n filter,\n config,\n getInitialURL = () =>\n Promise.race([\n Linking.getInitialURL(),\n new Promise<undefined>((resolve) =>\n // Timeout in 150ms if `getInitialState` doesn't resolve\n // Workaround for https://github.com/facebook/react-native/issues/25675\n setTimeout(resolve, 150)\n ),\n ]),\n subscribe = (listener) => {\n const callback = ({ url }: { url: string }) => listener(url);\n\n const subscription = Linking.addEventListener('url', callback) as\n | { remove(): void }\n | undefined;\n\n return () => {\n // https://github.com/facebook/react-native/commit/6d1aca806cee86ad76de771ed3a1cc62982ebcd7\n if (subscription?.remove) {\n subscription.remove();\n } else {\n Linking.removeEventListener('url', callback);\n }\n };\n },\n getStateFromPath = getStateFromPathDefault,\n getActionFromState = getActionFromStateDefault,\n }: Options\n) {\n React.useEffect(() => {\n if (process.env.NODE_ENV === 'production') {\n return undefined;\n }\n\n if (independent) {\n return undefined;\n }\n\n if (enabled !== false && linkingHandlers.length) {\n console.error(\n [\n 'Looks like you have configured linking in multiple places. This is likely an error since deep links should only be handled in one place to avoid conflicts. Make sure that:',\n \"- You don't have multiple NavigationContainers in the app each with 'linking' enabled\",\n '- Only a single instance of the root component is rendered',\n Platform.OS === 'android'\n ? \"- You have set 'android:launchMode=singleTask' in the '<activity />' section of the 'AndroidManifest.xml' file to avoid launching multiple instances\"\n : '',\n ]\n .join('\\n')\n .trim()\n );\n }\n\n const handler = Symbol();\n\n if (enabled !== false) {\n linkingHandlers.push(handler);\n }\n\n return () => {\n const index = linkingHandlers.indexOf(handler);\n\n if (index > -1) {\n linkingHandlers.splice(index, 1);\n }\n };\n }, [enabled, independent]);\n\n // We store these options in ref to avoid re-creating getInitialState and re-subscribing listeners\n // This lets user avoid wrapping the items in `React.useCallback` or `React.useMemo`\n // Not re-creating `getInitialState` is important coz it makes it easier for the user to use in an effect\n const enabledRef = React.useRef(enabled);\n const prefixesRef = React.useRef(prefixes);\n const filterRef = React.useRef(filter);\n const configRef = React.useRef(config);\n const getInitialURLRef = React.useRef(getInitialURL);\n const getStateFromPathRef = React.useRef(getStateFromPath);\n const getActionFromStateRef = React.useRef(getActionFromState);\n\n React.useEffect(() => {\n enabledRef.current = enabled;\n prefixesRef.current = prefixes;\n filterRef.current = filter;\n configRef.current = config;\n getInitialURLRef.current = getInitialURL;\n getStateFromPathRef.current = getStateFromPath;\n getActionFromStateRef.current = getActionFromState;\n });\n\n const getStateFromURL = React.useCallback(\n (url: string | null | undefined) => {\n if (!url || (filterRef.current && !filterRef.current(url))) {\n return undefined;\n }\n\n const path = extractPathFromURL(prefixesRef.current, url);\n\n return path\n ? getStateFromPathRef.current(path, configRef.current)\n : undefined;\n },\n []\n );\n\n const getInitialState = React.useCallback(() => {\n let state: ResultState | undefined;\n\n if (enabledRef.current) {\n const url = getInitialURLRef.current();\n\n if (url != null && typeof url !== 'string') {\n return url.then((url) => {\n const state = getStateFromURL(url);\n\n return state;\n });\n }\n\n state = getStateFromURL(url);\n }\n\n const thenable = {\n then(onfulfilled?: (state: ResultState | undefined) => void) {\n return Promise.resolve(onfulfilled ? onfulfilled(state) : state);\n },\n catch() {\n return thenable;\n },\n };\n\n return thenable as PromiseLike<ResultState | undefined>;\n }, [getStateFromURL]);\n\n React.useEffect(() => {\n const listener = (url: string) => {\n if (!enabled) {\n return;\n }\n\n const navigation = ref.current;\n const state = navigation ? getStateFromURL(url) : undefined;\n\n if (navigation && state) {\n // Make sure that the routes in the state exist in the root navigator\n // Otherwise there's an error in the linking configuration\n const rootState = navigation.getRootState();\n\n if (state.routes.some((r) => !rootState?.routeNames.includes(r.name))) {\n console.warn(\n \"The navigation state parsed from the URL contains routes not present in the root navigator. This usually means that the linking configuration doesn't match the navigation structure. See https://reactnavigation.org/docs/configuring-links for more details on how to specify a linking configuration.\"\n );\n return;\n }\n\n const action = getActionFromStateRef.current(state, configRef.current);\n\n if (action !== undefined) {\n try {\n navigation.dispatch(action);\n } catch (e) {\n // Ignore any errors from deep linking.\n // This could happen in case of malformed links, navigation object not being initialized etc.\n console.warn(\n `An error occurred when trying to handle the link '${url}': ${\n typeof e === 'object' && e != null && 'message' in e\n ? // @ts-expect-error: we're already checking for this\n e.message\n : e\n }`\n );\n }\n } else {\n navigation.resetRoot(state);\n }\n }\n };\n\n return subscribe(listener);\n }, [enabled, getStateFromURL, ref, subscribe]);\n\n return {\n getInitialState,\n };\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["useLinking.native.tsx"],"names":["linkingHandlers","useLinking","ref","independent","enabled","prefixes","filter","config","getInitialURL","Promise","race","Linking","resolve","setTimeout","subscribe","listener","callback","url","subscription","addEventListener","removeEventListener","bind","remove","getStateFromPath","getStateFromPathDefault","getActionFromState","getActionFromStateDefault","React","useEffect","process","env","NODE_ENV","undefined","length","console","error","Platform","OS","join","trim","handler","Symbol","push","index","indexOf","splice","enabledRef","useRef","prefixesRef","filterRef","configRef","getInitialURLRef","getStateFromPathRef","getActionFromStateRef","current","getStateFromURL","useCallback","path","getInitialState","state","then","thenable","onfulfilled","catch","navigation","rootState","getRootState","routes","some","r","routeNames","includes","name","warn","action","dispatch","e","message","resetRoot"],"mappings":"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","sourcesContent":["import {\n getActionFromState as getActionFromStateDefault,\n getStateFromPath as getStateFromPathDefault,\n NavigationContainerRef,\n ParamListBase,\n} from '@react-navigation/core';\nimport * as React from 'react';\nimport { Linking, Platform } from 'react-native';\n\nimport extractPathFromURL from './extractPathFromURL';\nimport type { LinkingOptions } from './types';\n\ntype ResultState = ReturnType<typeof getStateFromPathDefault>;\n\ntype Options = LinkingOptions<ParamListBase> & {\n independent?: boolean;\n};\n\nlet linkingHandlers: Symbol[] = [];\n\nexport default function useLinking(\n ref: React.RefObject<NavigationContainerRef<ParamListBase>>,\n {\n independent,\n enabled = true,\n prefixes,\n filter,\n config,\n getInitialURL = () =>\n Promise.race([\n Linking.getInitialURL(),\n new Promise<undefined>((resolve) =>\n // Timeout in 150ms if `getInitialState` doesn't resolve\n // Workaround for https://github.com/facebook/react-native/issues/25675\n setTimeout(resolve, 150)\n ),\n ]),\n subscribe = (listener) => {\n const callback = ({ url }: { url: string }) => listener(url);\n\n const subscription = Linking.addEventListener('url', callback) as\n | { remove(): void }\n | undefined;\n\n // Storing this in a local variable stops Jest from complaining about import after teardown\n const removeEventListener = Linking.removeEventListener?.bind(Linking);\n\n return () => {\n // https://github.com/facebook/react-native/commit/6d1aca806cee86ad76de771ed3a1cc62982ebcd7\n if (subscription?.remove) {\n subscription.remove();\n } else {\n removeEventListener?.('url', callback);\n }\n };\n },\n getStateFromPath = getStateFromPathDefault,\n getActionFromState = getActionFromStateDefault,\n }: Options\n) {\n React.useEffect(() => {\n if (process.env.NODE_ENV === 'production') {\n return undefined;\n }\n\n if (independent) {\n return undefined;\n }\n\n if (enabled !== false && linkingHandlers.length) {\n console.error(\n [\n 'Looks like you have configured linking in multiple places. This is likely an error since deep links should only be handled in one place to avoid conflicts. Make sure that:',\n \"- You don't have multiple NavigationContainers in the app each with 'linking' enabled\",\n '- Only a single instance of the root component is rendered',\n Platform.OS === 'android'\n ? \"- You have set 'android:launchMode=singleTask' in the '<activity />' section of the 'AndroidManifest.xml' file to avoid launching multiple instances\"\n : '',\n ]\n .join('\\n')\n .trim()\n );\n }\n\n const handler = Symbol();\n\n if (enabled !== false) {\n linkingHandlers.push(handler);\n }\n\n return () => {\n const index = linkingHandlers.indexOf(handler);\n\n if (index > -1) {\n linkingHandlers.splice(index, 1);\n }\n };\n }, [enabled, independent]);\n\n // We store these options in ref to avoid re-creating getInitialState and re-subscribing listeners\n // This lets user avoid wrapping the items in `React.useCallback` or `React.useMemo`\n // Not re-creating `getInitialState` is important coz it makes it easier for the user to use in an effect\n const enabledRef = React.useRef(enabled);\n const prefixesRef = React.useRef(prefixes);\n const filterRef = React.useRef(filter);\n const configRef = React.useRef(config);\n const getInitialURLRef = React.useRef(getInitialURL);\n const getStateFromPathRef = React.useRef(getStateFromPath);\n const getActionFromStateRef = React.useRef(getActionFromState);\n\n React.useEffect(() => {\n enabledRef.current = enabled;\n prefixesRef.current = prefixes;\n filterRef.current = filter;\n configRef.current = config;\n getInitialURLRef.current = getInitialURL;\n getStateFromPathRef.current = getStateFromPath;\n getActionFromStateRef.current = getActionFromState;\n });\n\n const getStateFromURL = React.useCallback(\n (url: string | null | undefined) => {\n if (!url || (filterRef.current && !filterRef.current(url))) {\n return undefined;\n }\n\n const path = extractPathFromURL(prefixesRef.current, url);\n\n return path !== undefined\n ? getStateFromPathRef.current(path, configRef.current)\n : undefined;\n },\n []\n );\n\n const getInitialState = React.useCallback(() => {\n let state: ResultState | undefined;\n\n if (enabledRef.current) {\n const url = getInitialURLRef.current();\n\n if (url != null && typeof url !== 'string') {\n return url.then((url) => {\n const state = getStateFromURL(url);\n\n return state;\n });\n }\n\n state = getStateFromURL(url);\n }\n\n const thenable = {\n then(onfulfilled?: (state: ResultState | undefined) => void) {\n return Promise.resolve(onfulfilled ? onfulfilled(state) : state);\n },\n catch() {\n return thenable;\n },\n };\n\n return thenable as PromiseLike<ResultState | undefined>;\n }, [getStateFromURL]);\n\n React.useEffect(() => {\n const listener = (url: string) => {\n if (!enabled) {\n return;\n }\n\n const navigation = ref.current;\n const state = navigation ? getStateFromURL(url) : undefined;\n\n if (navigation && state) {\n // Make sure that the routes in the state exist in the root navigator\n // Otherwise there's an error in the linking configuration\n const rootState = navigation.getRootState();\n\n if (state.routes.some((r) => !rootState?.routeNames.includes(r.name))) {\n console.warn(\n \"The navigation state parsed from the URL contains routes not present in the root navigator. This usually means that the linking configuration doesn't match the navigation structure. See https://reactnavigation.org/docs/configuring-links for more details on how to specify a linking configuration.\"\n );\n return;\n }\n\n const action = getActionFromStateRef.current(state, configRef.current);\n\n if (action !== undefined) {\n try {\n navigation.dispatch(action);\n } catch (e) {\n // Ignore any errors from deep linking.\n // This could happen in case of malformed links, navigation object not being initialized etc.\n console.warn(\n `An error occurred when trying to handle the link '${url}': ${\n typeof e === 'object' && e != null && 'message' in e\n ? // @ts-expect-error: we're already checking for this\n e.message\n : e\n }`\n );\n }\n } else {\n navigation.resetRoot(state);\n }\n }\n };\n\n return subscribe(listener);\n }, [enabled, getStateFromURL, ref, subscribe]);\n\n return {\n getInitialState,\n };\n}\n"]}
|
|
@@ -14,6 +14,8 @@ export default function useLinking(ref, _ref) {
|
|
|
14
14
|
// Workaround for https://github.com/facebook/react-native/issues/25675
|
|
15
15
|
setTimeout(resolve, 150))]),
|
|
16
16
|
subscribe = listener => {
|
|
17
|
+
var _Linking$removeEventL;
|
|
18
|
+
|
|
17
19
|
const callback = _ref2 => {
|
|
18
20
|
let {
|
|
19
21
|
url
|
|
@@ -21,13 +23,15 @@ export default function useLinking(ref, _ref) {
|
|
|
21
23
|
return listener(url);
|
|
22
24
|
};
|
|
23
25
|
|
|
24
|
-
const subscription = Linking.addEventListener('url', callback);
|
|
26
|
+
const subscription = Linking.addEventListener('url', callback); // Storing this in a local variable stops Jest from complaining about import after teardown
|
|
27
|
+
|
|
28
|
+
const removeEventListener = (_Linking$removeEventL = Linking.removeEventListener) === null || _Linking$removeEventL === void 0 ? void 0 : _Linking$removeEventL.bind(Linking);
|
|
25
29
|
return () => {
|
|
26
30
|
// https://github.com/facebook/react-native/commit/6d1aca806cee86ad76de771ed3a1cc62982ebcd7
|
|
27
31
|
if (subscription !== null && subscription !== void 0 && subscription.remove) {
|
|
28
32
|
subscription.remove();
|
|
29
33
|
} else {
|
|
30
|
-
|
|
34
|
+
removeEventListener === null || removeEventListener === void 0 ? void 0 : removeEventListener('url', callback);
|
|
31
35
|
}
|
|
32
36
|
};
|
|
33
37
|
},
|
|
@@ -86,7 +90,7 @@ export default function useLinking(ref, _ref) {
|
|
|
86
90
|
}
|
|
87
91
|
|
|
88
92
|
const path = extractPathFromURL(prefixesRef.current, url);
|
|
89
|
-
return path ? getStateFromPathRef.current(path, configRef.current) : undefined;
|
|
93
|
+
return path !== undefined ? getStateFromPathRef.current(path, configRef.current) : undefined;
|
|
90
94
|
}, []);
|
|
91
95
|
const getInitialState = React.useCallback(() => {
|
|
92
96
|
let state;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["useLinking.native.tsx"],"names":["getActionFromState","getActionFromStateDefault","getStateFromPath","getStateFromPathDefault","React","Linking","Platform","extractPathFromURL","linkingHandlers","useLinking","ref","independent","enabled","prefixes","filter","config","getInitialURL","Promise","race","resolve","setTimeout","subscribe","listener","callback","url","subscription","addEventListener","remove","removeEventListener","useEffect","process","env","NODE_ENV","undefined","length","console","error","OS","join","trim","handler","Symbol","push","index","indexOf","splice","enabledRef","useRef","prefixesRef","filterRef","configRef","getInitialURLRef","getStateFromPathRef","getActionFromStateRef","current","getStateFromURL","useCallback","path","getInitialState","state","then","thenable","onfulfilled","catch","navigation","rootState","getRootState","routes","some","r","routeNames","includes","name","warn","action","dispatch","e","message","resetRoot"],"mappings":"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","sourcesContent":["import {\n getActionFromState as getActionFromStateDefault,\n getStateFromPath as getStateFromPathDefault,\n NavigationContainerRef,\n ParamListBase,\n} from '@react-navigation/core';\nimport * as React from 'react';\nimport { Linking, Platform } from 'react-native';\n\nimport extractPathFromURL from './extractPathFromURL';\nimport type { LinkingOptions } from './types';\n\ntype ResultState = ReturnType<typeof getStateFromPathDefault>;\n\ntype Options = LinkingOptions<ParamListBase> & {\n independent?: boolean;\n};\n\nlet linkingHandlers: Symbol[] = [];\n\nexport default function useLinking(\n ref: React.RefObject<NavigationContainerRef<ParamListBase>>,\n {\n independent,\n enabled = true,\n prefixes,\n filter,\n config,\n getInitialURL = () =>\n Promise.race([\n Linking.getInitialURL(),\n new Promise<undefined>((resolve) =>\n // Timeout in 150ms if `getInitialState` doesn't resolve\n // Workaround for https://github.com/facebook/react-native/issues/25675\n setTimeout(resolve, 150)\n ),\n ]),\n subscribe = (listener) => {\n const callback = ({ url }: { url: string }) => listener(url);\n\n const subscription = Linking.addEventListener('url', callback) as\n | { remove(): void }\n | undefined;\n\n return () => {\n // https://github.com/facebook/react-native/commit/6d1aca806cee86ad76de771ed3a1cc62982ebcd7\n if (subscription?.remove) {\n subscription.remove();\n } else {\n Linking.removeEventListener('url', callback);\n }\n };\n },\n getStateFromPath = getStateFromPathDefault,\n getActionFromState = getActionFromStateDefault,\n }: Options\n) {\n React.useEffect(() => {\n if (process.env.NODE_ENV === 'production') {\n return undefined;\n }\n\n if (independent) {\n return undefined;\n }\n\n if (enabled !== false && linkingHandlers.length) {\n console.error(\n [\n 'Looks like you have configured linking in multiple places. This is likely an error since deep links should only be handled in one place to avoid conflicts. Make sure that:',\n \"- You don't have multiple NavigationContainers in the app each with 'linking' enabled\",\n '- Only a single instance of the root component is rendered',\n Platform.OS === 'android'\n ? \"- You have set 'android:launchMode=singleTask' in the '<activity />' section of the 'AndroidManifest.xml' file to avoid launching multiple instances\"\n : '',\n ]\n .join('\\n')\n .trim()\n );\n }\n\n const handler = Symbol();\n\n if (enabled !== false) {\n linkingHandlers.push(handler);\n }\n\n return () => {\n const index = linkingHandlers.indexOf(handler);\n\n if (index > -1) {\n linkingHandlers.splice(index, 1);\n }\n };\n }, [enabled, independent]);\n\n // We store these options in ref to avoid re-creating getInitialState and re-subscribing listeners\n // This lets user avoid wrapping the items in `React.useCallback` or `React.useMemo`\n // Not re-creating `getInitialState` is important coz it makes it easier for the user to use in an effect\n const enabledRef = React.useRef(enabled);\n const prefixesRef = React.useRef(prefixes);\n const filterRef = React.useRef(filter);\n const configRef = React.useRef(config);\n const getInitialURLRef = React.useRef(getInitialURL);\n const getStateFromPathRef = React.useRef(getStateFromPath);\n const getActionFromStateRef = React.useRef(getActionFromState);\n\n React.useEffect(() => {\n enabledRef.current = enabled;\n prefixesRef.current = prefixes;\n filterRef.current = filter;\n configRef.current = config;\n getInitialURLRef.current = getInitialURL;\n getStateFromPathRef.current = getStateFromPath;\n getActionFromStateRef.current = getActionFromState;\n });\n\n const getStateFromURL = React.useCallback(\n (url: string | null | undefined) => {\n if (!url || (filterRef.current && !filterRef.current(url))) {\n return undefined;\n }\n\n const path = extractPathFromURL(prefixesRef.current, url);\n\n return path\n ? getStateFromPathRef.current(path, configRef.current)\n : undefined;\n },\n []\n );\n\n const getInitialState = React.useCallback(() => {\n let state: ResultState | undefined;\n\n if (enabledRef.current) {\n const url = getInitialURLRef.current();\n\n if (url != null && typeof url !== 'string') {\n return url.then((url) => {\n const state = getStateFromURL(url);\n\n return state;\n });\n }\n\n state = getStateFromURL(url);\n }\n\n const thenable = {\n then(onfulfilled?: (state: ResultState | undefined) => void) {\n return Promise.resolve(onfulfilled ? onfulfilled(state) : state);\n },\n catch() {\n return thenable;\n },\n };\n\n return thenable as PromiseLike<ResultState | undefined>;\n }, [getStateFromURL]);\n\n React.useEffect(() => {\n const listener = (url: string) => {\n if (!enabled) {\n return;\n }\n\n const navigation = ref.current;\n const state = navigation ? getStateFromURL(url) : undefined;\n\n if (navigation && state) {\n // Make sure that the routes in the state exist in the root navigator\n // Otherwise there's an error in the linking configuration\n const rootState = navigation.getRootState();\n\n if (state.routes.some((r) => !rootState?.routeNames.includes(r.name))) {\n console.warn(\n \"The navigation state parsed from the URL contains routes not present in the root navigator. This usually means that the linking configuration doesn't match the navigation structure. See https://reactnavigation.org/docs/configuring-links for more details on how to specify a linking configuration.\"\n );\n return;\n }\n\n const action = getActionFromStateRef.current(state, configRef.current);\n\n if (action !== undefined) {\n try {\n navigation.dispatch(action);\n } catch (e) {\n // Ignore any errors from deep linking.\n // This could happen in case of malformed links, navigation object not being initialized etc.\n console.warn(\n `An error occurred when trying to handle the link '${url}': ${\n typeof e === 'object' && e != null && 'message' in e\n ? // @ts-expect-error: we're already checking for this\n e.message\n : e\n }`\n );\n }\n } else {\n navigation.resetRoot(state);\n }\n }\n };\n\n return subscribe(listener);\n }, [enabled, getStateFromURL, ref, subscribe]);\n\n return {\n getInitialState,\n };\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["useLinking.native.tsx"],"names":["getActionFromState","getActionFromStateDefault","getStateFromPath","getStateFromPathDefault","React","Linking","Platform","extractPathFromURL","linkingHandlers","useLinking","ref","independent","enabled","prefixes","filter","config","getInitialURL","Promise","race","resolve","setTimeout","subscribe","listener","callback","url","subscription","addEventListener","removeEventListener","bind","remove","useEffect","process","env","NODE_ENV","undefined","length","console","error","OS","join","trim","handler","Symbol","push","index","indexOf","splice","enabledRef","useRef","prefixesRef","filterRef","configRef","getInitialURLRef","getStateFromPathRef","getActionFromStateRef","current","getStateFromURL","useCallback","path","getInitialState","state","then","thenable","onfulfilled","catch","navigation","rootState","getRootState","routes","some","r","routeNames","includes","name","warn","action","dispatch","e","message","resetRoot"],"mappings":"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","sourcesContent":["import {\n getActionFromState as getActionFromStateDefault,\n getStateFromPath as getStateFromPathDefault,\n NavigationContainerRef,\n ParamListBase,\n} from '@react-navigation/core';\nimport * as React from 'react';\nimport { Linking, Platform } from 'react-native';\n\nimport extractPathFromURL from './extractPathFromURL';\nimport type { LinkingOptions } from './types';\n\ntype ResultState = ReturnType<typeof getStateFromPathDefault>;\n\ntype Options = LinkingOptions<ParamListBase> & {\n independent?: boolean;\n};\n\nlet linkingHandlers: Symbol[] = [];\n\nexport default function useLinking(\n ref: React.RefObject<NavigationContainerRef<ParamListBase>>,\n {\n independent,\n enabled = true,\n prefixes,\n filter,\n config,\n getInitialURL = () =>\n Promise.race([\n Linking.getInitialURL(),\n new Promise<undefined>((resolve) =>\n // Timeout in 150ms if `getInitialState` doesn't resolve\n // Workaround for https://github.com/facebook/react-native/issues/25675\n setTimeout(resolve, 150)\n ),\n ]),\n subscribe = (listener) => {\n const callback = ({ url }: { url: string }) => listener(url);\n\n const subscription = Linking.addEventListener('url', callback) as\n | { remove(): void }\n | undefined;\n\n // Storing this in a local variable stops Jest from complaining about import after teardown\n const removeEventListener = Linking.removeEventListener?.bind(Linking);\n\n return () => {\n // https://github.com/facebook/react-native/commit/6d1aca806cee86ad76de771ed3a1cc62982ebcd7\n if (subscription?.remove) {\n subscription.remove();\n } else {\n removeEventListener?.('url', callback);\n }\n };\n },\n getStateFromPath = getStateFromPathDefault,\n getActionFromState = getActionFromStateDefault,\n }: Options\n) {\n React.useEffect(() => {\n if (process.env.NODE_ENV === 'production') {\n return undefined;\n }\n\n if (independent) {\n return undefined;\n }\n\n if (enabled !== false && linkingHandlers.length) {\n console.error(\n [\n 'Looks like you have configured linking in multiple places. This is likely an error since deep links should only be handled in one place to avoid conflicts. Make sure that:',\n \"- You don't have multiple NavigationContainers in the app each with 'linking' enabled\",\n '- Only a single instance of the root component is rendered',\n Platform.OS === 'android'\n ? \"- You have set 'android:launchMode=singleTask' in the '<activity />' section of the 'AndroidManifest.xml' file to avoid launching multiple instances\"\n : '',\n ]\n .join('\\n')\n .trim()\n );\n }\n\n const handler = Symbol();\n\n if (enabled !== false) {\n linkingHandlers.push(handler);\n }\n\n return () => {\n const index = linkingHandlers.indexOf(handler);\n\n if (index > -1) {\n linkingHandlers.splice(index, 1);\n }\n };\n }, [enabled, independent]);\n\n // We store these options in ref to avoid re-creating getInitialState and re-subscribing listeners\n // This lets user avoid wrapping the items in `React.useCallback` or `React.useMemo`\n // Not re-creating `getInitialState` is important coz it makes it easier for the user to use in an effect\n const enabledRef = React.useRef(enabled);\n const prefixesRef = React.useRef(prefixes);\n const filterRef = React.useRef(filter);\n const configRef = React.useRef(config);\n const getInitialURLRef = React.useRef(getInitialURL);\n const getStateFromPathRef = React.useRef(getStateFromPath);\n const getActionFromStateRef = React.useRef(getActionFromState);\n\n React.useEffect(() => {\n enabledRef.current = enabled;\n prefixesRef.current = prefixes;\n filterRef.current = filter;\n configRef.current = config;\n getInitialURLRef.current = getInitialURL;\n getStateFromPathRef.current = getStateFromPath;\n getActionFromStateRef.current = getActionFromState;\n });\n\n const getStateFromURL = React.useCallback(\n (url: string | null | undefined) => {\n if (!url || (filterRef.current && !filterRef.current(url))) {\n return undefined;\n }\n\n const path = extractPathFromURL(prefixesRef.current, url);\n\n return path !== undefined\n ? getStateFromPathRef.current(path, configRef.current)\n : undefined;\n },\n []\n );\n\n const getInitialState = React.useCallback(() => {\n let state: ResultState | undefined;\n\n if (enabledRef.current) {\n const url = getInitialURLRef.current();\n\n if (url != null && typeof url !== 'string') {\n return url.then((url) => {\n const state = getStateFromURL(url);\n\n return state;\n });\n }\n\n state = getStateFromURL(url);\n }\n\n const thenable = {\n then(onfulfilled?: (state: ResultState | undefined) => void) {\n return Promise.resolve(onfulfilled ? onfulfilled(state) : state);\n },\n catch() {\n return thenable;\n },\n };\n\n return thenable as PromiseLike<ResultState | undefined>;\n }, [getStateFromURL]);\n\n React.useEffect(() => {\n const listener = (url: string) => {\n if (!enabled) {\n return;\n }\n\n const navigation = ref.current;\n const state = navigation ? getStateFromURL(url) : undefined;\n\n if (navigation && state) {\n // Make sure that the routes in the state exist in the root navigator\n // Otherwise there's an error in the linking configuration\n const rootState = navigation.getRootState();\n\n if (state.routes.some((r) => !rootState?.routeNames.includes(r.name))) {\n console.warn(\n \"The navigation state parsed from the URL contains routes not present in the root navigator. This usually means that the linking configuration doesn't match the navigation structure. See https://reactnavigation.org/docs/configuring-links for more details on how to specify a linking configuration.\"\n );\n return;\n }\n\n const action = getActionFromStateRef.current(state, configRef.current);\n\n if (action !== undefined) {\n try {\n navigation.dispatch(action);\n } catch (e) {\n // Ignore any errors from deep linking.\n // This could happen in case of malformed links, navigation object not being initialized etc.\n console.warn(\n `An error occurred when trying to handle the link '${url}': ${\n typeof e === 'object' && e != null && 'message' in e\n ? // @ts-expect-error: we're already checking for this\n e.message\n : e\n }`\n );\n }\n } else {\n navigation.resetRoot(state);\n }\n }\n };\n\n return subscribe(listener);\n }, [enabled, getStateFromURL, ref, subscribe]);\n\n return {\n getInitialState,\n };\n}\n"]}
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@react-navigation/native",
|
|
3
3
|
"description": "React Native integration for React Navigation",
|
|
4
|
-
"version": "6.0.
|
|
4
|
+
"version": "6.0.12",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"react-native",
|
|
7
7
|
"react-navigation",
|
|
@@ -33,11 +33,11 @@
|
|
|
33
33
|
"access": "public"
|
|
34
34
|
},
|
|
35
35
|
"scripts": {
|
|
36
|
-
"
|
|
36
|
+
"prepack": "bob build",
|
|
37
37
|
"clean": "del lib"
|
|
38
38
|
},
|
|
39
39
|
"dependencies": {
|
|
40
|
-
"@react-navigation/core": "^6.
|
|
40
|
+
"@react-navigation/core": "^6.3.0",
|
|
41
41
|
"escape-string-regexp": "^4.0.0",
|
|
42
42
|
"fast-deep-equal": "^3.1.3",
|
|
43
43
|
"nanoid": "^3.1.23"
|
|
@@ -71,5 +71,6 @@
|
|
|
71
71
|
}
|
|
72
72
|
]
|
|
73
73
|
]
|
|
74
|
-
}
|
|
74
|
+
},
|
|
75
|
+
"gitHead": "83aa392f1e13796d609c9df0afa44699ce4bacae"
|
|
75
76
|
}
|
|
@@ -42,12 +42,15 @@ export default function useLinking(
|
|
|
42
42
|
| { remove(): void }
|
|
43
43
|
| undefined;
|
|
44
44
|
|
|
45
|
+
// Storing this in a local variable stops Jest from complaining about import after teardown
|
|
46
|
+
const removeEventListener = Linking.removeEventListener?.bind(Linking);
|
|
47
|
+
|
|
45
48
|
return () => {
|
|
46
49
|
// https://github.com/facebook/react-native/commit/6d1aca806cee86ad76de771ed3a1cc62982ebcd7
|
|
47
50
|
if (subscription?.remove) {
|
|
48
51
|
subscription.remove();
|
|
49
52
|
} else {
|
|
50
|
-
|
|
53
|
+
removeEventListener?.('url', callback);
|
|
51
54
|
}
|
|
52
55
|
};
|
|
53
56
|
},
|
|
@@ -123,7 +126,7 @@ export default function useLinking(
|
|
|
123
126
|
|
|
124
127
|
const path = extractPathFromURL(prefixesRef.current, url);
|
|
125
128
|
|
|
126
|
-
return path
|
|
129
|
+
return path !== undefined
|
|
127
130
|
? getStateFromPathRef.current(path, configRef.current)
|
|
128
131
|
: undefined;
|
|
129
132
|
},
|