validateScreenOptions.js.flow
2.11 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
/* @flow */
import type { NavigationRoute } from '../TypeDefinition';
const deprecatedKeys = ['tabBar'];
/**
* Make sure screen options returned by the `getScreenOption`
* are valid
*/
export default (screenOptions: *, route: NavigationRoute) => {
const keys: Array<string> = Object.keys(screenOptions);
const deprecatedKey = keys.find((key: *) => deprecatedKeys.includes(key));
if (typeof screenOptions.title === 'function') {
throw new Error(
[
`\`title\` cannot be defined as a function in navigation options for \`${route.routeName}\` screen. \n`,
'Try replacing the following:',
'{',
' title: ({ state }) => state...',
'}',
'',
'with:',
'({ navigation }) => ({',
' title: navigation.state...',
'})',
].join('\n')
);
}
if (deprecatedKey && typeof screenOptions[deprecatedKey] === 'function') {
throw new Error(
[
`\`${deprecatedKey}\` cannot be defined as a function in navigation options for \`${route.routeName}\` screen. \n`,
'Try replacing the following:',
'{',
` ${deprecatedKey}: ({ state }) => ({`,
' key: state...',
' })',
'}',
'',
'with:',
'({ navigation }) => ({',
` ${deprecatedKey}Key: navigation.state...`,
'})',
].join('\n')
);
}
if (deprecatedKey && typeof screenOptions[deprecatedKey] === 'object') {
throw new Error(
[
`Invalid key \`${deprecatedKey}\` defined in navigation options for \`${route.routeName}\` screen.`,
'\n',
'Try replacing the following navigation options:',
'{',
` ${deprecatedKey}: {`,
...Object.keys(screenOptions[deprecatedKey]).map(
(key: string) => ` ${key}: ...,`
),
' },',
'}',
'\n',
'with:',
'{',
...Object.keys(screenOptions[deprecatedKey]).map(
(key: string) =>
` ${deprecatedKey + key[0].toUpperCase() + key.slice(1)}: ...,`
),
'}',
].join('\n')
);
}
};