@react-navigation/native 6.1.4 → 7.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.
- package/lib/commonjs/Link.js +16 -5
- package/lib/commonjs/Link.js.map +1 -1
- package/lib/commonjs/NavigationContainer.js +3 -14
- package/lib/commonjs/NavigationContainer.js.map +1 -1
- package/lib/commonjs/createStaticNavigation.js +39 -0
- package/lib/commonjs/createStaticNavigation.js.map +1 -0
- package/lib/commonjs/index.js +8 -8
- package/lib/commonjs/index.js.map +1 -1
- package/lib/commonjs/useLinkProps.js +17 -15
- package/lib/commonjs/useLinkProps.js.map +1 -1
- package/lib/commonjs/{useLinkBuilder.js → useLinkTools.js} +23 -5
- package/lib/commonjs/useLinkTools.js.map +1 -0
- package/lib/commonjs/useLinking.js +2 -4
- package/lib/commonjs/useLinking.js.map +1 -1
- package/lib/commonjs/useLinking.native.js +3 -4
- package/lib/commonjs/useLinking.native.js.map +1 -1
- package/lib/module/Link.js +16 -5
- package/lib/module/Link.js.map +1 -1
- package/lib/module/NavigationContainer.js +3 -14
- package/lib/module/NavigationContainer.js.map +1 -1
- package/lib/module/createStaticNavigation.js +30 -0
- package/lib/module/createStaticNavigation.js.map +1 -0
- package/lib/module/index.js +2 -2
- package/lib/module/index.js.map +1 -1
- package/lib/module/useLinkProps.js +17 -15
- package/lib/module/useLinkProps.js.map +1 -1
- package/lib/module/{useLinkBuilder.js → useLinkTools.js} +23 -5
- package/lib/module/useLinkTools.js.map +1 -0
- package/lib/module/useLinking.js +3 -5
- package/lib/module/useLinking.js.map +1 -1
- package/lib/module/useLinking.native.js +4 -5
- package/lib/module/useLinking.native.js.map +1 -1
- package/lib/typescript/src/Link.d.ts +8 -9
- package/lib/typescript/src/Link.d.ts.map +1 -1
- package/lib/typescript/src/NavigationContainer.d.ts +1 -3
- package/lib/typescript/src/NavigationContainer.d.ts.map +1 -1
- package/lib/typescript/src/ServerContext.d.ts +1 -1
- package/lib/typescript/src/ServerContext.d.ts.map +1 -1
- package/lib/typescript/src/__mocks__/createStackNavigator.d.ts +57 -0
- package/lib/typescript/src/__mocks__/createStackNavigator.d.ts.map +1 -0
- package/lib/typescript/src/createMemoryHistory.d.ts +1 -1
- package/lib/typescript/src/createMemoryHistory.d.ts.map +1 -1
- package/lib/typescript/src/createStaticNavigation.d.ts +20 -0
- package/lib/typescript/src/createStaticNavigation.d.ts.map +1 -0
- package/lib/typescript/src/index.d.ts +2 -2
- package/lib/typescript/src/index.d.ts.map +1 -1
- package/lib/typescript/src/theming/ThemeProvider.d.ts +1 -1
- package/lib/typescript/src/theming/ThemeProvider.d.ts.map +1 -1
- package/lib/typescript/src/types.d.ts +4 -4
- package/lib/typescript/src/types.d.ts.map +1 -1
- package/lib/typescript/src/useLinkProps.d.ts +17 -7
- package/lib/typescript/src/useLinkProps.d.ts.map +1 -1
- package/lib/typescript/src/useLinkTools.d.ts +33 -0
- package/lib/typescript/src/useLinkTools.d.ts.map +1 -0
- package/lib/typescript/src/useLinking.d.ts +2 -4
- package/lib/typescript/src/useLinking.d.ts.map +1 -1
- package/lib/typescript/src/useLinking.native.d.ts +2 -4
- package/lib/typescript/src/useLinking.native.d.ts.map +1 -1
- package/lib/typescript/src/useScrollToTop.d.ts +3 -3
- package/lib/typescript/src/useScrollToTop.d.ts.map +1 -1
- package/package.json +11 -11
- package/src/Link.tsx +25 -15
- package/src/NavigationContainer.tsx +4 -17
- package/src/__mocks__/createStackNavigator.tsx +21 -0
- package/src/createStaticNavigation.tsx +49 -0
- package/src/index.tsx +2 -2
- package/src/useLinkProps.tsx +43 -30
- package/src/{useLinkBuilder.tsx → useLinkTools.tsx} +32 -3
- package/src/useLinking.native.tsx +6 -6
- package/src/useLinking.tsx +5 -6
- package/lib/commonjs/useLinkBuilder.js.map +0 -1
- package/lib/commonjs/useLinkTo.js +0 -45
- package/lib/commonjs/useLinkTo.js.map +0 -1
- package/lib/module/useLinkBuilder.js.map +0 -1
- package/lib/module/useLinkTo.js +0 -36
- package/lib/module/useLinkTo.js.map +0 -1
- package/lib/typescript/src/useLinkBuilder.d.ts +0 -6
- package/lib/typescript/src/useLinkBuilder.d.ts.map +0 -1
- package/lib/typescript/src/useLinkTo.d.ts +0 -9
- package/lib/typescript/src/useLinkTo.d.ts.map +0 -1
- package/src/useLinkTo.tsx +0 -71
|
@@ -3,6 +3,7 @@ import {
|
|
|
3
3
|
getStateFromPath as getStateFromPathDefault,
|
|
4
4
|
NavigationContainerRef,
|
|
5
5
|
ParamListBase,
|
|
6
|
+
useNavigationIndependentTree,
|
|
6
7
|
} from '@react-navigation/core';
|
|
7
8
|
import * as React from 'react';
|
|
8
9
|
import { Linking, Platform } from 'react-native';
|
|
@@ -12,16 +13,13 @@ import type { LinkingOptions } from './types';
|
|
|
12
13
|
|
|
13
14
|
type ResultState = ReturnType<typeof getStateFromPathDefault>;
|
|
14
15
|
|
|
15
|
-
type Options = LinkingOptions<ParamListBase
|
|
16
|
-
independent?: boolean;
|
|
17
|
-
};
|
|
16
|
+
type Options = LinkingOptions<ParamListBase>;
|
|
18
17
|
|
|
19
18
|
let linkingHandlers: Symbol[] = [];
|
|
20
19
|
|
|
21
20
|
export default function useLinking(
|
|
22
21
|
ref: React.RefObject<NavigationContainerRef<ParamListBase>>,
|
|
23
22
|
{
|
|
24
|
-
independent,
|
|
25
23
|
enabled = true,
|
|
26
24
|
prefixes,
|
|
27
25
|
filter,
|
|
@@ -43,6 +41,7 @@ export default function useLinking(
|
|
|
43
41
|
| undefined;
|
|
44
42
|
|
|
45
43
|
// Storing this in a local variable stops Jest from complaining about import after teardown
|
|
44
|
+
// @ts-expect-error: removeEventListener is not present in newer RN versions
|
|
46
45
|
const removeEventListener = Linking.removeEventListener?.bind(Linking);
|
|
47
46
|
|
|
48
47
|
return () => {
|
|
@@ -58,6 +57,8 @@ export default function useLinking(
|
|
|
58
57
|
getActionFromState = getActionFromStateDefault,
|
|
59
58
|
}: Options
|
|
60
59
|
) {
|
|
60
|
+
const independent = useNavigationIndependentTree();
|
|
61
|
+
|
|
61
62
|
React.useEffect(() => {
|
|
62
63
|
if (process.env.NODE_ENV === 'production') {
|
|
63
64
|
return undefined;
|
|
@@ -194,8 +195,7 @@ export default function useLinking(
|
|
|
194
195
|
console.warn(
|
|
195
196
|
`An error occurred when trying to handle the link '${url}': ${
|
|
196
197
|
typeof e === 'object' && e != null && 'message' in e
|
|
197
|
-
?
|
|
198
|
-
e.message
|
|
198
|
+
? e.message
|
|
199
199
|
: e
|
|
200
200
|
}`
|
|
201
201
|
);
|
package/src/useLinking.tsx
CHANGED
|
@@ -6,6 +6,7 @@ import {
|
|
|
6
6
|
NavigationContainerRef,
|
|
7
7
|
NavigationState,
|
|
8
8
|
ParamListBase,
|
|
9
|
+
useNavigationIndependentTree,
|
|
9
10
|
} from '@react-navigation/core';
|
|
10
11
|
import isEqual from 'fast-deep-equal';
|
|
11
12
|
import * as React from 'react';
|
|
@@ -93,14 +94,11 @@ const series = (cb: () => Promise<void>) => {
|
|
|
93
94
|
|
|
94
95
|
let linkingHandlers: Symbol[] = [];
|
|
95
96
|
|
|
96
|
-
type Options = LinkingOptions<ParamListBase
|
|
97
|
-
independent?: boolean;
|
|
98
|
-
};
|
|
97
|
+
type Options = LinkingOptions<ParamListBase>;
|
|
99
98
|
|
|
100
99
|
export default function useLinking(
|
|
101
100
|
ref: React.RefObject<NavigationContainerRef<ParamListBase>>,
|
|
102
101
|
{
|
|
103
|
-
independent,
|
|
104
102
|
enabled = true,
|
|
105
103
|
config,
|
|
106
104
|
getStateFromPath = getStateFromPathDefault,
|
|
@@ -108,6 +106,8 @@ export default function useLinking(
|
|
|
108
106
|
getActionFromState = getActionFromStateDefault,
|
|
109
107
|
}: Options
|
|
110
108
|
) {
|
|
109
|
+
const independent = useNavigationIndependentTree();
|
|
110
|
+
|
|
111
111
|
React.useEffect(() => {
|
|
112
112
|
if (process.env.NODE_ENV === 'production') {
|
|
113
113
|
return undefined;
|
|
@@ -256,8 +256,7 @@ export default function useLinking(
|
|
|
256
256
|
console.warn(
|
|
257
257
|
`An error occurred when trying to handle the link '${path}': ${
|
|
258
258
|
typeof e === 'object' && e != null && 'message' in e
|
|
259
|
-
?
|
|
260
|
-
e.message
|
|
259
|
+
? e.message
|
|
261
260
|
: e
|
|
262
261
|
}`
|
|
263
262
|
);
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"names":["getRootStateForNavigate","navigation","state","parent","getParent","parentState","getState","index","routes","useLinkBuilder","React","useContext","NavigationHelpersContext","linking","LinkingContext","buildLink","useCallback","name","params","options","enabled","undefined","path","getPathFromState","config"],"sourceRoot":"../../src","sources":["useLinkBuilder.tsx"],"mappings":";;;;;;AAAA;AAOA;AAEA;AAA8C;AAAA;AAAA;AAW9C,MAAMA,uBAAuB,GAAG,CAC9BC,UAA4B,EAC5BC,KAAmB,KACF;EACjB,MAAMC,MAAM,GAAGF,UAAU,CAACG,SAAS,EAAE;EAErC,IAAID,MAAM,EAAE;IACV,MAAME,WAAW,GAAGF,MAAM,CAACG,QAAQ,EAAE;IAErC,OAAON,uBAAuB,CAACG,MAAM,EAAE;MACrCI,KAAK,EAAE,CAAC;MACRC,MAAM,EAAE,CACN;QACE,GAAGH,WAAW,CAACG,MAAM,CAACH,WAAW,CAACE,KAAK,CAAC;QACxCL,KAAK,EAAEA;MACT,CAAC;IAEL,CAAC,CAAC;EACJ;EAEA,OAAOA,KAAK;AACd,CAAC;;AAED;AACA;AACA;AACA;AACe,SAASO,cAAc,GAAG;EACvC,MAAMR,UAAU,GAAGS,KAAK,CAACC,UAAU,CAACC,8BAAwB,CAAC;EAC7D,MAAMC,OAAO,GAAGH,KAAK,CAACC,UAAU,CAACG,uBAAc,CAAC;EAEhD,MAAMC,SAAS,GAAGL,KAAK,CAACM,WAAW,CACjC,CAACC,IAAY,EAAEC,MAAe,KAAK;IACjC,MAAM;MAAEC;IAAQ,CAAC,GAAGN,OAAO;IAE3B,IAAI,CAAAM,OAAO,aAAPA,OAAO,uBAAPA,OAAO,CAAEC,OAAO,MAAK,KAAK,EAAE;MAC9B,OAAOC,SAAS;IAClB;IAEA,MAAMnB,KAAK,GAAGD,UAAU,GACpBD,uBAAuB,CAACC,UAAU,EAAE;MAClCM,KAAK,EAAE,CAAC;MACRC,MAAM,EAAE,CAAC;QAAES,IAAI;QAAEC;MAAO,CAAC;IAC3B,CAAC,CAAC;IACF;IACA;IACA;MACEX,KAAK,EAAE,CAAC;MACRC,MAAM,EAAE,CAAC;QAAES,IAAI;QAAEC;MAAO,CAAC;IAC3B,CAAC;IAEL,MAAMI,IAAI,GAAGH,OAAO,aAAPA,OAAO,eAAPA,OAAO,CAAEI,gBAAgB,GAClCJ,OAAO,CAACI,gBAAgB,CAACrB,KAAK,EAAEiB,OAAO,aAAPA,OAAO,uBAAPA,OAAO,CAAEK,MAAM,CAAC,GAChD,IAAAD,sBAAgB,EAACrB,KAAK,EAAEiB,OAAO,aAAPA,OAAO,uBAAPA,OAAO,CAAEK,MAAM,CAAC;IAE5C,OAAOF,IAAI;EACb,CAAC,EACD,CAACT,OAAO,EAAEZ,UAAU,CAAC,CACtB;EAED,OAAOc,SAAS;AAClB"}
|
|
@@ -1,45 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
|
|
3
|
-
Object.defineProperty(exports, "__esModule", {
|
|
4
|
-
value: true
|
|
5
|
-
});
|
|
6
|
-
exports.default = useLinkTo;
|
|
7
|
-
var _core = require("@react-navigation/core");
|
|
8
|
-
var React = _interopRequireWildcard(require("react"));
|
|
9
|
-
var _LinkingContext = _interopRequireDefault(require("./LinkingContext"));
|
|
10
|
-
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
11
|
-
function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function (nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
|
|
12
|
-
function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
|
|
13
|
-
function useLinkTo() {
|
|
14
|
-
const navigation = React.useContext(_core.NavigationContainerRefContext);
|
|
15
|
-
const linking = React.useContext(_LinkingContext.default);
|
|
16
|
-
const linkTo = React.useCallback(to => {
|
|
17
|
-
if (navigation === undefined) {
|
|
18
|
-
throw new Error("Couldn't find a navigation object. Is your component inside NavigationContainer?");
|
|
19
|
-
}
|
|
20
|
-
if (typeof to !== 'string') {
|
|
21
|
-
// @ts-expect-error: This is fine
|
|
22
|
-
navigation.navigate(to.screen, to.params);
|
|
23
|
-
return;
|
|
24
|
-
}
|
|
25
|
-
if (!to.startsWith('/')) {
|
|
26
|
-
throw new Error(`The path must start with '/' (${to}).`);
|
|
27
|
-
}
|
|
28
|
-
const {
|
|
29
|
-
options
|
|
30
|
-
} = linking;
|
|
31
|
-
const state = options !== null && options !== void 0 && options.getStateFromPath ? options.getStateFromPath(to, options.config) : (0, _core.getStateFromPath)(to, options === null || options === void 0 ? void 0 : options.config);
|
|
32
|
-
if (state) {
|
|
33
|
-
const action = (0, _core.getActionFromState)(state, options === null || options === void 0 ? void 0 : options.config);
|
|
34
|
-
if (action !== undefined) {
|
|
35
|
-
navigation.dispatch(action);
|
|
36
|
-
} else {
|
|
37
|
-
navigation.reset(state);
|
|
38
|
-
}
|
|
39
|
-
} else {
|
|
40
|
-
throw new Error('Failed to parse the path to a navigation state.');
|
|
41
|
-
}
|
|
42
|
-
}, [linking, navigation]);
|
|
43
|
-
return linkTo;
|
|
44
|
-
}
|
|
45
|
-
//# sourceMappingURL=useLinkTo.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"names":["useLinkTo","navigation","React","useContext","NavigationContainerRefContext","linking","LinkingContext","linkTo","useCallback","to","undefined","Error","navigate","screen","params","startsWith","options","state","getStateFromPath","config","action","getActionFromState","dispatch","reset"],"sourceRoot":"../../src","sources":["useLinkTo.tsx"],"mappings":";;;;;;AAAA;AAKA;AAEA;AAA8C;AAAA;AAAA;AAiB/B,SAASA,SAAS,GAE7B;EACF,MAAMC,UAAU,GAAGC,KAAK,CAACC,UAAU,CAACC,mCAA6B,CAAC;EAClE,MAAMC,OAAO,GAAGH,KAAK,CAACC,UAAU,CAACG,uBAAc,CAAC;EAEhD,MAAMC,MAAM,GAAGL,KAAK,CAACM,WAAW,CAC7BC,EAAiB,IAAK;IACrB,IAAIR,UAAU,KAAKS,SAAS,EAAE;MAC5B,MAAM,IAAIC,KAAK,CACb,kFAAkF,CACnF;IACH;IAEA,IAAI,OAAOF,EAAE,KAAK,QAAQ,EAAE;MAC1B;MACAR,UAAU,CAACW,QAAQ,CAACH,EAAE,CAACI,MAAM,EAAEJ,EAAE,CAACK,MAAM,CAAC;MACzC;IACF;IAEA,IAAI,CAACL,EAAE,CAACM,UAAU,CAAC,GAAG,CAAC,EAAE;MACvB,MAAM,IAAIJ,KAAK,CAAE,iCAAgCF,EAAG,IAAG,CAAC;IAC1D;IAEA,MAAM;MAAEO;IAAQ,CAAC,GAAGX,OAAO;IAE3B,MAAMY,KAAK,GAAGD,OAAO,aAAPA,OAAO,eAAPA,OAAO,CAAEE,gBAAgB,GACnCF,OAAO,CAACE,gBAAgB,CAACT,EAAE,EAAEO,OAAO,CAACG,MAAM,CAAC,GAC5C,IAAAD,sBAAgB,EAACT,EAAE,EAAEO,OAAO,aAAPA,OAAO,uBAAPA,OAAO,CAAEG,MAAM,CAAC;IAEzC,IAAIF,KAAK,EAAE;MACT,MAAMG,MAAM,GAAG,IAAAC,wBAAkB,EAACJ,KAAK,EAAED,OAAO,aAAPA,OAAO,uBAAPA,OAAO,CAAEG,MAAM,CAAC;MAEzD,IAAIC,MAAM,KAAKV,SAAS,EAAE;QACxBT,UAAU,CAACqB,QAAQ,CAACF,MAAM,CAAC;MAC7B,CAAC,MAAM;QACLnB,UAAU,CAACsB,KAAK,CAACN,KAAK,CAAC;MACzB;IACF,CAAC,MAAM;MACL,MAAM,IAAIN,KAAK,CAAC,iDAAiD,CAAC;IACpE;EACF,CAAC,EACD,CAACN,OAAO,EAAEJ,UAAU,CAAC,CACtB;EAED,OAAOM,MAAM;AACf"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"names":["getPathFromState","NavigationHelpersContext","React","LinkingContext","getRootStateForNavigate","navigation","state","parent","getParent","parentState","getState","index","routes","useLinkBuilder","useContext","linking","buildLink","useCallback","name","params","options","enabled","undefined","path","config"],"sourceRoot":"../../src","sources":["useLinkBuilder.tsx"],"mappings":"AAAA,SACEA,gBAAgB,EAEhBC,wBAAwB,QAGnB,wBAAwB;AAC/B,OAAO,KAAKC,KAAK,MAAM,OAAO;AAE9B,OAAOC,cAAc,MAAM,kBAAkB;AAW7C,MAAMC,uBAAuB,GAAG,CAC9BC,UAA4B,EAC5BC,KAAmB,KACF;EACjB,MAAMC,MAAM,GAAGF,UAAU,CAACG,SAAS,EAAE;EAErC,IAAID,MAAM,EAAE;IACV,MAAME,WAAW,GAAGF,MAAM,CAACG,QAAQ,EAAE;IAErC,OAAON,uBAAuB,CAACG,MAAM,EAAE;MACrCI,KAAK,EAAE,CAAC;MACRC,MAAM,EAAE,CACN;QACE,GAAGH,WAAW,CAACG,MAAM,CAACH,WAAW,CAACE,KAAK,CAAC;QACxCL,KAAK,EAAEA;MACT,CAAC;IAEL,CAAC,CAAC;EACJ;EAEA,OAAOA,KAAK;AACd,CAAC;;AAED;AACA;AACA;AACA;AACA,eAAe,SAASO,cAAc,GAAG;EACvC,MAAMR,UAAU,GAAGH,KAAK,CAACY,UAAU,CAACb,wBAAwB,CAAC;EAC7D,MAAMc,OAAO,GAAGb,KAAK,CAACY,UAAU,CAACX,cAAc,CAAC;EAEhD,MAAMa,SAAS,GAAGd,KAAK,CAACe,WAAW,CACjC,CAACC,IAAY,EAAEC,MAAe,KAAK;IACjC,MAAM;MAAEC;IAAQ,CAAC,GAAGL,OAAO;IAE3B,IAAI,CAAAK,OAAO,aAAPA,OAAO,uBAAPA,OAAO,CAAEC,OAAO,MAAK,KAAK,EAAE;MAC9B,OAAOC,SAAS;IAClB;IAEA,MAAMhB,KAAK,GAAGD,UAAU,GACpBD,uBAAuB,CAACC,UAAU,EAAE;MAClCM,KAAK,EAAE,CAAC;MACRC,MAAM,EAAE,CAAC;QAAEM,IAAI;QAAEC;MAAO,CAAC;IAC3B,CAAC,CAAC;IACF;IACA;IACA;MACER,KAAK,EAAE,CAAC;MACRC,MAAM,EAAE,CAAC;QAAEM,IAAI;QAAEC;MAAO,CAAC;IAC3B,CAAC;IAEL,MAAMI,IAAI,GAAGH,OAAO,aAAPA,OAAO,eAAPA,OAAO,CAAEpB,gBAAgB,GAClCoB,OAAO,CAACpB,gBAAgB,CAACM,KAAK,EAAEc,OAAO,aAAPA,OAAO,uBAAPA,OAAO,CAAEI,MAAM,CAAC,GAChDxB,gBAAgB,CAACM,KAAK,EAAEc,OAAO,aAAPA,OAAO,uBAAPA,OAAO,CAAEI,MAAM,CAAC;IAE5C,OAAOD,IAAI;EACb,CAAC,EACD,CAACR,OAAO,EAAEV,UAAU,CAAC,CACtB;EAED,OAAOW,SAAS;AAClB"}
|
package/lib/module/useLinkTo.js
DELETED
|
@@ -1,36 +0,0 @@
|
|
|
1
|
-
import { getActionFromState, getStateFromPath, NavigationContainerRefContext } from '@react-navigation/core';
|
|
2
|
-
import * as React from 'react';
|
|
3
|
-
import LinkingContext from './LinkingContext';
|
|
4
|
-
export default function useLinkTo() {
|
|
5
|
-
const navigation = React.useContext(NavigationContainerRefContext);
|
|
6
|
-
const linking = React.useContext(LinkingContext);
|
|
7
|
-
const linkTo = React.useCallback(to => {
|
|
8
|
-
if (navigation === undefined) {
|
|
9
|
-
throw new Error("Couldn't find a navigation object. Is your component inside NavigationContainer?");
|
|
10
|
-
}
|
|
11
|
-
if (typeof to !== 'string') {
|
|
12
|
-
// @ts-expect-error: This is fine
|
|
13
|
-
navigation.navigate(to.screen, to.params);
|
|
14
|
-
return;
|
|
15
|
-
}
|
|
16
|
-
if (!to.startsWith('/')) {
|
|
17
|
-
throw new Error(`The path must start with '/' (${to}).`);
|
|
18
|
-
}
|
|
19
|
-
const {
|
|
20
|
-
options
|
|
21
|
-
} = linking;
|
|
22
|
-
const state = options !== null && options !== void 0 && options.getStateFromPath ? options.getStateFromPath(to, options.config) : getStateFromPath(to, options === null || options === void 0 ? void 0 : options.config);
|
|
23
|
-
if (state) {
|
|
24
|
-
const action = getActionFromState(state, options === null || options === void 0 ? void 0 : options.config);
|
|
25
|
-
if (action !== undefined) {
|
|
26
|
-
navigation.dispatch(action);
|
|
27
|
-
} else {
|
|
28
|
-
navigation.reset(state);
|
|
29
|
-
}
|
|
30
|
-
} else {
|
|
31
|
-
throw new Error('Failed to parse the path to a navigation state.');
|
|
32
|
-
}
|
|
33
|
-
}, [linking, navigation]);
|
|
34
|
-
return linkTo;
|
|
35
|
-
}
|
|
36
|
-
//# sourceMappingURL=useLinkTo.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"names":["getActionFromState","getStateFromPath","NavigationContainerRefContext","React","LinkingContext","useLinkTo","navigation","useContext","linking","linkTo","useCallback","to","undefined","Error","navigate","screen","params","startsWith","options","state","config","action","dispatch","reset"],"sourceRoot":"../../src","sources":["useLinkTo.tsx"],"mappings":"AAAA,SACEA,kBAAkB,EAClBC,gBAAgB,EAChBC,6BAA6B,QACxB,wBAAwB;AAC/B,OAAO,KAAKC,KAAK,MAAM,OAAO;AAE9B,OAAOC,cAAc,MAAM,kBAAkB;AAiB7C,eAAe,SAASC,SAAS,GAE7B;EACF,MAAMC,UAAU,GAAGH,KAAK,CAACI,UAAU,CAACL,6BAA6B,CAAC;EAClE,MAAMM,OAAO,GAAGL,KAAK,CAACI,UAAU,CAACH,cAAc,CAAC;EAEhD,MAAMK,MAAM,GAAGN,KAAK,CAACO,WAAW,CAC7BC,EAAiB,IAAK;IACrB,IAAIL,UAAU,KAAKM,SAAS,EAAE;MAC5B,MAAM,IAAIC,KAAK,CACb,kFAAkF,CACnF;IACH;IAEA,IAAI,OAAOF,EAAE,KAAK,QAAQ,EAAE;MAC1B;MACAL,UAAU,CAACQ,QAAQ,CAACH,EAAE,CAACI,MAAM,EAAEJ,EAAE,CAACK,MAAM,CAAC;MACzC;IACF;IAEA,IAAI,CAACL,EAAE,CAACM,UAAU,CAAC,GAAG,CAAC,EAAE;MACvB,MAAM,IAAIJ,KAAK,CAAE,iCAAgCF,EAAG,IAAG,CAAC;IAC1D;IAEA,MAAM;MAAEO;IAAQ,CAAC,GAAGV,OAAO;IAE3B,MAAMW,KAAK,GAAGD,OAAO,aAAPA,OAAO,eAAPA,OAAO,CAAEjB,gBAAgB,GACnCiB,OAAO,CAACjB,gBAAgB,CAACU,EAAE,EAAEO,OAAO,CAACE,MAAM,CAAC,GAC5CnB,gBAAgB,CAACU,EAAE,EAAEO,OAAO,aAAPA,OAAO,uBAAPA,OAAO,CAAEE,MAAM,CAAC;IAEzC,IAAID,KAAK,EAAE;MACT,MAAME,MAAM,GAAGrB,kBAAkB,CAACmB,KAAK,EAAED,OAAO,aAAPA,OAAO,uBAAPA,OAAO,CAAEE,MAAM,CAAC;MAEzD,IAAIC,MAAM,KAAKT,SAAS,EAAE;QACxBN,UAAU,CAACgB,QAAQ,CAACD,MAAM,CAAC;MAC7B,CAAC,MAAM;QACLf,UAAU,CAACiB,KAAK,CAACJ,KAAK,CAAC;MACzB;IACF,CAAC,MAAM;MACL,MAAM,IAAIN,KAAK,CAAC,iDAAiD,CAAC;IACpE;EACF,CAAC,EACD,CAACL,OAAO,EAAEF,UAAU,CAAC,CACtB;EAED,OAAOG,MAAM;AACf"}
|
|
@@ -1,6 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Build destination link for a navigate action.
|
|
3
|
-
* Useful for showing anchor tags on the web for buttons that perform navigation.
|
|
4
|
-
*/
|
|
5
|
-
export default function useLinkBuilder(): (name: string, params?: object) => string | undefined;
|
|
6
|
-
//# sourceMappingURL=useLinkBuilder.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"useLinkBuilder.d.ts","sourceRoot":"","sources":["../../../src/useLinkBuilder.tsx"],"names":[],"mappings":"AA2CA;;;GAGG;AACH,MAAM,CAAC,OAAO,UAAU,cAAc,WAK3B,MAAM,WAAW,MAAM,wBA6BjC"}
|
|
@@ -1,9 +0,0 @@
|
|
|
1
|
-
export declare type To<ParamList extends ReactNavigation.RootParamList = ReactNavigation.RootParamList, RouteName extends keyof ParamList = keyof ParamList> = string | (undefined extends ParamList[RouteName] ? {
|
|
2
|
-
screen: Extract<RouteName, string>;
|
|
3
|
-
params?: ParamList[RouteName];
|
|
4
|
-
} : {
|
|
5
|
-
screen: Extract<RouteName, string>;
|
|
6
|
-
params: ParamList[RouteName];
|
|
7
|
-
});
|
|
8
|
-
export default function useLinkTo<ParamList extends ReactNavigation.RootParamList>(): (to: To<ParamList>) => void;
|
|
9
|
-
//# sourceMappingURL=useLinkTo.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"useLinkTo.d.ts","sourceRoot":"","sources":["../../../src/useLinkTo.tsx"],"names":[],"mappings":"AASA,oBAAY,EAAE,CACZ,SAAS,SAAS,eAAe,CAAC,aAAa,GAAG,eAAe,CAAC,aAAa,EAC/E,SAAS,SAAS,MAAM,SAAS,GAAG,MAAM,SAAS,IAEjD,MAAM,GACN,CAAC,SAAS,SAAS,SAAS,CAAC,SAAS,CAAC,GACnC;IACE,MAAM,EAAE,OAAO,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC;IACnC,MAAM,CAAC,EAAE,SAAS,CAAC,SAAS,CAAC,CAAC;CAC/B,GACD;IACE,MAAM,EAAE,OAAO,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC;IACnC,MAAM,EAAE,SAAS,CAAC,SAAS,CAAC,CAAC;CAC9B,CAAC,CAAC;AAEX,MAAM,CAAC,OAAO,UAAU,SAAS,CAC/B,SAAS,SAAS,eAAe,CAAC,aAAa,UAMxC,GAAG,SAAS,CAAC,UAuCrB"}
|
package/src/useLinkTo.tsx
DELETED
|
@@ -1,71 +0,0 @@
|
|
|
1
|
-
import {
|
|
2
|
-
getActionFromState,
|
|
3
|
-
getStateFromPath,
|
|
4
|
-
NavigationContainerRefContext,
|
|
5
|
-
} from '@react-navigation/core';
|
|
6
|
-
import * as React from 'react';
|
|
7
|
-
|
|
8
|
-
import LinkingContext from './LinkingContext';
|
|
9
|
-
|
|
10
|
-
export type To<
|
|
11
|
-
ParamList extends ReactNavigation.RootParamList = ReactNavigation.RootParamList,
|
|
12
|
-
RouteName extends keyof ParamList = keyof ParamList
|
|
13
|
-
> =
|
|
14
|
-
| string
|
|
15
|
-
| (undefined extends ParamList[RouteName]
|
|
16
|
-
? {
|
|
17
|
-
screen: Extract<RouteName, string>;
|
|
18
|
-
params?: ParamList[RouteName];
|
|
19
|
-
}
|
|
20
|
-
: {
|
|
21
|
-
screen: Extract<RouteName, string>;
|
|
22
|
-
params: ParamList[RouteName];
|
|
23
|
-
});
|
|
24
|
-
|
|
25
|
-
export default function useLinkTo<
|
|
26
|
-
ParamList extends ReactNavigation.RootParamList
|
|
27
|
-
>() {
|
|
28
|
-
const navigation = React.useContext(NavigationContainerRefContext);
|
|
29
|
-
const linking = React.useContext(LinkingContext);
|
|
30
|
-
|
|
31
|
-
const linkTo = React.useCallback(
|
|
32
|
-
(to: To<ParamList>) => {
|
|
33
|
-
if (navigation === undefined) {
|
|
34
|
-
throw new Error(
|
|
35
|
-
"Couldn't find a navigation object. Is your component inside NavigationContainer?"
|
|
36
|
-
);
|
|
37
|
-
}
|
|
38
|
-
|
|
39
|
-
if (typeof to !== 'string') {
|
|
40
|
-
// @ts-expect-error: This is fine
|
|
41
|
-
navigation.navigate(to.screen, to.params);
|
|
42
|
-
return;
|
|
43
|
-
}
|
|
44
|
-
|
|
45
|
-
if (!to.startsWith('/')) {
|
|
46
|
-
throw new Error(`The path must start with '/' (${to}).`);
|
|
47
|
-
}
|
|
48
|
-
|
|
49
|
-
const { options } = linking;
|
|
50
|
-
|
|
51
|
-
const state = options?.getStateFromPath
|
|
52
|
-
? options.getStateFromPath(to, options.config)
|
|
53
|
-
: getStateFromPath(to, options?.config);
|
|
54
|
-
|
|
55
|
-
if (state) {
|
|
56
|
-
const action = getActionFromState(state, options?.config);
|
|
57
|
-
|
|
58
|
-
if (action !== undefined) {
|
|
59
|
-
navigation.dispatch(action);
|
|
60
|
-
} else {
|
|
61
|
-
navigation.reset(state);
|
|
62
|
-
}
|
|
63
|
-
} else {
|
|
64
|
-
throw new Error('Failed to parse the path to a navigation state.');
|
|
65
|
-
}
|
|
66
|
-
},
|
|
67
|
-
[linking, navigation]
|
|
68
|
-
);
|
|
69
|
-
|
|
70
|
-
return linkTo;
|
|
71
|
-
}
|