@react-navigation/native 7.1.26 → 8.0.0-alpha.0

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.
Files changed (78) hide show
  1. package/lib/module/Link.js.map +1 -1
  2. package/lib/module/NavigationContainer.js +73 -63
  3. package/lib/module/NavigationContainer.js.map +1 -1
  4. package/lib/module/__stubs__/createStackNavigator.js.map +1 -1
  5. package/lib/module/extractPathFromURL.js +12 -7
  6. package/lib/module/extractPathFromURL.js.map +1 -1
  7. package/lib/module/getStateFromHref.js +30 -0
  8. package/lib/module/getStateFromHref.js.map +1 -0
  9. package/lib/module/index.js +0 -1
  10. package/lib/module/index.js.map +1 -1
  11. package/lib/module/theming/DarkTheme.js.map +1 -1
  12. package/lib/module/theming/DefaultTheme.js +1 -1
  13. package/lib/module/theming/DefaultTheme.js.map +1 -1
  14. package/lib/module/theming/fonts.js.map +1 -1
  15. package/lib/module/useLinkBuilder.js +5 -8
  16. package/lib/module/useLinkBuilder.js.map +1 -1
  17. package/lib/module/useLinkProps.js +20 -0
  18. package/lib/module/useLinkProps.js.map +1 -1
  19. package/lib/module/useLinking.js +23 -24
  20. package/lib/module/useLinking.js.map +1 -1
  21. package/lib/module/useLinking.native.js +21 -36
  22. package/lib/module/useLinking.native.js.map +1 -1
  23. package/lib/module/useScrollToTop.js +1 -0
  24. package/lib/module/useScrollToTop.js.map +1 -1
  25. package/lib/module/useThenable.js +9 -6
  26. package/lib/module/useThenable.js.map +1 -1
  27. package/lib/typescript/src/Link.d.ts +3 -2
  28. package/lib/typescript/src/Link.d.ts.map +1 -1
  29. package/lib/typescript/src/NavigationContainer.d.ts +35 -7
  30. package/lib/typescript/src/NavigationContainer.d.ts.map +1 -1
  31. package/lib/typescript/src/__stubs__/createStackNavigator.d.ts +1 -2
  32. package/lib/typescript/src/__stubs__/createStackNavigator.d.ts.map +1 -1
  33. package/lib/typescript/src/extractPathFromURL.d.ts +2 -1
  34. package/lib/typescript/src/extractPathFromURL.d.ts.map +1 -1
  35. package/lib/typescript/src/getStateFromHref.d.ts +4 -0
  36. package/lib/typescript/src/getStateFromHref.d.ts.map +1 -0
  37. package/lib/typescript/src/index.d.ts +0 -1
  38. package/lib/typescript/src/index.d.ts.map +1 -1
  39. package/lib/typescript/src/theming/DarkTheme.d.ts +63 -2
  40. package/lib/typescript/src/theming/DarkTheme.d.ts.map +1 -1
  41. package/lib/typescript/src/theming/DefaultTheme.d.ts +63 -2
  42. package/lib/typescript/src/theming/DefaultTheme.d.ts.map +1 -1
  43. package/lib/typescript/src/theming/fonts.d.ts.map +1 -1
  44. package/lib/typescript/src/types.d.ts +49 -23
  45. package/lib/typescript/src/types.d.ts.map +1 -1
  46. package/lib/typescript/src/useLinkBuilder.d.ts +14 -6
  47. package/lib/typescript/src/useLinkBuilder.d.ts.map +1 -1
  48. package/lib/typescript/src/useLinkProps.d.ts +3 -3
  49. package/lib/typescript/src/useLinkProps.d.ts.map +1 -1
  50. package/lib/typescript/src/useLinking.d.ts +48 -4
  51. package/lib/typescript/src/useLinking.d.ts.map +1 -1
  52. package/lib/typescript/src/useLinking.native.d.ts +69 -4
  53. package/lib/typescript/src/useLinking.native.d.ts.map +1 -1
  54. package/lib/typescript/src/useScrollToTop.d.ts.map +1 -1
  55. package/lib/typescript/src/useThenable.d.ts +4 -1
  56. package/lib/typescript/src/useThenable.d.ts.map +1 -1
  57. package/package.json +8 -8
  58. package/src/Link.tsx +18 -15
  59. package/src/NavigationContainer.tsx +141 -84
  60. package/src/__stubs__/createStackNavigator.tsx +0 -2
  61. package/src/extractPathFromURL.tsx +28 -18
  62. package/src/getStateFromHref.tsx +46 -0
  63. package/src/index.tsx +0 -1
  64. package/src/theming/DarkTheme.tsx +4 -3
  65. package/src/theming/DefaultTheme.tsx +5 -4
  66. package/src/theming/fonts.tsx +1 -2
  67. package/src/types.tsx +60 -22
  68. package/src/useLinkBuilder.tsx +6 -9
  69. package/src/useLinkProps.tsx +36 -7
  70. package/src/useLinking.native.tsx +25 -48
  71. package/src/useLinking.tsx +32 -38
  72. package/src/useScrollToTop.tsx +3 -1
  73. package/src/useThenable.tsx +14 -6
  74. package/lib/module/UnhandledLinkingContext.js +0 -14
  75. package/lib/module/UnhandledLinkingContext.js.map +0 -1
  76. package/lib/typescript/src/UnhandledLinkingContext.d.ts +0 -6
  77. package/lib/typescript/src/UnhandledLinkingContext.d.ts.map +0 -1
  78. package/src/UnhandledLinkingContext.tsx +0 -18
@@ -1 +1 @@
1
- {"version":3,"names":["useTheme","React","Platform","Text","useLinkProps","Link","screen","params","action","href","style","rest","colors","fonts","props","onPress","e","defaultPrevented","createElement","select","web","onClick","default","color","primary","regular"],"sourceRoot":"../../src","sources":["Link.tsx"],"mappings":";;AAAA,SAASA,QAAQ,QAAQ,wBAAwB;AACjD,OAAO,KAAKC,KAAK,MAAM,OAAO;AAC9B,SAEEC,QAAQ,EACRC,IAAI,QAEC,cAAc;AAErB,SAAyBC,YAAY,QAAQ,mBAAgB;AAe7D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,SAASC,IAAIA,CAAkD;EACpEC,MAAM;EACNC,MAAM;EACNC,MAAM;EACNC,IAAI;EACJC,KAAK;EACL,GAAGC;AACa,CAAC,EAAE;EACnB,MAAM;IAAEC,MAAM;IAAEC;EAAM,CAAC,GAAGb,QAAQ,CAAC,CAAC;EACpC;EACA,MAAMc,KAAK,GAAGV,YAAY,CAAY;IAAEE,MAAM;IAAEC,MAAM;IAAEC,MAAM;IAAEC;EAAK,CAAC,CAAC;EAEvE,MAAMM,OAAO,GACXC,CAA0E,IACvE;IACH,IAAI,SAAS,IAAIL,IAAI,EAAE;MACrBA,IAAI,CAACI,OAAO,GAAGC,CAAC,CAAC;IACnB;;IAEA;IACA,IAAI,CAACA,CAAC,CAACC,gBAAgB,EAAE;MACvBH,KAAK,CAACC,OAAO,CAACC,CAAC,CAAC;IAClB;EACF,CAAC;EAED,oBAAOf,KAAK,CAACiB,aAAa,CAACf,IAAI,EAAE;IAC/B,GAAGW,KAAK;IACR,GAAGH,IAAI;IACP,GAAGT,QAAQ,CAACiB,MAAM,CAAC;MACjBC,GAAG,EAAE;QAAEC,OAAO,EAAEN;MAAQ,CAAQ;MAChCO,OAAO,EAAE;QAAEP;MAAQ;IACrB,CAAC,CAAC;IACFL,KAAK,EAAE,CAAC;MAAEa,KAAK,EAAEX,MAAM,CAACY;IAAQ,CAAC,EAAEX,KAAK,CAACY,OAAO,EAAEf,KAAK;EACzD,CAAC,CAAC;AACJ","ignoreList":[]}
1
+ {"version":3,"names":["useTheme","React","Platform","Text","useLinkProps","Link","screen","params","action","href","style","rest","colors","fonts","props","onPress","e","defaultPrevented","createElement","select","web","onClick","default","color","primary","regular"],"sourceRoot":"../../src","sources":["Link.tsx"],"mappings":";;AAAA,SAA6BA,QAAQ,QAAQ,wBAAwB;AACrE,OAAO,KAAKC,KAAK,MAAM,OAAO;AAC9B,SAEEC,QAAQ,EACRC,IAAI,QAEC,cAAc;AAErB,SAAyBC,YAAY,QAAQ,mBAAgB;AAe7D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,SAASC,IAAIA,CAGlB;EACAC,MAAM;EACNC,MAAM;EACNC,MAAM;EACNC,IAAI;EACJC,KAAK;EACL,GAAGC;AACwB,CAAC,EAAE;EAC9B,MAAM;IAAEC,MAAM;IAAEC;EAAM,CAAC,GAAGb,QAAQ,CAAC,CAAC;EACpC;EACA,MAAMc,KAAK,GAAGV,YAAY,CAAY;IAAEE,MAAM;IAAEC,MAAM;IAAEC,MAAM;IAAEC;EAAK,CAAC,CAAC;EAEvE,MAAMM,OAAO,GACXC,CAA0E,IACvE;IACH,IAAI,SAAS,IAAIL,IAAI,EAAE;MACrBA,IAAI,CAACI,OAAO,GAAGC,CAAC,CAAC;IACnB;;IAEA;IACA,IAAI,CAACA,CAAC,CAACC,gBAAgB,EAAE;MACvBH,KAAK,CAACC,OAAO,CAACC,CAAC,CAAC;IAClB;EACF,CAAC;EAED,oBAAOf,KAAK,CAACiB,aAAa,CAACf,IAAI,EAAE;IAC/B,GAAGW,KAAK;IACR,GAAGH,IAAI;IACP,GAAGT,QAAQ,CAACiB,MAAM,CAAC;MACjBC,GAAG,EAAE;QAAEC,OAAO,EAAEN;MAAQ,CAAQ;MAChCO,OAAO,EAAE;QAAEP;MAAQ;IACrB,CAAC,CAAC;IACFL,KAAK,EAAE,CAAC;MAAEa,KAAK,EAAEX,MAAM,CAACY;IAAQ,CAAC,EAAEX,KAAK,CAACY,OAAO,EAAEf,KAAK;EACzD,CAAC,CAAC;AACJ","ignoreList":[]}
@@ -2,97 +2,107 @@
2
2
 
