@react-navigation/native 7.1.1 → 7.1.3

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.
@@ -15,6 +15,8 @@ function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e;
15
15
  * @returns `buildHref` to build an `href` for screen and `buildAction` to build an action from an `href`.
16
16
  */
17
17
  function useLinkBuilder() {
18
+ const navigation = React.useContext(_core.NavigationHelpersContext);
19
+ const route = React.useContext(_core.NavigationRouteContext);
18
20
  const {
19
21
  options
20
22
  } = React.useContext(_LinkingContext.LinkingContext);
@@ -23,27 +25,52 @@ function useLinkBuilder() {
23
25
  const getStateFromPathHelper = options?.getStateFromPath ?? _core.getStateFromPath;
24
26
  const getActionFromStateHelper = options?.getActionFromState ?? _core.getActionFromState;
25
27
  const buildHref = React.useCallback((name, params) => {
26
- const addStateToInnermostRoute = state => {
28
+ if (options?.enabled === false) {
29
+ return undefined;
30
+ }
31
+
32
+ // Check that we're inside:
33
+ // - navigator's context
34
+ // - route context of the navigator (could be a screen, tab, etc.)
35
+ // - route matches the state for path (from the screen's context)
36
+ // This ensures that we're inside a screen
37
+ const isScreen = navigation && route?.key && focusedRouteState ? route.key === (0, _core.findFocusedRoute)(focusedRouteState)?.key && navigation.getState().routes.some(r => r.key === route.key) : false;
38
+ const stateForRoute = {
39
+ routes: [{
40
+ name,
41
+ params
42
+ }]
43
+ };
44
+ const constructState = state => {
27
45
  if (state) {
28
46
  const route = state.routes[0];
47
+
48
+ // If we're inside a screen and at the innermost route
49
+ // We need to replace the state with the provided one
50
+ // This assumes that we're navigating to a sibling route
51
+ if (isScreen && !route.state) {
52
+ return stateForRoute;
53
+ }
54
+
55
+ // Otherwise, dive into the nested state of the route
29
56
  return {
30
57
  routes: [{
31
58
  ...route,
32
- state: addStateToInnermostRoute(route.state)
59
+ state: constructState(route.state)
33
60
  }]
34
61
  };
35
62
  }
36
- return {
37
- routes: [{
38
- name,
39
- params
40
- }]
41
- };
63
+
64
+ // Once there is no more nested state, we're at the innermost route
65
+ // We can add a state based on provided parameters
66
+ // This assumes that we're navigating to a child of this route
67
+ // In this case, the helper is used in a navigator for its routes
68
+ return stateForRoute;
42
69
  };
43
- const state = addStateToInnermostRoute(focusedRouteState);
70
+ const state = constructState(focusedRouteState);
44
71
  const path = getPathFromStateHelper(state, options?.config);
45
72
  return path;
46
- }, [options?.config, getPathFromStateHelper, focusedRouteState]);
73
+ }, [options?.enabled, options?.config, route?.key, navigation, focusedRouteState, getPathFromStateHelper]);
47
74
  const buildAction = React.useCallback(href => {
48
75
  if (!href.startsWith('/')) {
49
76
  throw new Error(`The href must start with '/' (${href}).`);
@@ -1 +1 @@
1
- {"version":3,"names":["_core","require","React","_interopRequireWildcard","_LinkingContext","_getRequireWildcardCache","e","WeakMap","r","t","__esModule","default","has","get","n","__proto__","a","Object","defineProperty","getOwnPropertyDescriptor","u","hasOwnProperty","call","i","set","useLinkBuilder","options","useContext","LinkingContext","focusedRouteState","useStateForPath","getPathFromStateHelper","getPathFromState","getStateFromPathHelper","getStateFromPath","getActionFromStateHelper","getActionFromState","buildHref","useCallback","name","params","addStateToInnermostRoute","state","route","routes","path","config","buildAction","href","startsWith","Error","action","CommonActions","reset"],"sourceRoot":"../../src","sources":["useLinkBuilder.tsx"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["_core","require","React","_interopRequireWildcard","_LinkingContext","_getRequireWildcardCache","e","WeakMap","r","t","__esModule","default","has","get","n","__proto__","a","Object","defineProperty","getOwnPropertyDescriptor","u","hasOwnProperty","call","i","set","useLinkBuilder","navigation","useContext","NavigationHelpersContext","route","NavigationRouteContext","options","LinkingContext","focusedRouteState","useStateForPath","getPathFromStateHelper","getPathFromState","getStateFromPathHelper","getStateFromPath","getActionFromStateHelper","getActionFromState","buildHref","useCallback","name","params","enabled","undefined","isScreen","key","findFocusedRoute","getState","routes","some","stateForRoute","constructState","state","path","config","buildAction","href","startsWith","Error","action","CommonActions","reset"],"sourceRoot":"../../src","sources":["useLinkBuilder.tsx"],"mappings":"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","ignoreList":[]}
@@ -24,9 +24,12 @@ function useRoutePath() {
24
24
  }
25
25
  const getPathFromStateHelper = options?.getPathFromState ?? _core.getPathFromState;
26
26
  const path = React.useMemo(() => {
27
+ if (options?.enabled === false) {
28
+ return undefined;
29
+ }
27
30
  const path = getPathFromStateHelper(state, options?.config);
28
31
  return path;
29
- }, [state, options?.config, getPathFromStateHelper]);
32
+ }, [options?.enabled, options?.config, state, getPathFromStateHelper]);
30
33
  return path;
31
34
  }
32
35
  //# sourceMappingURL=useRoutePath.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["_core","require","React","_interopRequireWildcard","_LinkingContext","_getRequireWildcardCache","e","WeakMap","r","t","__esModule","default","has","get","n","__proto__","a","Object","defineProperty","getOwnPropertyDescriptor","u","hasOwnProperty","call","i","set","useRoutePath","options","useContext","LinkingContext","state","useStateForPath","undefined","Error","getPathFromStateHelper","getPathFromState","path","useMemo","config"],"sourceRoot":"../../src","sources":["useRoutePath.tsx"],"mappings":";;;;;;AAAA,IAAAA,KAAA,GAAAC,OAAA;AACA,IAAAC,KAAA,GAAAC,uBAAA,CAAAF,OAAA;AAEA,IAAAG,eAAA,GAAAH,OAAA;AAAkD,SAAAI,yBAAAC,CAAA,6BAAAC,OAAA,mBAAAC,CAAA,OAAAD,OAAA,IAAAE,CAAA,OAAAF,OAAA,YAAAF,wBAAA,YAAAA,CAAAC,CAAA,WAAAA,CAAA,GAAAG,CAAA,GAAAD,CAAA,KAAAF,CAAA;AAAA,SAAAH,wBAAAG,CAAA,EAAAE,CAAA,SAAAA,CAAA,IAAAF,CAAA,IAAAA,CAAA,CAAAI,UAAA,SAAAJ,CAAA,eAAAA,CAAA,uBAAAA,CAAA,yBAAAA,CAAA,WAAAK,OAAA,EAAAL,CAAA,QAAAG,CAAA,GAAAJ,wBAAA,CAAAG,CAAA,OAAAC,CAAA,IAAAA,CAAA,CAAAG,GAAA,CAAAN,CAAA,UAAAG,CAAA,CAAAI,GAAA,CAAAP,CAAA,OAAAQ,CAAA,KAAAC,SAAA,UAAAC,CAAA,GAAAC,MAAA,CAAAC,cAAA,IAAAD,MAAA,CAAAE,wBAAA,WAAAC,CAAA,IAAAd,CAAA,oBAAAc,CAAA,OAAAC,cAAA,CAAAC,IAAA,CAAAhB,CAAA,EAAAc,CAAA,SAAAG,CAAA,GAAAP,CAAA,GAAAC,MAAA,CAAAE,wBAAA,CAAAb,CAAA,EAAAc,CAAA,UAAAG,CAAA,KAAAA,CAAA,CAAAV,GAAA,IAAAU,CAAA,CAAAC,GAAA,IAAAP,MAAA,CAAAC,cAAA,CAAAJ,CAAA,EAAAM,CAAA,EAAAG,CAAA,IAAAT,CAAA,CAAAM,CAAA,IAAAd,CAAA,CAAAc,CAAA,YAAAN,CAAA,CAAAH,OAAA,GAAAL,CAAA,EAAAG,CAAA,IAAAA,CAAA,CAAAe,GAAA,CAAAlB,CAAA,EAAAQ,CAAA,GAAAA,CAAA;AAElD;AACA;AACA;AACA;AACA;AACO,SAASW,YAAYA,CAAA,EAAG;EAC7B,MAAM;IAAEC;EAAQ,CAAC,GAAGxB,KAAK,CAACyB,UAAU,CAACC,8BAAc,CAAC;EACpD,MAAMC,KAAK,GAAG,IAAAC,qBAAe,EAAC,CAAC;EAE/B,IAAID,KAAK,KAAKE,SAAS,EAAE;IACvB,MAAM,IAAIC,KAAK,CACb,+FACF,CAAC;EACH;EAEA,MAAMC,sBAAsB,GAAGP,OAAO,EAAEQ,gBAAgB,IAAIA,sBAAgB;EAE5E,MAAMC,IAAI,GAAGjC,KAAK,CAACkC,OAAO,CAAC,MAAM;IAC/B,MAAMD,IAAI,GAAGF,sBAAsB,CAACJ,KAAK,EAAEH,OAAO,EAAEW,MAAM,CAAC;IAE3D,OAAOF,IAAI;EACb,CAAC,EAAE,CAACN,KAAK,EAAEH,OAAO,EAAEW,MAAM,EAAEJ,sBAAsB,CAAC,CAAC;EAEpD,OAAOE,IAAI;AACb","ignoreList":[]}
1
+ {"version":3,"names":["_core","require","React","_interopRequireWildcard","_LinkingContext","_getRequireWildcardCache","e","WeakMap","r","t","__esModule","default","has","get","n","__proto__","a","Object","defineProperty","getOwnPropertyDescriptor","u","hasOwnProperty","call","i","set","useRoutePath","options","useContext","LinkingContext","state","useStateForPath","undefined","Error","getPathFromStateHelper","getPathFromState","path","useMemo","enabled","config"],"sourceRoot":"../../src","sources":["useRoutePath.tsx"],"mappings":";;;;;;AAAA,IAAAA,KAAA,GAAAC,OAAA;AACA,IAAAC,KAAA,GAAAC,uBAAA,CAAAF,OAAA;AAEA,IAAAG,eAAA,GAAAH,OAAA;AAAkD,SAAAI,yBAAAC,CAAA,6BAAAC,OAAA,mBAAAC,CAAA,OAAAD,OAAA,IAAAE,CAAA,OAAAF,OAAA,YAAAF,wBAAA,YAAAA,CAAAC,CAAA,WAAAA,CAAA,GAAAG,CAAA,GAAAD,CAAA,KAAAF,CAAA;AAAA,SAAAH,wBAAAG,CAAA,EAAAE,CAAA,SAAAA,CAAA,IAAAF,CAAA,IAAAA,CAAA,CAAAI,UAAA,SAAAJ,CAAA,eAAAA,CAAA,uBAAAA,CAAA,yBAAAA,CAAA,WAAAK,OAAA,EAAAL,CAAA,QAAAG,CAAA,GAAAJ,wBAAA,CAAAG,CAAA,OAAAC,CAAA,IAAAA,CAAA,CAAAG,GAAA,CAAAN,CAAA,UAAAG,CAAA,CAAAI,GAAA,CAAAP,CAAA,OAAAQ,CAAA,KAAAC,SAAA,UAAAC,CAAA,GAAAC,MAAA,CAAAC,cAAA,IAAAD,MAAA,CAAAE,wBAAA,WAAAC,CAAA,IAAAd,CAAA,oBAAAc,CAAA,OAAAC,cAAA,CAAAC,IAAA,CAAAhB,CAAA,EAAAc,CAAA,SAAAG,CAAA,GAAAP,CAAA,GAAAC,MAAA,CAAAE,wBAAA,CAAAb,CAAA,EAAAc,CAAA,UAAAG,CAAA,KAAAA,CAAA,CAAAV,GAAA,IAAAU,CAAA,CAAAC,GAAA,IAAAP,MAAA,CAAAC,cAAA,CAAAJ,CAAA,EAAAM,CAAA,EAAAG,CAAA,IAAAT,CAAA,CAAAM,CAAA,IAAAd,CAAA,CAAAc,CAAA,YAAAN,CAAA,CAAAH,OAAA,GAAAL,CAAA,EAAAG,CAAA,IAAAA,CAAA,CAAAe,GAAA,CAAAlB,CAAA,EAAAQ,CAAA,GAAAA,CAAA;AAElD;AACA;AACA;AACA;AACA;AACO,SAASW,YAAYA,CAAA,EAAG;EAC7B,MAAM;IAAEC;EAAQ,CAAC,GAAGxB,KAAK,CAACyB,UAAU,CAACC,8BAAc,CAAC;EACpD,MAAMC,KAAK,GAAG,IAAAC,qBAAe,EAAC,CAAC;EAE/B,IAAID,KAAK,KAAKE,SAAS,EAAE;IACvB,MAAM,IAAIC,KAAK,CACb,+FACF,CAAC;EACH;EAEA,MAAMC,sBAAsB,GAAGP,OAAO,EAAEQ,gBAAgB,IAAIA,sBAAgB;EAE5E,MAAMC,IAAI,GAAGjC,KAAK,CAACkC,OAAO,CAAC,MAAM;IAC/B,IAAIV,OAAO,EAAEW,OAAO,KAAK,KAAK,EAAE;MAC9B,OAAON,SAAS;IAClB;IAEA,MAAMI,IAAI,GAAGF,sBAAsB,CAACJ,KAAK,EAAEH,OAAO,EAAEY,MAAM,CAAC;IAE3D,OAAOH,IAAI;EACb,CAAC,EAAE,CAACT,OAAO,EAAEW,OAAO,EAAEX,OAAO,EAAEY,MAAM,EAAET,KAAK,EAAEI,sBAAsB,CAAC,CAAC;EAEtE,OAAOE,IAAI;AACb","ignoreList":[]}
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
 
3
- import { CommonActions, getActionFromState, getPathFromState, getStateFromPath, useStateForPath } from '@react-navigation/core';
3
+ import { CommonActions, findFocusedRoute, getActionFromState, getPathFromState, getStateFromPath, NavigationHelpersContext, NavigationRouteContext, useStateForPath } from '@react-navigation/core';
4
4
  import * as React from 'react';
5
5
  import { LinkingContext } from "./LinkingContext.js";
6
6
  /**
@@ -9,6 +9,8 @@ import { LinkingContext } from "./LinkingContext.js";
9
9
  * @returns `buildHref` to build an `href` for screen and `buildAction` to build an action from an `href`.
10
10
  */
11
11
  export function useLinkBuilder() {
12
+ const navigation = React.useContext(NavigationHelpersContext);
13
+ const route = React.useContext(NavigationRouteContext);
12
14
  const {
13
15
  options
14
16
  } = React.useContext(LinkingContext);
@@ -17,27 +19,52 @@ export function useLinkBuilder() {
17
19
  const getStateFromPathHelper = options?.getStateFromPath ?? getStateFromPath;
18
20
  const getActionFromStateHelper = options?.getActionFromState ?? getActionFromState;
19
21
  const buildHref = React.useCallback((name, params) => {
20
- const addStateToInnermostRoute = state => {
22
+ if (options?.enabled === false) {
23
+ return undefined;
24
+ }
25
+
26
+ // Check that we're inside:
27
+ // - navigator's context
28
+ // - route context of the navigator (could be a screen, tab, etc.)
29
+ // - route matches the state for path (from the screen's context)
30
+ // This ensures that we're inside a screen
31
+ const isScreen = navigation && route?.key && focusedRouteState ? route.key === findFocusedRoute(focusedRouteState)?.key && navigation.getState().routes.some(r => r.key === route.key) : false;
32
+ const stateForRoute = {
33
+ routes: [{
34
+ name,
35
+ params
36
+ }]
37
+ };
38
+ const constructState = state => {
21
39
  if (state) {
22
40
  const route = state.routes[0];
41
+
42
+ // If we're inside a screen and at the innermost route
43
+ // We need to replace the state with the provided one
44
+ // This assumes that we're navigating to a sibling route
45
+ if (isScreen && !route.state) {
46
+ return stateForRoute;
47
+ }
48
+
49
+ // Otherwise, dive into the nested state of the route
23
50
  return {
24
51
  routes: [{
25
52
  ...route,
26
- state: addStateToInnermostRoute(route.state)
53
+ state: constructState(route.state)
27
54
  }]
28
55
  };
29
56
  }
30
- return {
31
- routes: [{
32
- name,
33
- params
34
- }]
35
- };
57
+
58
+ // Once there is no more nested state, we're at the innermost route
59
+ // We can add a state based on provided parameters
60
+ // This assumes that we're navigating to a child of this route
61
+ // In this case, the helper is used in a navigator for its routes
62
+ return stateForRoute;
36
63
  };
37
- const state = addStateToInnermostRoute(focusedRouteState);
64
+ const state = constructState(focusedRouteState);
38
65
  const path = getPathFromStateHelper(state, options?.config);
39
66
  return path;
40
- }, [options?.config, getPathFromStateHelper, focusedRouteState]);
67
+ }, [options?.enabled, options?.config, route?.key, navigation, focusedRouteState, getPathFromStateHelper]);
41
68
  const buildAction = React.useCallback(href => {
42
69
  if (!href.startsWith('/')) {
43
70
  throw new Error(`The href must start with '/' (${href}).`);
@@ -1 +1 @@
1
- {"version":3,"names":["CommonActions","getActionFromState","getPathFromState","getStateFromPath","useStateForPath","React","LinkingContext","useLinkBuilder","options","useContext","focusedRouteState","getPathFromStateHelper","getStateFromPathHelper","getActionFromStateHelper","buildHref","useCallback","name","params","addStateToInnermostRoute","state","route","routes","path","config","buildAction","href","startsWith","Error","action","reset"],"sourceRoot":"../../src","sources":["useLinkBuilder.tsx"],"mappings":";;AAAA,SACEA,aAAa,EACbC,kBAAkB,EAClBC,gBAAgB,EAChBC,gBAAgB,EAChBC,eAAe,QACV,wBAAwB;AAC/B,OAAO,KAAKC,KAAK,MAAM,OAAO;AAE9B,SAASC,cAAc,QAAQ,qBAAkB;AAMjD;AACA;AACA;AACA;AACA;AACA,OAAO,SAASC,cAAcA,CAAA,EAAG;EAC/B,MAAM;IAAEC;EAAQ,CAAC,GAAGH,KAAK,CAACI,UAAU,CAACH,cAAc,CAAC;EAEpD,MAAMI,iBAAiB,GAAGN,eAAe,CAAC,CAAC;EAE3C,MAAMO,sBAAsB,GAAGH,OAAO,EAAEN,gBAAgB,IAAIA,gBAAgB;EAC5E,MAAMU,sBAAsB,GAAGJ,OAAO,EAAEL,gBAAgB,IAAIA,gBAAgB;EAC5E,MAAMU,wBAAwB,GAC5BL,OAAO,EAAEP,kBAAkB,IAAIA,kBAAkB;EAEnD,MAAMa,SAAS,GAAGT,KAAK,CAACU,WAAW,CACjC,CAACC,IAAY,EAAEC,MAAe,KAAK;IACjC,MAAMC,wBAAwB,GAC5BC,KAA+B,IACd;MACjB,IAAIA,KAAK,EAAE;QACT,MAAMC,KAAK,GAAGD,KAAK,CAACE,MAAM,CAAC,CAAC,CAAC;QAE7B,OAAO;UACLA,MAAM,EAAE,CACN;YACE,GAAGD,KAAK;YACRD,KAAK,EAAED,wBAAwB,CAACE,KAAK,CAACD,KAAK;UAC7C,CAAC;QAEL,CAAC;MACH;MAEA,OAAO;QACLE,MAAM,EAAE,CAAC;UAAEL,IAAI;UAAEC;QAAO,CAAC;MAC3B,CAAC;IACH,CAAC;IAED,MAAME,KAAK,GAAGD,wBAAwB,CAACR,iBAAiB,CAAC;IACzD,MAAMY,IAAI,GAAGX,sBAAsB,CAACQ,KAAK,EAAEX,OAAO,EAAEe,MAAM,CAAC;IAE3D,OAAOD,IAAI;EACb,CAAC,EACD,CAACd,OAAO,EAAEe,MAAM,EAAEZ,sBAAsB,EAAED,iBAAiB,CAC7D,CAAC;EAED,MAAMc,WAAW,GAAGnB,KAAK,CAACU,WAAW,CAClCU,IAAY,IAAK;IAChB,IAAI,CAACA,IAAI,CAACC,UAAU,CAAC,GAAG,CAAC,EAAE;MACzB,MAAM,IAAIC,KAAK,CAAC,iCAAiCF,IAAI,IAAI,CAAC;IAC5D;IAEA,MAAMN,KAAK,GAAGP,sBAAsB,CAACa,IAAI,EAAEjB,OAAO,EAAEe,MAAM,CAAC;IAE3D,IAAIJ,KAAK,EAAE;MACT,MAAMS,MAAM,GAAGf,wBAAwB,CAACM,KAAK,EAAEX,OAAO,EAAEe,MAAM,CAAC;MAE/D,OAAOK,MAAM,IAAI5B,aAAa,CAAC6B,KAAK,CAACV,KAAK,CAAC;IAC7C,CAAC,MAAM;MACL,MAAM,IAAIQ,KAAK,CAAC,iDAAiD,CAAC;IACpE;EACF,CAAC,EACD,CAACnB,OAAO,EAAEe,MAAM,EAAEX,sBAAsB,EAAEC,wBAAwB,CACpE,CAAC;EAED,OAAO;IACLC,SAAS;IACTU;EACF,CAAC;AACH","ignoreList":[]}
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":[]}
@@ -19,9 +19,12 @@ export function useRoutePath() {
19
19
  }
20
20
  const getPathFromStateHelper = options?.getPathFromState ?? getPathFromState;
21
21
  const path = React.useMemo(() => {
22
+ if (options?.enabled === false) {
23
+ return undefined;
24
+ }
22
25
  const path = getPathFromStateHelper(state, options?.config);
23
26
  return path;
24
- }, [state, options?.config, getPathFromStateHelper]);
27
+ }, [options?.enabled, options?.config, state, getPathFromStateHelper]);
25
28
  return path;
26
29
  }
27
30
  //# sourceMappingURL=useRoutePath.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["getPathFromState","useStateForPath","React","LinkingContext","useRoutePath","options","useContext","state","undefined","Error","getPathFromStateHelper","path","useMemo","config"],"sourceRoot":"../../src","sources":["useRoutePath.tsx"],"mappings":";;AAAA,SAASA,gBAAgB,EAAEC,eAAe,QAAQ,wBAAwB;AAC1E,OAAO,KAAKC,KAAK,MAAM,OAAO;AAE9B,SAASC,cAAc,QAAQ,qBAAkB;;AAEjD;AACA;AACA;AACA;AACA;AACA,OAAO,SAASC,YAAYA,CAAA,EAAG;EAC7B,MAAM;IAAEC;EAAQ,CAAC,GAAGH,KAAK,CAACI,UAAU,CAACH,cAAc,CAAC;EACpD,MAAMI,KAAK,GAAGN,eAAe,CAAC,CAAC;EAE/B,IAAIM,KAAK,KAAKC,SAAS,EAAE;IACvB,MAAM,IAAIC,KAAK,CACb,+FACF,CAAC;EACH;EAEA,MAAMC,sBAAsB,GAAGL,OAAO,EAAEL,gBAAgB,IAAIA,gBAAgB;EAE5E,MAAMW,IAAI,GAAGT,KAAK,CAACU,OAAO,CAAC,MAAM;IAC/B,MAAMD,IAAI,GAAGD,sBAAsB,CAACH,KAAK,EAAEF,OAAO,EAAEQ,MAAM,CAAC;IAE3D,OAAOF,IAAI;EACb,CAAC,EAAE,CAACJ,KAAK,EAAEF,OAAO,EAAEQ,MAAM,EAAEH,sBAAsB,CAAC,CAAC;EAEpD,OAAOC,IAAI;AACb","ignoreList":[]}
1
+ {"version":3,"names":["getPathFromState","useStateForPath","React","LinkingContext","useRoutePath","options","useContext","state","undefined","Error","getPathFromStateHelper","path","useMemo","enabled","config"],"sourceRoot":"../../src","sources":["useRoutePath.tsx"],"mappings":";;AAAA,SAASA,gBAAgB,EAAEC,eAAe,QAAQ,wBAAwB;AAC1E,OAAO,KAAKC,KAAK,MAAM,OAAO;AAE9B,SAASC,cAAc,QAAQ,qBAAkB;;AAEjD;AACA;AACA;AACA;AACA;AACA,OAAO,SAASC,YAAYA,CAAA,EAAG;EAC7B,MAAM;IAAEC;EAAQ,CAAC,GAAGH,KAAK,CAACI,UAAU,CAACH,cAAc,CAAC;EACpD,MAAMI,KAAK,GAAGN,eAAe,CAAC,CAAC;EAE/B,IAAIM,KAAK,KAAKC,SAAS,EAAE;IACvB,MAAM,IAAIC,KAAK,CACb,+FACF,CAAC;EACH;EAEA,MAAMC,sBAAsB,GAAGL,OAAO,EAAEL,gBAAgB,IAAIA,gBAAgB;EAE5E,MAAMW,IAAI,GAAGT,KAAK,CAACU,OAAO,CAAC,MAAM;IAC/B,IAAIP,OAAO,EAAEQ,OAAO,KAAK,KAAK,EAAE;MAC9B,OAAOL,SAAS;IAClB;IAEA,MAAMG,IAAI,GAAGD,sBAAsB,CAACH,KAAK,EAAEF,OAAO,EAAES,MAAM,CAAC;IAE3D,OAAOH,IAAI;EACb,CAAC,EAAE,CAACN,OAAO,EAAEQ,OAAO,EAAER,OAAO,EAAES,MAAM,EAAEP,KAAK,EAAEG,sBAAsB,CAAC,CAAC;EAEtE,OAAOC,IAAI;AACb","ignoreList":[]}
@@ -5,7 +5,7 @@ import { CommonActions } from '@react-navigation/core';
5
5
  * @returns `buildHref` to build an `href` for screen and `buildAction` to build an action from an `href`.
6
6
  */
7
7
  export declare function useLinkBuilder(): {
8
- buildHref: (name: string, params?: object) => string;
8
+ buildHref: (name: string, params?: object) => string | undefined;
9
9
  buildAction: (href: string) => {
10
10
  type: "NAVIGATE";
11
11
  payload: {
@@ -1 +1 @@
1
- {"version":3,"file":"useLinkBuilder.d.ts","sourceRoot":"","sources":["../../../../src/useLinkBuilder.tsx"],"names":[],"mappings":"AAAA,OAAO,EACL,aAAa,EAKd,MAAM,wBAAwB,CAAC;AAShC;;;;GAIG;AACH,wBAAgB,cAAc;sBAWnB,MAAM,WAAW,MAAM;wBA+BvB,MAAM;;;;;;;;;;;;;;;;EAsBhB"}
1
+ {"version":3,"file":"useLinkBuilder.d.ts","sourceRoot":"","sources":["../../../../src/useLinkBuilder.tsx"],"names":[],"mappings":"AAAA,OAAO,EACL,aAAa,EAQd,MAAM,wBAAwB,CAAC;AAShC;;;;GAIG;AACH,wBAAgB,cAAc;sBAcnB,MAAM,WAAW,MAAM;wBAmEvB,MAAM;;;;;;;;;;;;;;;;EAsBhB"}
@@ -3,5 +3,5 @@
3
3
  *
4
4
  * @returns Path for the current route.
5
5
  */
6
- export declare function useRoutePath(): string;
6
+ export declare function useRoutePath(): string | undefined;
7
7
  //# sourceMappingURL=useRoutePath.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"useRoutePath.d.ts","sourceRoot":"","sources":["../../../../src/useRoutePath.tsx"],"names":[],"mappings":"AAKA;;;;GAIG;AACH,wBAAgB,YAAY,WAmB3B"}
1
+ {"version":3,"file":"useRoutePath.d.ts","sourceRoot":"","sources":["../../../../src/useRoutePath.tsx"],"names":[],"mappings":"AAKA;;;;GAIG;AACH,wBAAgB,YAAY,uBAuB3B"}
@@ -5,7 +5,7 @@ import { CommonActions } from '@react-navigation/core';
5
5
  * @returns `buildHref` to build an `href` for screen and `buildAction` to build an action from an `href`.
6
6
  */
7
7
  export declare function useLinkBuilder(): {
8
- buildHref: (name: string, params?: object) => string;
8
+ buildHref: (name: string, params?: object) => string | undefined;
9
9
  buildAction: (href: string) => {
10
10
  type: "NAVIGATE";
11
11
  payload: {
@@ -1 +1 @@
1
- {"version":3,"file":"useLinkBuilder.d.ts","sourceRoot":"","sources":["../../../../src/useLinkBuilder.tsx"],"names":[],"mappings":"AAAA,OAAO,EACL,aAAa,EAKd,MAAM,wBAAwB,CAAC;AAShC;;;;GAIG;AACH,wBAAgB,cAAc;sBAWnB,MAAM,WAAW,MAAM;wBA+BvB,MAAM;;;;;;;;;;;;;;;;EAsBhB"}
1
+ {"version":3,"file":"useLinkBuilder.d.ts","sourceRoot":"","sources":["../../../../src/useLinkBuilder.tsx"],"names":[],"mappings":"AAAA,OAAO,EACL,aAAa,EAQd,MAAM,wBAAwB,CAAC;AAShC;;;;GAIG;AACH,wBAAgB,cAAc;sBAcnB,MAAM,WAAW,MAAM;wBAmEvB,MAAM;;;;;;;;;;;;;;;;EAsBhB"}
@@ -3,5 +3,5 @@
3
3
  *
4
4
  * @returns Path for the current route.
5
5
  */
6
- export declare function useRoutePath(): string;
6
+ export declare function useRoutePath(): string | undefined;
7
7
  //# sourceMappingURL=useRoutePath.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"useRoutePath.d.ts","sourceRoot":"","sources":["../../../../src/useRoutePath.tsx"],"names":[],"mappings":"AAKA;;;;GAIG;AACH,wBAAgB,YAAY,WAmB3B"}
1
+ {"version":3,"file":"useRoutePath.d.ts","sourceRoot":"","sources":["../../../../src/useRoutePath.tsx"],"names":[],"mappings":"AAKA;;;;GAIG;AACH,wBAAgB,YAAY,uBAuB3B"}
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": "7.1.1",
4
+ "version": "7.1.3",
5
5
  "keywords": [
6
6
  "react-native",
7
7
  "react-navigation",
@@ -48,7 +48,7 @@
48
48
  "clean": "del lib"
49
49
  },
50
50
  "dependencies": {
51
- "@react-navigation/core": "^7.8.0",
51
+ "@react-navigation/core": "^7.8.2",
52
52
  "escape-string-regexp": "^4.0.0",
53
53
  "fast-deep-equal": "^3.1.3",
54
54
  "nanoid": "3.3.8",
@@ -63,7 +63,7 @@
63
63
  "react": "18.3.1",
64
64
  "react-dom": "18.3.1",
65
65
  "react-native": "0.76.2",
66
- "react-native-builder-bob": "^0.39.0",
66
+ "react-native-builder-bob": "^0.39.1",
67
67
  "typescript": "^5.5.2"
68
68
  },
69
69
  "peerDependencies": {
@@ -95,5 +95,5 @@
95
95
  ]
96
96
  ]
97
97
  },
98
- "gitHead": "01f42770305a70c6ff43d6baa75136d47d988fdc"
98
+ "gitHead": "1ee608f918e50195907c6bd74c193be7d0a2a8c8"
99
99
  }
@@ -1,8 +1,11 @@
1
1
  import {
2
2
  CommonActions,
3
+ findFocusedRoute,
3
4
  getActionFromState,
4
5
  getPathFromState,
5
6
  getStateFromPath,
7
+ NavigationHelpersContext,
8
+ NavigationRouteContext,
6
9
  useStateForPath,
7
10
  } from '@react-navigation/core';
8
11
  import * as React from 'react';
@@ -19,6 +22,9 @@ type MinimalState = {
19
22
  * @returns `buildHref` to build an `href` for screen and `buildAction` to build an action from an `href`.
20
23
  */
21
24
  export function useLinkBuilder() {
25
+ const navigation = React.useContext(NavigationHelpersContext);
26
+ const route = React.useContext(NavigationRouteContext);
27
+
22
28
  const { options } = React.useContext(LinkingContext);
23
29
 
24
30
  const focusedRouteState = useStateForPath();
@@ -30,33 +36,69 @@ export function useLinkBuilder() {
30
36
 
31
37
  const buildHref = React.useCallback(
32
38
  (name: string, params?: object) => {
33
- const addStateToInnermostRoute = (
39
+ if (options?.enabled === false) {
40
+ return undefined;
41
+ }
42
+
43
+ // Check that we're inside:
44
+ // - navigator's context
45
+ // - route context of the navigator (could be a screen, tab, etc.)
46
+ // - route matches the state for path (from the screen's context)
47
+ // This ensures that we're inside a screen
48
+ const isScreen =
49
+ navigation && route?.key && focusedRouteState
50
+ ? route.key === findFocusedRoute(focusedRouteState)?.key &&
51
+ navigation.getState().routes.some((r) => r.key === route.key)
52
+ : false;
53
+
54
+ const stateForRoute: MinimalState = {
55
+ routes: [{ name, params }],
56
+ };
57
+
58
+ const constructState = (
34
59
  state: MinimalState | undefined
35
60
  ): MinimalState => {
36
61
  if (state) {
37
62
  const route = state.routes[0];
38
63
 
64
+ // If we're inside a screen and at the innermost route
65
+ // We need to replace the state with the provided one
66
+ // This assumes that we're navigating to a sibling route
67
+ if (isScreen && !route.state) {
68
+ return stateForRoute;
69
+ }
70
+
71
+ // Otherwise, dive into the nested state of the route
39
72
  return {
40
73
  routes: [
41
74
  {
42
75
  ...route,
43
- state: addStateToInnermostRoute(route.state),
76
+ state: constructState(route.state),
44
77
  },
45
78
  ],
46
79
  };
47
80
  }
48
81
 
49
- return {
50
- routes: [{ name, params }],
51
- };
82
+ // Once there is no more nested state, we're at the innermost route
83
+ // We can add a state based on provided parameters
84
+ // This assumes that we're navigating to a child of this route
85
+ // In this case, the helper is used in a navigator for its routes
86
+ return stateForRoute;
52
87
  };
53
88
 
54
- const state = addStateToInnermostRoute(focusedRouteState);
89
+ const state = constructState(focusedRouteState);
55
90
  const path = getPathFromStateHelper(state, options?.config);
56
91
 
57
92
  return path;
58
93
  },
59
- [options?.config, getPathFromStateHelper, focusedRouteState]
94
+ [
95
+ options?.enabled,
96
+ options?.config,
97
+ route?.key,
98
+ navigation,
99
+ focusedRouteState,
100
+ getPathFromStateHelper,
101
+ ]
60
102
  );
61
103
 
62
104
  const buildAction = React.useCallback(
@@ -21,10 +21,14 @@ export function useRoutePath() {
21
21
  const getPathFromStateHelper = options?.getPathFromState ?? getPathFromState;
22
22
 
23
23
  const path = React.useMemo(() => {
24
+ if (options?.enabled === false) {
25
+ return undefined;
26
+ }
27
+
24
28
  const path = getPathFromStateHelper(state, options?.config);
25
29
 
26
30
  return path;
27
- }, [state, options?.config, getPathFromStateHelper]);
31
+ }, [options?.enabled, options?.config, state, getPathFromStateHelper]);
28
32
 
29
33
  return path;
30
34
  }