createConfigGetter.js
3.25 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
'use strict';
Object.defineProperty(exports, "__esModule", {
value: true
});
var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; };
var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };
var _invariant = require('../utils/invariant');
var _invariant2 = _interopRequireDefault(_invariant);
var _getScreenForRouteName = require('./getScreenForRouteName');
var _getScreenForRouteName2 = _interopRequireDefault(_getScreenForRouteName);
var _addNavigationHelpers = require('../addNavigationHelpers');
var _addNavigationHelpers2 = _interopRequireDefault(_addNavigationHelpers);
var _validateScreenOptions = require('./validateScreenOptions');
var _validateScreenOptions2 = _interopRequireDefault(_validateScreenOptions);
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
function applyConfig(configurer, navigationOptions, configProps) {
if (typeof configurer === 'function') {
return _extends({}, navigationOptions, configurer(_extends({}, configProps, {
navigationOptions: navigationOptions
})));
}
if ((typeof configurer === 'undefined' ? 'undefined' : _typeof(configurer)) === 'object') {
return _extends({}, navigationOptions, configurer);
}
return navigationOptions;
}
exports.default = function (routeConfigs, navigatorScreenConfig) {
return function (navigation, screenProps) {
var state = navigation.state,
dispatch = navigation.dispatch;
var route = state;
(0, _invariant2.default)(route.routeName && typeof route.routeName === 'string', 'Cannot get config because the route does not have a routeName.');
var Component = (0, _getScreenForRouteName2.default)(routeConfigs, route.routeName);
var outputConfig = {};
var router = Component.router;
if (router) {
// $FlowFixMe
var _ref = route,
routes = _ref.routes,
index = _ref.index;
if (!route || !routes || index == null) {
throw new Error('Expect nav state to have routes and index, ' + JSON.stringify(route));
}
var childRoute = routes[index];
var childNavigation = (0, _addNavigationHelpers2.default)({
state: childRoute,
dispatch: dispatch
});
outputConfig = router.getScreenOptions(childNavigation, screenProps);
}
var routeConfig = routeConfigs[route.routeName];
var routeScreenConfig = routeConfig.navigationOptions;
var componentScreenConfig = Component.navigationOptions;
var configOptions = { navigation: navigation, screenProps: screenProps || {} };
outputConfig = applyConfig(navigatorScreenConfig, outputConfig, configOptions);
outputConfig = applyConfig(componentScreenConfig, outputConfig, configOptions);
outputConfig = applyConfig(routeScreenConfig, outputConfig, configOptions);
(0, _validateScreenOptions2.default)(outputConfig, route);
return outputConfig;
};
};