3
3
  import { BaseNavigationContainer, getActionFromState, getPathFromState, getStateFromPath, ThemeProvider, validatePathConfig } from '@react-navigation/core';
4
4
  import * as React from 'react';
5
- import { I18nManager } from 'react-native';
6
- import useLatestCallback from 'use-latest-callback';
5
+ import { I18nManager, Platform } from 'react-native';
7
6
  import { LinkingContext } from "./LinkingContext.js";
8
7
  import { LocaleDirContext } from "./LocaleDirContext.js";
9
8
  import { DefaultTheme } from "./theming/DefaultTheme.js";
10
- import { UnhandledLinkingContext } from "./UnhandledLinkingContext.js";
11
9
  import { useBackButton } from './useBackButton';
12
10
  import { useDocumentTitle } from './useDocumentTitle';
13
11
  import { useLinking } from './useLinking';
14
12
  import { useThenable } from "./useThenable.js";
15
13
  import { jsx as _jsx } from "react/jsx-runtime";
16
14
  globalThis.REACT_NAVIGATION_DEVTOOLS = new WeakMap();
15
+ const RESTORE_STATE_ERROR = 'Failed to restore navigation state. The state will be initialized based on the navigation tree.';
17
16
  function NavigationContainerInner({
18
17
  direction = I18nManager.getConstants().isRTL ? 'rtl' : 'ltr',
19
18
  theme = DefaultTheme,
20
19
  linking,
20
+ persistor,
21
21
  fallback = null,
22
22
  documentTitle,
23
- onReady,
24
23
  onStateChange,
25
24
  ...rest
26
25
  }, ref) {
27
- const isLinkingEnabled = linking ? linking.enabled !== false : false;
28
26
  if (linking?.config) {
29
27
  validatePathConfig(linking.config);
30
28
  }
31
29
  const refContainer = React.useRef(null);
32
30
  useBackButton(refContainer);
33
31
  useDocumentTitle(refContainer, documentTitle);
34
- const [lastUnhandledLink, setLastUnhandledLink] = React.useState();
32
+ const linkingConfig = React.useMemo(() => {
33
+ if (linking == null) {
34
+ return {
35
+ options: {
36
+ enabled: false
37
+ }
38
+ };
39
+ }
40
+ return {
41
+ options: {
42
+ ...linking,
43
+ enabled: linking.enabled !== false,
44
+ prefixes: linking.prefixes ?? ['*'],
45
+ getStateFromPath: linking?.getStateFromPath ?? getStateFromPath,
46
+ getPathFromState: linking?.getPathFromState ?? getPathFromState,
47
+ getActionFromState: linking?.getActionFromState ?? getActionFromState
48
+ }
49
+ };
50
+ }, [linking]);
35
51
  const {
36
52
  getInitialState
37
- } = useLinking(refContainer, {
38
- enabled: isLinkingEnabled,
39
- prefixes: [],
40
- ...linking
41
- }, setLastUnhandledLink);
42
- const linkingContext = React.useMemo(() => ({
43
- options: linking
44
- }), [linking]);
45
- const unhandledLinkingContext = React.useMemo(() => ({
46
- lastUnhandledLink,
47
- setLastUnhandledLink
48
- }), [lastUnhandledLink, setLastUnhandledLink]);
49
- const onReadyForLinkingHandling = useLatestCallback(() => {
50
- // If the screen path matches lastUnhandledLink, we do not track it
51
- const path = refContainer.current?.getCurrentRoute()?.path;
52
- setLastUnhandledLink(previousLastUnhandledLink => {
53
- if (previousLastUnhandledLink === path) {
54
- return undefined;
55
- }
56
- return previousLastUnhandledLink;
57
- });
58
- onReady?.();
59
- });
60
- const onStateChangeForLinkingHandling = useLatestCallback(state => {
61
- // If the screen path matches lastUnhandledLink, we do not track it
62
- const path = refContainer.current?.getCurrentRoute()?.path;
63
- setLastUnhandledLink(previousLastUnhandledLink => {
64
- if (previousLastUnhandledLink === path) {
65
- return undefined;
66
- }
67
- return previousLastUnhandledLink;
68
- });
69
- onStateChange?.(state);
70
- });
53
+ } = useLinking(refContainer, linkingConfig.options);
54
+
71
55
  // Add additional linking related info to the ref
72
56
  // This will be used by the devtools
73
57
  React.useEffect(() => {
74
58
  if (refContainer.current) {
75
59
  REACT_NAVIGATION_DEVTOOLS.set(refContainer.current, {
76
60
  get linking() {
77
- return {
78
- ...linking,
79
- enabled: isLinkingEnabled,
80
- prefixes: linking?.prefixes ?? [],
81
- getStateFromPath: linking?.getStateFromPath ?? getStateFromPath,
82
- getPathFromState: linking?.getPathFromState ?? getPathFromState,
83
- getActionFromState: linking?.getActionFromState ?? getActionFromState
84
- };
61
+ return linkingConfig.options;
85
62
  }
86
63
  });
87
64
  }
88
65
  });
89
- const [isResolved, initialState] = useThenable(getInitialState);
66
+ const [isLinkStateResolved, initialStateFromLink] = useThenable(() => {
67
+ if (rest.initialState != null || !linkingConfig.options.enabled) {
68
+ return undefined;
69
+ }
70
+ return getInitialState();
71
+ });
72
+ const isPersistenceSupported = Platform.OS === 'web' ? !linkingConfig.options.enabled : true;
73
+ const [isPersistedStateResolved, initialStateFromPersisted] = useThenable(() => {
74
+ if (isPersistenceSupported === false || rest.initialState != null || persistor == null) {
75
+ return undefined;
76
+ }
77
+ let restoredState;
78
+ try {
79
+ restoredState = persistor.restore();
80
+ } catch (e) {
81
+ console.error(RESTORE_STATE_ERROR, e);
82
+ return undefined;
83
+ }
84
+ if (restoredState == null) {
85
+ return undefined;
86
+ }
87
+ if ('then' in restoredState) {
88
+ return restoredState.then(state => state, error => {
89
+ console.error(RESTORE_STATE_ERROR, error);
90
+ return undefined;
91
+ });
92
+ }
93
+ const thenable = {
94
+ then(onfulfilled) {
95
+ return Promise.resolve(onfulfilled ? onfulfilled(restoredState) : restoredState);
96
+ }
97
+ };
98
+ return thenable;
99
+ });
90
100
 
