1 | "use strict";
|
2 |
|
3 | Object.defineProperty(exports, "__esModule", {
|
4 | value: true
|
5 | });
|
6 | exports.default = useDescriptors;
|
7 |
|
8 | var React = _interopRequireWildcard(require("react"));
|
9 |
|
10 | var _NavigationBuilderContext = _interopRequireDefault(require("./NavigationBuilderContext"));
|
11 |
|
12 | var _NavigationContext = _interopRequireDefault(require("./NavigationContext"));
|
13 |
|
14 | var _NavigationRouteContext = _interopRequireDefault(require("./NavigationRouteContext"));
|
15 |
|
16 | var _SceneView = _interopRequireDefault(require("./SceneView"));
|
17 |
|
18 | var _useNavigationCache = _interopRequireDefault(require("./useNavigationCache"));
|
19 |
|
20 | var _useRouteCache = _interopRequireDefault(require("./useRouteCache"));
|
21 |
|
22 | function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
23 |
|
24 | 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); }
|
25 |
|
26 | 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; }
|
27 |
|
28 |
|
29 |
|
30 |
|
31 |
|
32 |
|
33 |
|
34 |
|
35 |
|
36 | function useDescriptors(_ref) {
|
37 | let {
|
38 | state,
|
39 | screens,
|
40 | navigation,
|
41 | screenOptions,
|
42 | defaultScreenOptions,
|
43 | onAction,
|
44 | getState,
|
45 | setState,
|
46 | addListener,
|
47 | addKeyedListener,
|
48 | onRouteFocus,
|
49 | router,
|
50 | emitter
|
51 | } = _ref;
|
52 | const [options, setOptions] = React.useState({});
|
53 | const {
|
54 | onDispatchAction,
|
55 | onOptionsChange,
|
56 | stackRef
|
57 | } = React.useContext(_NavigationBuilderContext.default);
|
58 | const context = React.useMemo(() => ({
|
59 | navigation,
|
60 | onAction,
|
61 | addListener,
|
62 | addKeyedListener,
|
63 | onRouteFocus,
|
64 | onDispatchAction,
|
65 | onOptionsChange,
|
66 | stackRef
|
67 | }), [navigation, onAction, addListener, addKeyedListener, onRouteFocus, onDispatchAction, onOptionsChange, stackRef]);
|
68 | const navigations = (0, _useNavigationCache.default)({
|
69 | state,
|
70 | getState,
|
71 | navigation,
|
72 | setOptions,
|
73 | router,
|
74 | emitter
|
75 | });
|
76 | const routes = (0, _useRouteCache.default)(state.routes);
|
77 | return routes.reduce((acc, route, i) => {
|
78 | const config = screens[route.name];
|
79 | const screen = config.props;
|
80 | const navigation = navigations[route.key];
|
81 | const optionsList = [
|
82 | screenOptions,
|
83 | ...(config.options ? config.options.filter(Boolean) : []),
|
84 | screen.options,
|
85 | options[route.key]];
|
86 | const customOptions = optionsList.reduce((acc, curr) => Object.assign(acc, typeof curr !== 'function' ? curr : curr({
|
87 | route,
|
88 | navigation
|
89 | })), {});
|
90 | const mergedOptions = { ...(typeof defaultScreenOptions === 'function' ?
|
91 | defaultScreenOptions({
|
92 | route,
|
93 | navigation,
|
94 | options: customOptions
|
95 | }) : defaultScreenOptions),
|
96 | ...customOptions
|
97 | };
|
98 |
|
99 | const clearOptions = () => setOptions(o => {
|
100 | if (route.key in o) {
|
101 |
|
102 | const {
|
103 | [route.key]: _,
|
104 | ...rest
|
105 | } = o;
|
106 | return rest;
|
107 | }
|
108 |
|
109 | return o;
|
110 | });
|
111 |
|
112 | acc[route.key] = {
|
113 | route,
|
114 |
|
115 | navigation,
|
116 |
|
117 | render() {
|
118 | return React.createElement(_NavigationBuilderContext.default.Provider, {
|
119 | key: route.key,
|
120 | value: context
|
121 | }, React.createElement(_NavigationContext.default.Provider, {
|
122 | value: navigation
|
123 | }, React.createElement(_NavigationRouteContext.default.Provider, {
|
124 | value: route
|
125 | }, React.createElement(_SceneView.default, {
|
126 | navigation: navigation,
|
127 | route: route,
|
128 | screen: screen,
|
129 | routeState: state.routes[i].state,
|
130 | getState: getState,
|
131 | setState: setState,
|
132 | options: mergedOptions,
|
133 | clearOptions: clearOptions
|
134 | }))));
|
135 | },
|
136 |
|
137 | options: mergedOptions
|
138 | };
|
139 | return acc;
|
140 | }, {});
|
141 | }
|
142 |
|
\ | No newline at end of file |