@react-navigation/native 7.1.0 → 7.1.2

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,48 @@ 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 => {
27
- const route = state?.routes[0];
28
- if (route?.state) {
28
+ if (options?.enabled === false) {
29
+ return undefined;
30
+ }
31
+
32
+ // If the parent route is one of the routes in the state, we're in a screen
33
+ const isScreen = navigation && route?.key ? navigation.getState().routes.some(r => r.key === route.key) : false;
34
+ const stateForRoute = {
35
+ routes: [{
36
+ name,
37
+ params
38
+ }]
39
+ };
40
+ const constructState = state => {
41
+ if (state) {
42
+ const route = state.routes[0];
43
+
44
+ // If we're inside a screen and at the innermost route
45
+ // We need to replace the state with the provided one
46
+ // This assumes that we're navigating to a sibling route
47
+ if (isScreen && !route.state) {
48
+ return stateForRoute;
49
+ }
50
+
51
+ // Otherwise, dive into the nested state of the route
29
52
  return {
30
53
  routes: [{
31
54
  ...route,
32
- state: addStateToInnermostRoute(route.state)
55
+ state: constructState(route.state)
33
56
  }]
34
57
  };
35
58
  }
36
- return {
37
- routes: [{
38
- name,
39
- params
40
- }]
41
- };
59
+
60
+ // Once there is no more nested state, we're at the innermost route
61
+ // We can add a state based on provided parameters
62
+ // This assumes that we're navigating to a child of this route
63
+ // In this case, the helper is used in a navigator for its routes
64
+ return stateForRoute;
42
65
  };
43
- const state = addStateToInnermostRoute(focusedRouteState);
66
+ const state = constructState(focusedRouteState);
44
67
  const path = getPathFromStateHelper(state, options?.config);
45
68
  return path;
46
- }, [options?.config, getPathFromStateHelper, focusedRouteState]);
69
+ }, [options?.enabled, options?.config, route?.key, navigation, focusedRouteState, getPathFromStateHelper]);
47
70
  const buildAction = React.useCallback(href => {
48
71
  if (!href.startsWith('/')) {
49
72
  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","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, 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,48 @@ 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 => {
21
- const route = state?.routes[0];
22
- if (route?.state) {
22
+ if (options?.enabled === false) {
23
+ return undefined;
24
+ }
25
+
26
+ // If the parent route is one of the routes in the state, we're in a screen
27
+ const isScreen = navigation && route?.key ? navigation.getState().routes.some(r => r.key === route.key) : false;
28
+ const stateForRoute = {
29
+ routes: [{
30
+ name,
31
+ params
32
+ }]
33
+ };
34
+ const constructState = state => {
35
+ if (state) {
36
+ const route = state.routes[0];
37
+
38
+ // If we're inside a screen and at the innermost route
39
+ // We need to replace the state with the provided one
40
+ // This assumes that we're navigating to a sibling route
41
+ if (isScreen && !route.state) {
42
+ return stateForRoute;
43
+ }
44
+
45
+ // Otherwise, dive into the nested state of the route
23
46
  return {
24
47
  routes: [{
25
48
  ...route,
26
- state: addStateToInnermostRoute(route.state)
49
+ state: constructState(route.state)
27
50
  }]
28
51
  };
29
52
  }
30
- return {
31
- routes: [{
32
- name,
33
- params
34
- }]
35
- };
53
+
54
+ // Once there is no more nested state, we're at the innermost route
55
+ // We can add a state based on provided parameters
56
+ // This assumes that we're navigating to a child of this route
57
+ // In this case, the helper is used in a navigator for its routes
58
+ return stateForRoute;
36
59
  };
37
- const state = addStateToInnermostRoute(focusedRouteState);
60
+ const state = constructState(focusedRouteState);
38
61
  const path = getPathFromStateHelper(state, options?.config);
39
62
  return path;
40
- }, [options?.config, getPathFromStateHelper, focusedRouteState]);
63
+ }, [options?.enabled, options?.config, route?.key, navigation, focusedRouteState, getPathFromStateHelper]);
41
64
  const buildAction = React.useCallback(href => {
42
65
  if (!href.startsWith('/')) {
43
66
  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,MAAMC,KAAK,GAAGD,KAAK,EAAEE,MAAM,CAAC,CAAC,CAAC;MAE9B,IAAID,KAAK,EAAED,KAAK,EAAE;QAChB,OAAO;UACLE,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","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":";;AAAA,SACEA,aAAa,EACbC,kBAAkB,EAClBC,gBAAgB,EAChBC,gBAAgB,EAChBC,wBAAwB,EACxBC,sBAAsB,EACtBC,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,MAAMC,UAAU,GAAGH,KAAK,CAACI,UAAU,CAACP,wBAAwB,CAAC;EAC7D,MAAMQ,KAAK,GAAGL,KAAK,CAACI,UAAU,CAACN,sBAAsB,CAAC;EAEtD,MAAM;IAAEQ;EAAQ,CAAC,GAAGN,KAAK,CAACI,UAAU,CAACH,cAAc,CAAC;EAEpD,MAAMM,iBAAiB,GAAGR,eAAe,CAAC,CAAC;EAE3C,MAAMS,sBAAsB,GAAGF,OAAO,EAAEX,gBAAgB,IAAIA,gBAAgB;EAC5E,MAAMc,sBAAsB,GAAGH,OAAO,EAAEV,gBAAgB,IAAIA,gBAAgB;EAC5E,MAAMc,wBAAwB,GAC5BJ,OAAO,EAAEZ,kBAAkB,IAAIA,kBAAkB;EAEnD,MAAMiB,SAAS,GAAGX,KAAK,CAACY,WAAW,CACjC,CAACC,IAAY,EAAEC,MAAe,KAAK;IACjC,IAAIR,OAAO,EAAES,OAAO,KAAK,KAAK,EAAE;MAC9B,OAAOC,SAAS;IAClB;;IAEA;IACA,MAAMC,QAAQ,GACZd,UAAU,IAAIE,KAAK,EAAEa,GAAG,GACpBf,UAAU,CAACgB,QAAQ,CAAC,CAAC,CAACC,MAAM,CAACC,IAAI,CAAEC,CAAC,IAAKA,CAAC,CAACJ,GAAG,KAAKb,KAAK,CAACa,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,MAAMpB,KAAK,GAAGoB,KAAK,CAACL,MAAM,CAAC,CAAC,CAAC;;QAE7B;QACA;QACA;QACA,IAAIH,QAAQ,IAAI,CAACZ,KAAK,CAACoB,KAAK,EAAE;UAC5B,OAAOF,aAAa;QACtB;;QAEA;QACA,OAAO;UACLH,MAAM,EAAE,CACN;YACE,GAAGf,KAAK;YACRoB,KAAK,EAAED,cAAc,CAACnB,KAAK,CAACoB,KAAK;UACnC,CAAC;QAEL,CAAC;MACH;;MAEA;MACA;MACA;MACA;MACA,OAAOF,aAAa;IACtB,CAAC;IAED,MAAME,KAAK,GAAGD,cAAc,CAACjB,iBAAiB,CAAC;IAC/C,MAAMmB,IAAI,GAAGlB,sBAAsB,CAACiB,KAAK,EAAEnB,OAAO,EAAEqB,MAAM,CAAC;IAE3D,OAAOD,IAAI;EACb,CAAC,EACD,CACEpB,OAAO,EAAES,OAAO,EAChBT,OAAO,EAAEqB,MAAM,EACftB,KAAK,EAAEa,GAAG,EACVf,UAAU,EACVI,iBAAiB,EACjBC,sBAAsB,CAE1B,CAAC;EAED,MAAMoB,WAAW,GAAG5B,KAAK,CAACY,WAAW,CAClCiB,IAAY,IAAK;IAChB,IAAI,CAACA,IAAI,CAACC,UAAU,CAAC,GAAG,CAAC,EAAE;MACzB,MAAM,IAAIC,KAAK,CAAC,iCAAiCF,IAAI,IAAI,CAAC;IAC5D;IAEA,MAAMJ,KAAK,GAAGhB,sBAAsB,CAACoB,IAAI,EAAEvB,OAAO,EAAEqB,MAAM,CAAC;IAE3D,IAAIF,KAAK,EAAE;MACT,MAAMO,MAAM,GAAGtB,wBAAwB,CAACe,KAAK,EAAEnB,OAAO,EAAEqB,MAAM,CAAC;MAE/D,OAAOK,MAAM,IAAIvC,aAAa,CAACwC,KAAK,CAACR,KAAK,CAAC;IAC7C,CAAC,MAAM;MACL,MAAM,IAAIM,KAAK,CAAC,iDAAiD,CAAC;IACpE;EACF,CAAC,EACD,CAACzB,OAAO,EAAEqB,MAAM,EAAElB,sBAAsB,EAAEC,wBAAwB,CACpE,CAAC;EAED,OAAO;IACLC,SAAS;IACTiB;EACF,CAAC;AACH","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,EAOd,MAAM,wBAAwB,CAAC;AAShC;;;;GAIG;AACH,wBAAgB,cAAc;sBAcnB,MAAM,WAAW,MAAM;wBA8DvB,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,EAOd,MAAM,wBAAwB,CAAC;AAShC;;;;GAIG;AACH,wBAAgB,cAAc;sBAcnB,MAAM,WAAW,MAAM;wBA8DvB,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.0",
4
+ "version": "7.1.2",
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.1",
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": "2a3ce56d2366f2699af31daeb50307dd97ec950d"
98
+ "gitHead": "e981515a8377564473459f585e972182cf514d7b"
99
99
  }
@@ -3,6 +3,8 @@ import {
3
3
  getActionFromState,
4
4
  getPathFromState,
5
5
  getStateFromPath,
6
+ NavigationHelpersContext,
7
+ NavigationRouteContext,
6
8
  useStateForPath,
7
9
  } from '@react-navigation/core';
8
10
  import * as React from 'react';
@@ -19,6 +21,9 @@ type MinimalState = {
19
21
  * @returns `buildHref` to build an `href` for screen and `buildAction` to build an action from an `href`.
20
22
  */
21
23
  export function useLinkBuilder() {
24
+ const navigation = React.useContext(NavigationHelpersContext);
25
+ const route = React.useContext(NavigationRouteContext);
26
+
22
27
  const { options } = React.useContext(LinkingContext);
23
28
 
24
29
  const focusedRouteState = useStateForPath();
@@ -30,33 +35,64 @@ export function useLinkBuilder() {
30
35
 
31
36
  const buildHref = React.useCallback(
32
37
  (name: string, params?: object) => {
33
- const addStateToInnermostRoute = (
38
+ if (options?.enabled === false) {
39
+ return undefined;
40
+ }
41
+
42
+ // If the parent route is one of the routes in the state, we're in a screen
43
+ const isScreen =
44
+ navigation && route?.key
45
+ ? navigation.getState().routes.some((r) => r.key === route.key)
46
+ : false;
47
+
48
+ const stateForRoute: MinimalState = {
49
+ routes: [{ name, params }],
50
+ };
51
+
52
+ const constructState = (
34
53
  state: MinimalState | undefined
35
54
  ): MinimalState => {
36
- const route = state?.routes[0];
55
+ if (state) {
56
+ const route = state.routes[0];
57
+
58
+ // If we're inside a screen and at the innermost route
59
+ // We need to replace the state with the provided one
60
+ // This assumes that we're navigating to a sibling route
61
+ if (isScreen && !route.state) {
62
+ return stateForRoute;
63
+ }
37
64
 
38
- if (route?.state) {
65
+ // Otherwise, dive into the nested state of the route
39
66
  return {
40
67
  routes: [
41
68
  {
42
69
  ...route,
43
- state: addStateToInnermostRoute(route.state),
70
+ state: constructState(route.state),
44
71
  },
45
72
  ],
46
73
  };
47
74
  }
48
75
 
49
- return {
50
- routes: [{ name, params }],
51
- };
76
+ // Once there is no more nested state, we're at the innermost route
77
+ // We can add a state based on provided parameters
78
+ // This assumes that we're navigating to a child of this route
79
+ // In this case, the helper is used in a navigator for its routes
80
+ return stateForRoute;
52
81
  };
53
82
 
54
- const state = addStateToInnermostRoute(focusedRouteState);
83
+ const state = constructState(focusedRouteState);
55
84
  const path = getPathFromStateHelper(state, options?.config);
56
85
 
57
86
  return path;
58
87
  },
59
- [options?.config, getPathFromStateHelper, focusedRouteState]
88
+ [
89
+ options?.enabled,
90
+ options?.config,
91
+ route?.key,
92
+ navigation,
93
+ focusedRouteState,
94
+ getPathFromStateHelper,
95
+ ]
60
96
  );
61
97
 
62
98
  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
  }