91
101
  // FIXME
92
102
  // @ts-expect-error not sure why this is not working
93
103
  React.useImperativeHandle(ref, () => refContainer.current);
94
- const isLinkingReady = rest.initialState != null || !isLinkingEnabled || isResolved;
95
- if (!isLinkingReady) {
104
+ const isStateReady = rest.initialState != null || isLinkStateResolved && isPersistedStateResolved;
105
+ if (!isStateReady) {
96
106
  return /*#__PURE__*/_jsx(LocaleDirContext.Provider, {
97
107
  value: direction,
98
108
  children: /*#__PURE__*/_jsx(ThemeProvider, {
@@ -103,18 +113,17 @@ function NavigationContainerInner({
103
113
  }
104
114
  return /*#__PURE__*/_jsx(LocaleDirContext.Provider, {
105
115
  value: direction,
106
- children: /*#__PURE__*/_jsx(UnhandledLinkingContext.Provider, {
107
- value: unhandledLinkingContext,
108
- children: /*#__PURE__*/_jsx(LinkingContext.Provider, {
109
- value: linkingContext,
110
- children: /*#__PURE__*/_jsx(BaseNavigationContainer, {
111
- ...rest,
112
- theme: theme,
113
- onReady: onReadyForLinkingHandling,
114
- onStateChange: onStateChangeForLinkingHandling,
115
- initialState: rest.initialState == null ? initialState : rest.initialState,
116
- ref: refContainer
117
- })
116
+ children: /*#__PURE__*/_jsx(LinkingContext.Provider, {
117
+ value: linkingConfig,
118
+ children: /*#__PURE__*/_jsx(BaseNavigationContainer, {
119
+ ...rest,
120
+ theme: theme,
121
+ initialState: rest.initialState ?? initialStateFromLink ?? initialStateFromPersisted,
122
+ onStateChange: state => {
123
+ onStateChange?.(state);
124
+ persistor?.persist(state);
125
+ },
126
+ ref: refContainer
118
127
  })
119
128
  })
120
129
  });
@@ -122,6 +131,7 @@ function NavigationContainerInner({
122
131
 
123
132
  /**
124
133
  * Container component that manages the navigation state.
134
+ *
125
135
  * This should be rendered at the root wrapping the whole app.
126
136
  */
127
137
  export const NavigationContainer = /*#__PURE__*/React.forwardRef(NavigationContainerInner);
@@ -1 +1 @@
1
- {"version":3,"names":["BaseNavigationContainer","getActionFromState","getPathFromState","getStateFromPath","ThemeProvider","validatePathConfig","React","I18nManager","useLatestCallback","LinkingContext","LocaleDirContext","DefaultTheme","UnhandledLinkingContext","useBackButton","useDocumentTitle","useLinking","useThenable","jsx","_jsx","globalThis","REACT_NAVIGATION_DEVTOOLS","WeakMap","NavigationContainerInner","direction","getConstants","isRTL","theme","linking","fallback","documentTitle","onReady","onStateChange","rest","ref","isLinkingEnabled","enabled","config","refContainer","useRef","lastUnhandledLink","setLastUnhandledLink","useState","getInitialState","prefixes","linkingContext","useMemo","options","unhandledLinkingContext","onReadyForLinkingHandling","path","current","getCurrentRoute","previousLastUnhandledLink","undefined","onStateChangeForLinkingHandling","state","useEffect","set","isResolved","initialState","useImperativeHandle","isLinkingReady","Provider","value","children","NavigationContainer","forwardRef"],"sourceRoot":"../../src","sources":["NavigationContainer.tsx"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["BaseNavigationContainer","getActionFromState","getPathFromState","getStateFromPath","ThemeProvider","validatePathConfig","React","I18nManager","Platform","LinkingContext","LocaleDirContext","DefaultTheme","useBackButton","useDocumentTitle","useLinking","useThenable","jsx","_jsx","globalThis","REACT_NAVIGATION_DEVTOOLS","WeakMap","RESTORE_STATE_ERROR","NavigationContainerInner","direction","getConstants","isRTL","theme","linking","persistor","fallback","documentTitle","onStateChange","rest","ref","config","refContainer","useRef","linkingConfig","useMemo","options","enabled","prefixes","getInitialState","useEffect","current","set","isLinkStateResolved","initialStateFromLink","initialState","undefined","isPersistenceSupported","OS","isPersistedStateResolved","initialStateFromPersisted","restoredState","restore","e","console","error","then","state","thenable","onfulfilled","Promise","resolve","useImperativeHandle","isStateReady","Provider","value","children","persist","NavigationContainer","forwardRef"],"sourceRoot":"../../src","sources":["NavigationContainer.tsx"],"mappings":"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","ignoreList":[]}
@@ -1 +1 @@
1
- {"version":3,"names":["createNavigatorFactory","StackRouter","useNavigationBuilder","jsx","_jsx","StackNavigator","props","state","descriptors","NavigationContent","children","routes","index","key","render","createStackNavigator"],"sourceRoot":"../../../src","sources":["__stubs__/createStackNavigator.tsx"],"mappings":";;AAAA,SACEA,sBAAsB,EAKtBC,WAAW,EAEXC,oBAAoB,QACf,wBAAwB;AAAC,SAAAC,GAAA,IAAAC,IAAA;AAEhC,MAAMC,cAAc,GAClBC,KAOC,IACE;EACH,MAAM;IAAEC,KAAK;IAAEC,WAAW;IAAEC;EAAkB,CAAC,GAAGP,oBAAoB,CACpED,WAAW,EACXK,KACF,CAAC;EAED,oBACEF,IAAA,CAACK,iBAAiB;IAAAC,QAAA,EACfF,WAAW,CAACD,KAAK,CAACI,MAAM,CAACJ,KAAK,CAACK,KAAK,CAAC,CAACC,GAAG,CAAC,CAACC,MAAM,CAAC;EAAC,CACnC,CAAC;AAExB,CAAC;AAED,OAAO,SAASC,oBAAoBA,CAAA,EAUjC;EACD,OAAOf,sBAAsB,CAACK,cAAc,CAAC,CAAC,CAAC;AACjD","ignoreList":[]}
1
+ {"version":3,"names":["createNavigatorFactory","StackRouter","useNavigationBuilder","jsx","_jsx","StackNavigator","props","state","descriptors","NavigationContent","children","routes","index","key","render","createStackNavigator"],"sourceRoot":"../../../src","sources":["__stubs__/createStackNavigator.tsx"],"mappings":";;AAAA,SACEA,sBAAsB,EAKtBC,WAAW,EAEXC,oBAAoB,QACf,wBAAwB;AAAC,SAAAC,GAAA,IAAAC,IAAA;AAEhC,MAAMC,cAAc,GAClBC,KAMC,IACE;EACH,MAAM;IAAEC,KAAK;IAAEC,WAAW;IAAEC;EAAkB,CAAC,GAAGP,oBAAoB,CACpED,WAAW,EACXK,KACF,CAAC;EAED,oBACEF,IAAA,CAACK,iBAAiB;IAAAC,QAAA,EACfF,WAAW,CAACD,KAAK,CAACI,MAAM,CAACJ,KAAK,CAACK,KAAK,CAAC,CAACC,GAAG,CAAC,CAACC,MAAM,CAAC;EAAC,CACnC,CAAC;AAExB,CAAC;AAED,OAAO,SAASC,oBAAoBA,CAAA,EASjC;EACD,OAAOf,sBAAsB,CAACK,cAAc,CAAC,CAAC,CAAC;AACjD","ignoreList":[]}
@@ -3,15 +3,20 @@
3
3
  import escapeStringRegexp from 'escape-string-regexp';
4
4
  export function extractPathFromURL(prefixes, url) {
5
5
  for (const prefix of prefixes) {
6
- const protocol = prefix.match(/^[^:]+:/)?.[0] ?? '';
7
- const host = prefix.replace(new RegExp(`^${escapeStringRegexp(protocol)}`), '').replace(/\/+/g, '/') // Replace multiple slash (//) with single ones
8
- .replace(/^\//, ''); // Remove extra leading slash
6
+ let prefixRegex;
7
+ if (prefix === '*') {
8
+ prefixRegex = /^(((https?:\/\/)[^/]+)|([^/]+:(\/\/)?))/;
9
+ } else {
10
+ const protocol = prefix.match(/^[^:]+:/)?.[0] ?? '';
11
+ const host = prefix.replace(new RegExp(`^${escapeStringRegexp(protocol)}`), '').replace(/\/+/g, '/') // Replace multiple slash (//) with single ones
12
+ .replace(/^\//, ''); // Remove extra leading slash
9
13
 
10
- const prefixRegex = new RegExp(`^${escapeStringRegexp(protocol)}(/)*${host.split('.').map(it => it === '*' ? '[^/]+' : escapeStringRegexp(it)).join('\\.')}`);
14
+ prefixRegex = new RegExp(`^${escapeStringRegexp(protocol)}(/)*${host.split('.').map(it => it === '*' ? '[^/]+' : escapeStringRegexp(it)).join('\\.')}`);
15
+ }
11
16
  const [originAndPath, ...searchParams] = url.split('?');
12
- const normalizedURL = originAndPath.replace(/\/+/g, '/').concat(searchParams.length ? `?${searchParams.join('?')}` : '');
13
- if (prefixRegex.test(normalizedURL)) {
14
- return normalizedURL.replace(prefixRegex, '');
17
+ if (prefixRegex.test(originAndPath)) {
18
+ const result = originAndPath.replace(prefixRegex, '').replace(/\/+/g, '/').concat(searchParams.length ? `?${searchParams.join('?')}` : '');
19
+ return result.startsWith('/') ? result : `/${result}`;
15
20
  }
16
21
  }
17
22
  return undefined;
@@ -1 +1 @@
1
- {"version":3,"names":["escapeStringRegexp","extractPathFromURL","prefixes","url","prefix","protocol","match","host","replace","RegExp","prefixRegex","split","map","it","join","originAndPath","searchParams","normalizedURL","concat","length","test","undefined"],"sourceRoot":"../../src","sources":["extractPathFromURL.tsx"],"mappings":";;AAAA,OAAOA,kBAAkB,MAAM,sBAAsB;AAErD,OAAO,SAASC,kBAAkBA,CAACC,QAAkB,EAAEC,GAAW,EAAE;EAClE,KAAK,MAAMC,MAAM,IAAIF,QAAQ,EAAE;IAC7B,MAAMG,QAAQ,GAAGD,MAAM,CAACE,KAAK,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE;IACnD,MAAMC,IAAI,GAAGH,MAAM,CAChBI,OAAO,CAAC,IAAIC,MAAM,CAAC,IAAIT,kBAAkB,CAACK,QAAQ,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAC3DG,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAAA,CACrBA,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,CAAC;;IAEvB,MAAME,WAAW,GAAG,IAAID,MAAM,CAC5B,IAAIT,kBAAkB,CAACK,QAAQ,CAAC,OAAOE,IAAI,CACxCI,KAAK,CAAC,GAAG,CAAC,CACVC,GAAG,CAAEC,EAAE,IAAMA,EAAE,KAAK,GAAG,GAAG,OAAO,GAAGb,kBAAkB,CAACa,EAAE,CAAE,CAAC,CAC5DC,IAAI,CAAC,KAAK,CAAC,EAChB,CAAC;IAED,MAAM,CAACC,aAAa,EAAE,GAAGC,YAAY,CAAC,GAAGb,GAAG,CAACQ,KAAK,CAAC,GAAG,CAAC;IACvD,MAAMM,aAAa,GAAGF,aAAa,CAChCP,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC,CACpBU,MAAM,CAACF,YAAY,CAACG,MAAM,GAAG,IAAIH,YAAY,CAACF,IAAI,CAAC,GAAG,CAAC,EAAE,GAAG,EAAE,CAAC;IAElE,IAAIJ,WAAW,CAACU,IAAI,CAACH,aAAa,CAAC,EAAE;MACnC,OAAOA,aAAa,CAACT,OAAO,CAACE,WAAW,EAAE,EAAE,CAAC;IAC/C;EACF;EAEA,OAAOW,SAAS;AAClB","ignoreList":[]}
1
+ {"version":3,"names":["escapeStringRegexp","extractPathFromURL","prefixes","url","prefix","prefixRegex","protocol","match","host","replace","RegExp","split","map","it","join","originAndPath","searchParams","test","result","concat","length","startsWith","undefined"],"sourceRoot":"../../src","sources":["extractPathFromURL.tsx"],"mappings":";;AAAA,OAAOA,kBAAkB,MAAM,sBAAsB;AAIrD,OAAO,SAASC,kBAAkBA,CAACC,QAAyB,EAAEC,GAAW,EAAE;EACzE,KAAK,MAAMC,MAAM,IAAIF,QAAQ,EAAE;IAC7B,IAAIG,WAAW;IAEf,IAAID,MAAM,KAAK,GAAG,EAAE;MAClBC,WAAW,GAAG,yCAAyC;IACzD,CAAC,MAAM;MACL,MAAMC,QAAQ,GAAGF,MAAM,CAACG,KAAK,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE;MACnD,MAAMC,IAAI,GAAGJ,MAAM,CAChBK,OAAO,CAAC,IAAIC,MAAM,CAAC,IAAIV,kBAAkB,CAACM,QAAQ,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAC3DG,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;MAAA,CACrBA,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,CAAC;;MAEvBJ,WAAW,GAAG,IAAIK,MAAM,CACtB,IAAIV,kBAAkB,CAACM,QAAQ,CAAC,OAAOE,IAAI,CACxCG,KAAK,CAAC,GAAG,CAAC,CACVC,GAAG,CAAEC,EAAE,IAAMA,EAAE,KAAK,GAAG,GAAG,OAAO,GAAGb,kBAAkB,CAACa,EAAE,CAAE,CAAC,CAC5DC,IAAI,CAAC,KAAK,CAAC,EAChB,CAAC;IACH;IAEA,MAAM,CAACC,aAAa,EAAE,GAAGC,YAAY,CAAC,GAAGb,GAAG,CAACQ,KAAK,CAAC,GAAG,CAAC;IAEvD,IAAIN,WAAW,CAACY,IAAI,CAACF,aAAa,CAAC,EAAE;MACnC,MAAMG,MAAM,GAAGH,aAAa,CACzBN,OAAO,CAACJ,WAAW,EAAE,EAAE,CAAC,CACxBI,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC,CACpBU,MAAM,CAACH,YAAY,CAACI,MAAM,GAAG,IAAIJ,YAAY,CAACF,IAAI,CAAC,GAAG,CAAC,EAAE,GAAG,EAAE,CAAC;MAElE,OAAOI,MAAM,CAACG,UAAU,CAAC,GAAG,CAAC,GAAGH,MAAM,GAAG,IAAIA,MAAM,EAAE;IACvD;EACF;EAEA,OAAOI,SAAS;AAClB","ignoreList":[]}
@@ -0,0 +1,30 @@
1
+ "use strict";
2
+
3
+ import { getStateFromPath } from '@react-navigation/core';
4
+ import { extractPathFromURL } from "./extractPathFromURL.js";
5
+ export function getStateFromHref(href, options) {
6
+ const {
7
+ prefixes,
8
+ filter,
9
+ config,
10
+ getStateFromPath: getStateFromPathHelper = getStateFromPath
11
+ } = options || {};
12
+ let path;
13
+ if (href.startsWith('/')) {
14
+ path = href;
15
+ } else if (href) {
16
+ if (filter && !filter(href)) {
17
+ throw new Error(`Failed to parse href '${href}'. It doesn't match the filter specified in linking config.`);
18
+ }
19
+ if (prefixes == null || prefixes.length === 0) {
20
+ throw new Error(`Failed to parse href '${href}'. It doesn't start with '/' and no prefixes are defined in linking config.`);
21
+ }
22
+ path = extractPathFromURL(prefixes, href);
23
+ }
24
+ if (path == null) {
25
+ throw new Error(`Got invalid href '${href}'. It must start with '/' or match one of the prefixes: ${options?.prefixes?.map(prefix => `'${prefix}'`).join(', ')}.`);
26
+ }
27
+ const state = getStateFromPathHelper(path, config);
28
+ return state;
29
+ }
30
+ //# sourceMappingURL=getStateFromHref.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["getStateFromPath","extractPathFromURL","getStateFromHref","href","options","prefixes","filter","config","getStateFromPathHelper","path","startsWith","Error","length","map","prefix","join","state"],"sourceRoot":"../../src","sources":["getStateFromHref.tsx"],"mappings":";;AAAA,SAASA,gBAAgB,QAA4B,wBAAwB;AAE7E,SAASC,kBAAkB,QAAQ,yBAAsB;AAGzD,OAAO,SAASC,gBAAgBA,CAC9BC,IAAY,EACZC,OAAkD,EACb;EACrC,MAAM;IACJC,QAAQ;IACRC,MAAM;IACNC,MAAM;IACNP,gBAAgB,EAAEQ,sBAAsB,GAAGR;EAC7C,CAAC,GAAGI,OAAO,IAAI,CAAC,CAAC;EAEjB,IAAIK,IAAI;EAER,IAAIN,IAAI,CAACO,UAAU,CAAC,GAAG,CAAC,EAAE;IACxBD,IAAI,GAAGN,IAAI;EACb,CAAC,MAAM,IAAIA,IAAI,EAAE;IACf,IAAIG,MAAM,IAAI,CAACA,MAAM,CAACH,IAAI,CAAC,EAAE;MAC3B,MAAM,IAAIQ,KAAK,CACb,yBAAyBR,IAAI,6DAC/B,CAAC;IACH;IAEA,IAAIE,QAAQ,IAAI,IAAI,IAAIA,QAAQ,CAACO,MAAM,KAAK,CAAC,EAAE;MAC7C,MAAM,IAAID,KAAK,CACb,yBAAyBR,IAAI,6EAC/B,CAAC;IACH;IAEAM,IAAI,GAAGR,kBAAkB,CAACI,QAAQ,EAAEF,IAAI,CAAC;EAC3C;EAEA,IAAIM,IAAI,IAAI,IAAI,EAAE;IAChB,MAAM,IAAIE,KAAK,CACb,qBAAqBR,IAAI,2DAA2DC,OAAO,EAAEC,QAAQ,EAAEQ,GAAG,CAAEC,MAAM,IAAK,IAAIA,MAAM,GAAG,CAAC,CAACC,IAAI,CAAC,IAAI,CAAC,GAClJ,CAAC;EACH;EAEA,MAAMC,KAAK,GAAGR,sBAAsB,CAACC,IAAI,EAAEF,MAAM,CAAC;EAElD,OAAOS,KAAK;AACd","ignoreList":[]}
@@ -9,7 +9,6 @@ export { ServerContainer } from "./ServerContainer.js";
9
9
  export { DarkTheme } from "./theming/DarkTheme.js";
10
10
  export { DefaultTheme } from "./theming/DefaultTheme.js";
11
11
  export * from "./types.js";
12
- export { UnhandledLinkingContext as UNSTABLE_UnhandledLinkingContext } from "./UnhandledLinkingContext.js";
13
12
  export { useLinkBuilder } from "./useLinkBuilder.js";
14
13
  export { useLinkProps } from "./useLinkProps.js";
15
14
  export { useLinkTo } from "./useLinkTo.js";
@@ -1 +1 @@
1
- {"version":3,"names":["createStaticNavigation","Link","LinkingContext","LocaleDirContext","NavigationContainer","ServerContainer","DarkTheme","DefaultTheme","UnhandledLinkingContext","UNSTABLE_UnhandledLinkingContext","useLinkBuilder","useLinkProps","useLinkTo","useLocale","useRoutePath","useScrollToTop"],"sourceRoot":"../../src","sources":["index.tsx"],"mappings":";;AAAA,SAASA,sBAAsB,QAAQ,6BAA0B;AACjE,SAASC,IAAI,QAAQ,WAAQ;AAC7B,SAASC,cAAc,QAAQ,qBAAkB;AACjD,SAASC,gBAAgB,QAAQ,uBAAoB;AACrD,SAASC,mBAAmB,QAAQ,0BAAuB;AAC3D,SAASC,eAAe,QAAQ,sBAAmB;AACnD,SAASC,SAAS,QAAQ,wBAAqB;AAC/C,SAASC,YAAY,QAAQ,2BAAwB;AACrD,cAAc,YAAS;AACvB,SAASC,uBAAuB,IAAIC,gCAAgC,QAAQ,8BAA2B;AACvG,SAASC,cAAc,QAAQ,qBAAkB;AACjD,SAAyBC,YAAY,QAAQ,mBAAgB;AAC7D,SAASC,SAAS,QAAQ,gBAAa;AACvC,SAASC,SAAS,QAAQ,gBAAa;AACvC,SAASC,YAAY,QAAQ,mBAAgB;AAC7C,SAASC,cAAc,QAAQ,qBAAkB;AACjD,cAAc,wBAAwB","ignoreList":[]}
1
+ {"version":3,"names":["createStaticNavigation","Link","LinkingContext","LocaleDirContext","NavigationContainer","ServerContainer","DarkTheme","DefaultTheme","useLinkBuilder","useLinkProps","useLinkTo","useLocale","useRoutePath","useScrollToTop"],"sourceRoot":"../../src","sources":["index.tsx"],"mappings":";;AAAA,SAASA,sBAAsB,QAAQ,6BAA0B;AACjE,SAASC,IAAI,QAAQ,WAAQ;AAC7B,SAASC,cAAc,QAAQ,qBAAkB;AACjD,SAASC,gBAAgB,QAAQ,uBAAoB;AACrD,SAASC,mBAAmB,QAAQ,0BAAuB;AAC3D,SAASC,eAAe,QAAQ,sBAAmB;AACnD,SAASC,SAAS,QAAQ,wBAAqB;AAC/C,SAASC,YAAY,QAAQ,2BAAwB;AACrD,cAAc,YAAS;AACvB,SAASC,cAAc,QAAQ,qBAAkB;AACjD,SAAyBC,YAAY,QAAQ,mBAAgB;AAC7D,SAASC,SAAS,QAAQ,gBAAa;AACvC,SAASC,SAAS,QAAQ,gBAAa;AACvC,SAASC,YAAY,QAAQ,mBAAgB;AAC7C,SAASC,cAAc,QAAQ,qBAAkB;AACjD,cAAc,wBAAwB","ignoreList":[]}
@@ -1 +1 @@
1
- {"version":3,"names":["fonts","DarkTheme","dark","colors","primary","background","card","text","border","notification"],"sourceRoot":"../../../src","sources":["theming/DarkTheme.tsx"],"mappings":";;AACA,SAASA,KAAK,QAAQ,YAAS;AAE/B,OAAO,MAAMC,SAAgB,GAAG;EAC9BC,IAAI,EAAE,IAAI;EACVC,MAAM,EAAE;IACNC,OAAO,EAAE,mBAAmB;IAC5BC,UAAU,EAAE,cAAc;IAC1BC,IAAI,EAAE,iBAAiB;IACvBC,IAAI,EAAE,oBAAoB;IAC1BC,MAAM,EAAE,iBAAiB;IACzBC,YAAY,EAAE;EAChB,CAAC;EACDT;AACF,CAAC","ignoreList":[]}
1
+ {"version":3,"names":["fonts","DarkTheme","dark","colors","primary","background","card","text","border","notification"],"sourceRoot":"../../../src","sources":["theming/DarkTheme.tsx"],"mappings":";;AAEA,SAASA,KAAK,QAAQ,YAAS;AAE/B,OAAO,MAAMC,SAAS,GAAG;EACvBC,IAAI,EAAE,IAAI;EACVC,MAAM,EAAE;IACNC,OAAO,EAAE,mBAAmB;IAC5BC,UAAU,EAAE,cAAc;IAC1BC,IAAI,EAAE,iBAAiB;IACvBC,IAAI,EAAE,oBAAoB;IAC1BC,MAAM,EAAE,iBAAiB;IACzBC,YAAY,EAAE;EAChB,CAAC;EACDT;AACF,CAA0B","ignoreList":[]}
@@ -8,7 +8,7 @@ export const DefaultTheme = {
8
8
  background: 'rgb(242, 242, 242)',
9
9
  card: 'rgb(255, 255, 255)',
10
10
  text: 'rgb(28, 28, 30)',
11
- border: 'rgb(216, 216, 216)',
11
+ border: 'rgb(178, 178, 178)',
12
12
  notification: 'rgb(255, 59, 48)'
13
13
  },
14
14
  fonts
@@ -1 +1 @@
1
- {"version":3,"names":["fonts","DefaultTheme","dark","colors","primary","background","card","text","border","notification"],"sourceRoot":"../../../src","sources":["theming/DefaultTheme.tsx"],"mappings":";;AACA,SAASA,KAAK,QAAQ,YAAS;AAE/B,OAAO,MAAMC,YAAmB,GAAG;EACjCC,IAAI,EAAE,KAAK;EACXC,MAAM,EAAE;IACNC,OAAO,EAAE,kBAAkB;IAC3BC,UAAU,EAAE,oBAAoB;IAChCC,IAAI,EAAE,oBAAoB;IAC1BC,IAAI,EAAE,iBAAiB;IACvBC,MAAM,EAAE,oBAAoB;IAC5BC,YAAY,EAAE;EAChB,CAAC;EACDT;AACF,CAAC","ignoreList":[]}
1
+ {"version":3,"names":["fonts","DefaultTheme","dark","colors","primary","background","card","text","border","notification"],"sourceRoot":"../../../src","sources":["theming/DefaultTheme.tsx"],"mappings":";;AAEA,SAASA,KAAK,QAAQ,YAAS;AAE/B,OAAO,MAAMC,YAAY,GAAG;EAC1BC,IAAI,EAAE,KAAK;EACXC,MAAM,EAAE;IACNC,OAAO,EAAE,kBAAkB;IAC3BC,UAAU,EAAE,oBAAoB;IAChCC,IAAI,EAAE,oBAAoB;IAC1BC,IAAI,EAAE,iBAAiB;IACvBC,MAAM,EAAE,oBAAoB;IAC5BC,YAAY,EAAE;EAChB,CAAC;EACDT;AACF,CAA0B","ignoreList":[]}
@@ -1 +1 @@
1
- {"version":3,"names":["Platform","WEB_FONT_STACK","fonts","select","web","regular","fontFamily","fontWeight","medium","bold","heavy","ios","default"],"sourceRoot":"../../../src","sources":["theming/fonts.tsx"],"mappings":";;AAAA,SAASA,QAAQ,QAAQ,cAAc;AAIvC,MAAMC,cAAc,GAClB,uHAAuH;AAEzH,OAAO,MAAMC,KAAK,GAAGF,QAAQ,CAACG,MAAM,CAAC;EACnCC,GAAG,EAAE;IACHC,OAAO,EAAE;MACPC,UAAU,EAAEL,cAAc;MAC1BM,UAAU,EAAE;IACd,CAAC;IACDC,MAAM,EAAE;MACNF,UAAU,EAAEL,cAAc;MAC1BM,UAAU,EAAE;IACd,CAAC;IACDE,IAAI,EAAE;MACJH,UAAU,EAAEL,cAAc;MAC1BM,UAAU,EAAE;IACd,CAAC;IACDG,KAAK,EAAE;MACLJ,UAAU,EAAEL,cAAc;MAC1BM,UAAU,EAAE;IACd;EACF,CAAC;EACDI,GAAG,EAAE;IACHN,OAAO,EAAE;MACPC,UAAU,EAAE,QAAQ;MACpBC,UAAU,EAAE;IACd,CAAC;IACDC,MAAM,EAAE;MACNF,UAAU,EAAE,QAAQ;MACpBC,UAAU,EAAE;IACd,CAAC;IACDE,IAAI,EAAE;MACJH,UAAU,EAAE,QAAQ;MACpBC,UAAU,EAAE;IACd,CAAC;IACDG,KAAK,EAAE;MACLJ,UAAU,EAAE,QAAQ;MACpBC,UAAU,EAAE;IACd;EACF,CAAC;EACDK,OAAO,EAAE;IACPP,OAAO,EAAE;MACPC,UAAU,EAAE,YAAY;MACxBC,UAAU,EAAE;IACd,CAAC;IACDC,MAAM,EAAE;MACNF,UAAU,EAAE,mBAAmB;MAC/BC,UAAU,EAAE;IACd,CAAC;IACDE,IAAI,EAAE;MACJH,UAAU,EAAE,YAAY;MACxBC,UAAU,EAAE;IACd,CAAC;IACDG,KAAK,EAAE;MACLJ,UAAU,EAAE,YAAY;MACxBC,UAAU,EAAE;IACd;EACF;AACF,CAAmD,CAAC","ignoreList":[]}
1
+ {"version":3,"names":["Platform","WEB_FONT_STACK","fonts","select","web","regular","fontFamily","fontWeight","medium","bold","heavy","ios","default"],"sourceRoot":"../../../src","sources":["theming/fonts.tsx"],"mappings":";;AACA,SAASA,QAAQ,QAAQ,cAAc;AAEvC,MAAMC,cAAc,GAClB,uHAAuH;AAEzH,OAAO,MAAMC,KAAK,GAAGF,QAAQ,CAACG,MAAM,CAAC;EACnCC,GAAG,EAAE;IACHC,OAAO,EAAE;MACPC,UAAU,EAAEL,cAAc;MAC1BM,UAAU,EAAE;IACd,CAAC;IACDC,MAAM,EAAE;MACNF,UAAU,EAAEL,cAAc;MAC1BM,UAAU,EAAE;IACd,CAAC;IACDE,IAAI,EAAE;MACJH,UAAU,EAAEL,cAAc;MAC1BM,UAAU,EAAE;IACd,CAAC;IACDG,KAAK,EAAE;MACLJ,UAAU,EAAEL,cAAc;MAC1BM,UAAU,EAAE;IACd;EACF,CAAC;EACDI,GAAG,EAAE;IACHN,OAAO,EAAE;MACPC,UAAU,EAAE,QAAQ;MACpBC,UAAU,EAAE;IACd,CAAC;IACDC,MAAM,EAAE;MACNF,UAAU,EAAE,QAAQ;MACpBC,UAAU,EAAE;IACd,CAAC;IACDE,IAAI,EAAE;MACJH,UAAU,EAAE,QAAQ;MACpBC,UAAU,EAAE;IACd,CAAC;IACDG,KAAK,EAAE;MACLJ,UAAU,EAAE,QAAQ;MACpBC,UAAU,EAAE;IACd;EACF,CAAC;EACDK,OAAO,EAAE;IACPP,OAAO,EAAE;MACPC,UAAU,EAAE,YAAY;MACxBC,UAAU,EAAE;IACd,CAAC;IACDC,MAAM,EAAE;MACNF,UAAU,EAAE,mBAAmB;MAC/BC,UAAU,EAAE;IACd,CAAC;IACDE,IAAI,EAAE;MACJH,UAAU,EAAE,YAAY;MACxBC,UAAU,EAAE;IACd,CAAC;IACDG,KAAK,EAAE;MACLJ,UAAU,EAAE,YAAY;MACxBC,UAAU,EAAE;IACd;EACF;AACF,CAAmD,CAAC","ignoreList":[]}
@@ -1,7 +1,8 @@
1
1
  "use strict";
2
2
 
3
- import { CommonActions, findFocusedRoute, getActionFromState, getPathFromState, getStateFromPath, NavigationHelpersContext, NavigationRouteContext, useStateForPath } from '@react-navigation/core';
3
+ import { CommonActions, findFocusedRoute, getActionFromState, getPathFromState, NavigationHelpersContext, NavigationRouteContext, useStateForPath } from '@react-navigation/core';
4
4
  import * as React from 'react';
5
+ import { getStateFromHref } from "./getStateFromHref.js";
5
6
  import { LinkingContext } from "./LinkingContext.js";
6
7
  /**
7
8
  * Helpers to build href or action based on the linking options.
@@ -16,7 +17,6 @@ export function useLinkBuilder() {
16
17
  } = React.useContext(LinkingContext);
17
18
  const focusedRouteState = useStateForPath();
18
19
  const getPathFromStateHelper = options?.getPathFromState ?? getPathFromState;
19
- const getStateFromPathHelper = options?.getStateFromPath ?? getStateFromPath;
20
20
  const getActionFromStateHelper = options?.getActionFromState ?? getActionFromState;
21
21
  const buildHref = React.useCallback((name, params) => {
22
22
  if (options?.enabled === false) {
@@ -66,17 +66,14 @@ export function useLinkBuilder() {
66
66
  return path;
67
67
  }, [options?.enabled, options?.config, route?.key, navigation, focusedRouteState, getPathFromStateHelper]);
68
68
  const buildAction = React.useCallback(href => {
69
- if (!href.startsWith('/')) {
70
- throw new Error(`The href must start with '/' (${href}).`);
71
- }
72
- const state = getStateFromPathHelper(href, options?.config);
69
+ const state = getStateFromHref(href, options);
73
70
  if (state) {
74
71
  const action = getActionFromStateHelper(state, options?.config);
75
72
  return action ?? CommonActions.reset(state);
76
73
  } else {
77
- throw new Error('Failed to parse the href to a navigation state.');
74
+ throw new Error(`Failed to parse href '${href}' to a navigation state.`);
78
75
  }
79
- }, [options?.config, getStateFromPathHelper, getActionFromStateHelper]);
76
+ }, [options, getActionFromStateHelper]);
80
77
  return {
81
78
  buildHref,
82
79
  buildAction
@@ -1 +1 @@
1
- {"version":3,"names":["CommonActions","findFocusedRoute","getActionFromState","getPathFromState","getStateFromPath","NavigationHelpersContext","NavigationRouteContext","useStateForPath","React","LinkingContext","useLinkBuilder","navigation","useContext","route","options","focusedRouteState","getPathFromStateHelper","getStateFromPathHelper","getActionFromStateHelper","buildHref","useCallback","name","params","enabled","undefined","isScreen","key","getState","routes","some","r","stateForRoute","constructState","state","path","config","buildAction","href","startsWith","Error","action","reset"],"sourceRoot":"../../src","sources":["useLinkBuilder.tsx"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["CommonActions","findFocusedRoute","getActionFromState","getPathFromState","NavigationHelpersContext","NavigationRouteContext","useStateForPath","React","getStateFromHref","LinkingContext","useLinkBuilder","navigation","useContext","route","options","focusedRouteState","getPathFromStateHelper","getActionFromStateHelper","buildHref","useCallback","name","params","enabled","undefined","isScreen","key","getState","routes","some","r","stateForRoute","constructState","state","path","config","buildAction","href","action","reset","Error"],"sourceRoot":"../../src","sources":["useLinkBuilder.tsx"],"mappings":";;AAAA,SACEA,aAAa,EACbC,gBAAgB,EAChBC,kBAAkB,EAClBC,gBAAgB,EAChBC,wBAAwB,EACxBC,sBAAsB,EACtBC,eAAe,QACV,wBAAwB;AAC/B,OAAO,KAAKC,KAAK,MAAM,OAAO;AAE9B,SAASC,gBAAgB,QAAQ,uBAAoB;AACrD,SAASC,cAAc,QAAQ,qBAAkB;AAMjD;AACA;AACA;AACA;AACA;AACA,OAAO,SAASC,cAAcA,CAAA,EAAG;EAC/B,MAAMC,UAAU,GAAGJ,KAAK,CAACK,UAAU,CAACR,wBAAwB,CAAC;EAC7D,MAAMS,KAAK,GAAGN,KAAK,CAACK,UAAU,CAACP,sBAAsB,CAAC;EAEtD,MAAM;IAAES;EAAQ,CAAC,GAAGP,KAAK,CAACK,UAAU,CAACH,cAAc,CAAC;EAEpD,MAAMM,iBAAiB,GAAGT,eAAe,CAAC,CAAC;EAE3C,MAAMU,sBAAsB,GAAGF,OAAO,EAAEX,gBAAgB,IAAIA,gBAAgB;EAC5E,MAAMc,wBAAwB,GAC5BH,OAAO,EAAEZ,kBAAkB,IAAIA,kBAAkB;EAEnD,MAAMgB,SAAS,GAAGX,KAAK,CAACY,WAAW,CACjC,CAACC,IAAY,EAAEC,MAAe,KAAK;IACjC,IAAIP,OAAO,EAAEQ,OAAO,KAAK,KAAK,EAAE;MAC9B,OAAOC,SAAS;IAClB;;IAEA;IACA;IACA;IACA;IACA;IACA,MAAMC,QAAQ,GACZb,UAAU,IAAIE,KAAK,EAAEY,GAAG,IAAIV,iBAAiB,GACzCF,KAAK,CAACY,GAAG,KAAKxB,gBAAgB,CAACc,iBAAiB,CAAC,EAAEU,GAAG,IACtDd,UAAU,CAACe,QAAQ,CAAC,CAAC,CAACC,MAAM,CAACC,IAAI,CAAEC,CAAC,IAAKA,CAAC,CAACJ,GAAG,KAAKZ,KAAK,CAACY,GAAG,CAAC,GAC7D,KAAK;IAEX,MAAMK,aAA2B,GAAG;MAClCH,MAAM,EAAE,CAAC;QAAEP,IAAI;QAAEC;MAAO,CAAC;IAC3B,CAAC;IAED,MAAMU,cAAc,GAClBC,KAA+B,IACd;MACjB,IAAIA,KAAK,EAAE;QACT,MAAMnB,KAAK,GAAGmB,KAAK,CAACL,MAAM,CAAC,CAAC,CAAC;;QAE7B;QACA;QACA;QACA,IAAIH,QAAQ,IAAI,CAACX,KAAK,CAACmB,KAAK,EAAE;UAC5B,OAAOF,aAAa;QACtB;;QAEA;QACA,OAAO;UACLH,MAAM,EAAE,CACN;YACE,GAAGd,KAAK;YACRmB,KAAK,EAAED,cAAc,CAAClB,KAAK,CAACmB,KAAK;UACnC,CAAC;QAEL,CAAC;MACH;;MAEA;MACA;MACA;MACA;MACA,OAAOF,aAAa;IACtB,CAAC;IAED,MAAME,KAAK,GAAGD,cAAc,CAAChB,iBAAiB,CAAC;IAC/C,MAAMkB,IAAI,GAAGjB,sBAAsB,CAACgB,KAAK,EAAElB,OAAO,EAAEoB,MAAM,CAAC;IAE3D,OAAOD,IAAI;EACb,CAAC,EACD,CACEnB,OAAO,EAAEQ,OAAO,EAChBR,OAAO,EAAEoB,MAAM,EACfrB,KAAK,EAAEY,GAAG,EACVd,UAAU,EACVI,iBAAiB,EACjBC,sBAAsB,CAE1B,CAAC;EAED,MAAMmB,WAAW,GAAG5B,KAAK,CAACY,WAAW,CAClCiB,IAAY,IAAK;IAChB,MAAMJ,KAAK,GAAGxB,gBAAgB,CAAC4B,IAAI,EAAEtB,OAAO,CAAC;IAE7C,IAAIkB,KAAK,EAAE;MACT,MAAMK,MAAM,GAAGpB,wBAAwB,CAACe,KAAK,EAAElB,OAAO,EAAEoB,MAAM,CAAC;MAE/D,OAAOG,MAAM,IAAIrC,aAAa,CAACsC,KAAK,CAACN,KAAK,CAAC;IAC7C,CAAC,MAAM;MACL,MAAM,IAAIO,KAAK,CACb,yBAAyBH,IAAI,0BAC/B,CAAC;IACH;EACF,CAAC,EACD,CAACtB,OAAO,EAAEG,wBAAwB,CACpC,CAAC;EAED,OAAO;IACLC,SAAS;IACTiB;EACF,CAAC;AACH","ignoreList":[]}
@@ -75,6 +75,26 @@ export function useLinkProps({
75
75
  }
76
76
  };
77
77
  const getPathFromStateHelper = options?.getPathFromState ?? getPathFromState;
78
+ if (Platform.OS === 'web') {
79
+ if (screen == null && action != null && options?.config != null) {
80
+ switch (action.type) {
81
+ case 'NAVIGATE':
82
+ case 'PUSH':
83
+ case 'REPLACE':
84
+ case 'POP_TO':
85
+ case 'JUMP_TO':
86
+ {
87
+ if (action.payload != null && 'name' in action.payload && typeof action.payload.name === 'string' && action.payload.name in options.config.screens) {
88
+ screen = action.payload.name;
89
+ if ('params' in action.payload && typeof action.payload.params === 'object' && action.payload.params != null) {
90
+ // @ts-expect-error this is fine 🔥
91
+ params = action.payload.params;
92
+ }
93
+ }
94
+ }
95
+ }
96
+ }
97
+ }
78
98
  return {
79
99
  href: href ?? (Platform.OS === 'web' && screen != null ? getPathFromStateHelper({
80
100
  routes: [{
@@ -1 +1 @@
1
- {"version":3,"names":["getPathFromState","NavigationContainerRefContext","NavigationHelpersContext","React","Platform","LinkingContext","getStateFromParams","params","state","screen","routes","name","undefined","useLinkProps","href","action","root","useContext","navigation","options","onPress","e","shouldHandle","OS","preventDefault","hasModifierKey","metaKey","altKey","ctrlKey","shiftKey","isLeftClick","button","isSelfTarget","currentTarget","includes","target","dispatch","Error","navigate","getPathFromStateHelper","config","role"],"sourceRoot":"../../src","sources":["useLinkProps.tsx"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["getPathFromState","NavigationContainerRefContext","NavigationHelpersContext","React","Platform","LinkingContext","getStateFromParams","params","state","screen","routes","name","undefined","useLinkProps","href","action","root","useContext","navigation","options","onPress","e","shouldHandle","OS","preventDefault","hasModifierKey","metaKey","altKey","ctrlKey","shiftKey","isLeftClick","button","isSelfTarget","currentTarget","includes","target","dispatch","Error","navigate","getPathFromStateHelper","config","type","payload","screens","role"],"sourceRoot":"../../src","sources":["useLinkProps.tsx"],"mappings":"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","ignoreList":[]}
@@ -5,6 +5,17 @@ import isEqual from 'fast-deep-equal';
5
5
  import * as React from 'react';
6
6
  import { createMemoryHistory } from "./createMemoryHistory.js";
7
7
  import { ServerContext } from "./ServerContext.js";
8
+ /**
9
+ * Calculate total history length including both navigator history and route history
10
+ */
11
+ const getTotalHistoryLength = state => {
12
+ const baseHistoryLength = state.history ? state.history.length : state.routes.length;
13
+ const routeHistoryLength = state.routes.reduce((acc, r) => {
14
+ return acc + (r.history ? r.history.length : 0);
15
+ }, 0);
16
+ return baseHistoryLength + routeHistoryLength;
17
+ };
18
+
8
19
  /**
9
20
  * Find the matching navigation state that changed between 2 navigation states
10
21
  * e.g.: a -> b -> c -> d and a -> b -> c -> e -> f, if history in b changed, b is the matching state
@@ -13,21 +24,20 @@ const findMatchingState = (a, b) => {
13
24
  if (a === undefined || b === undefined || a.key !== b.key) {
14
25
  return [undefined, undefined];
15
26
  }
16
-
17
- // Tab and drawer will have `history` property, but stack will have history in `routes`
18
- const aHistoryLength = a.history ? a.history.length : a.routes.length;
19
- const bHistoryLength = b.history ? b.history.length : b.routes.length;
27
+ const aHistoryLength = getTotalHistoryLength(a);
28
+ const bHistoryLength = getTotalHistoryLength(b);
20
29
  const aRoute = a.routes[a.index];
21
30
  const bRoute = b.routes[b.index];
22
31
  const aChildState = aRoute.state;
23
32
  const bChildState = bRoute.state;
24
33
 
25
34
  // Stop here if this is the state object that changed:
26
- // - history length is different
35
+ // - total history length is different (including route.history)
27
36
  // - focused routes are different
37
+ // - route.history length is different
28
38
  // - one of them doesn't have child state
29
39
  // - child state keys are different
30
- if (aHistoryLength !== bHistoryLength || aRoute.key !== bRoute.key || aChildState === undefined || bChildState === undefined || aChildState.key !== bChildState.key) {
40
+ if (aHistoryLength !== bHistoryLength || aRoute.key !== bRoute.key || (aRoute.history?.length || 0) !== (bRoute.history?.length || 0) || aChildState === undefined || bChildState === undefined || aChildState.key !== bChildState.key) {
31
41
  return [a, b];
32
42
  }
33
43
  return findMatchingState(aChildState, bChildState);
@@ -44,14 +54,14 @@ export const series = cb => {
44
54
  };
45
55
  return callback;
46
56
  };
47
- const linkingHandlers = [];
57
+ const linkingHandlers = new Set();
48
58
  export function useLinking(ref, {
49
59
  enabled = true,
50
60
  config,
51
61
  getStateFromPath = getStateFromPathDefault,
52
62
  getPathFromState = getPathFromStateDefault,
53
63
  getActionFromState = getActionFromStateDefault
54
- }, onUnhandledLinking) {
64
+ }) {
55
65
  const independent = useNavigationIndependentTree();
56
66
  React.useEffect(() => {
57
67
  if (process.env.NODE_ENV === 'production') {
@@ -60,18 +70,15 @@ export function useLinking(ref, {
60
70
  if (independent) {
61
71
  return undefined;
62
72
  }
63
- if (enabled !== false && linkingHandlers.length) {
73
+ if (enabled !== false && linkingHandlers.size) {
64
74
  console.error(['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:', "- You don't have multiple NavigationContainers in the app each with 'linking' enabled", '- Only a single instance of the root component is rendered'].join('\n').trim());
65
75
  }
66
76
  const handler = Symbol();
67
77
  if (enabled !== false) {
68
- linkingHandlers.push(handler);
78
+ linkingHandlers.add(handler);
69
79
  }
70
80
  return () => {
71
- const index = linkingHandlers.indexOf(handler);
72
- if (index > -1) {
73
- linkingHandlers.splice(index, 1);
74
- }
81
+ linkingHandlers.delete(handler);
75
82
  };
76
83
  }, [enabled, independent]);
77
84
  const [history] = React.useState(createMemoryHistory);
@@ -107,16 +114,10 @@ export function useLinking(ref, {
107
114
  if (path) {
108
115
  value = getStateFromPathRef.current(path, configRef.current);
109
116
  }
110
-
111
- // If the link were handled, it gets cleared in NavigationContainer
112
- onUnhandledLinking(path);
113
117
  }
114
118
  const thenable = {
115
119
  then(onfulfilled) {
116
120
  return Promise.resolve(onfulfilled ? onfulfilled(value) : value);
117
- },
118
- catch() {
119
- return thenable;
120
121
  }
121
122
  };
122
123
  return thenable;
@@ -154,8 +155,6 @@ export function useLinking(ref, {
154
155
  // We should only dispatch an action when going forward
155
156
  // Otherwise the action will likely add items to history, which would mess things up
156
157
  if (state) {
157
- // If the link were handled, it gets cleared in NavigationContainer
158
- onUnhandledLinking(path);
159
158
  // Make sure that the routes in the state exist in the root navigator
160
159
  // Otherwise there's an error in the linking configuration
161
160
  if (validateRoutesNotExistInRootState(state)) {
@@ -182,7 +181,7 @@ export function useLinking(ref, {
182
181
  navigation.resetRoot(state);
183
182
  }
184
183
  });
185
- }, [enabled, history, onUnhandledLinking, ref, validateRoutesNotExistInRootState]);
184
+ }, [enabled, history, ref, validateRoutesNotExistInRootState]);
186
185
  React.useEffect(() => {
187
186
  if (!enabled) {
188
187
  return;
@@ -255,7 +254,7 @@ export function useLinking(ref, {
255
254
  // We should only handle push/pop if path changed from what was in last `popstate`
256
255
  // Otherwise it's likely a change triggered by `popstate`
257
256
  path !== pendingPath) {
258
- const historyDelta = (focusedState.history ? focusedState.history.length : focusedState.routes.length) - (previousFocusedState.history ? previousFocusedState.history.length : previousFocusedState.routes.length);
257
+ const historyDelta = getTotalHistoryLength(focusedState) - getTotalHistoryLength(previousFocusedState);
259
258
  if (historyDelta > 0) {
260
259
  // If history length is increased, we should pushState
261
260
  // Note that path might not actually change here, for example, drawer open should pushState