@momo-kits/foundation 0.92.1-tracking.2 → 0.92.1-tracking.20
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/Application/BottomTab.tsx +2 -2
- package/Application/Components.tsx +37 -29
- package/Application/ModalScreen.tsx +107 -131
- package/Application/NavigationContainer.tsx +59 -53
- package/Application/StackScreen.tsx +19 -14
- package/Application/index.ts +0 -4
- package/Application/types.ts +6 -7
- package/Application/utils.tsx +3 -10
- package/Button/index.tsx +12 -4
- package/CheckBox/index.tsx +7 -4
- package/Image/index.tsx +1 -1
- package/Input/Input.tsx +10 -5
- package/Input/InputDropDown.tsx +9 -6
- package/Input/InputMoney.tsx +10 -7
- package/Input/InputOTP.tsx +7 -5
- package/Input/InputSearch.tsx +8 -5
- package/Input/InputTextArea.tsx +13 -9
- package/Input/styles.ts +3 -3
- package/Popup/PopupNotify.tsx +15 -11
- package/Popup/PopupPromotion.tsx +10 -8
- package/Radio/index.tsx +7 -4
- package/Switch/index.tsx +7 -5
- package/Text/index.tsx +3 -5
- package/Text/styles.ts +7 -7
- package/package.json +2 -1
- package/verify.js +9 -6
|
@@ -58,7 +58,7 @@ const BottomTab: React.FC<BottomTabProps> = ({
|
|
|
58
58
|
});
|
|
59
59
|
}, []);
|
|
60
60
|
|
|
61
|
-
const accessibilityID = getAccessibilityID("tbr_main_bottom")
|
|
61
|
+
const accessibilityID = getAccessibilityID?.("tbr_main_bottom")
|
|
62
62
|
|
|
63
63
|
return (
|
|
64
64
|
<Tab.Navigator
|
|
@@ -75,7 +75,7 @@ const BottomTab: React.FC<BottomTabProps> = ({
|
|
|
75
75
|
},
|
|
76
76
|
}}>
|
|
77
77
|
{tabs.map(item => {
|
|
78
|
-
const itemAccessibilityID = getAccessibilityID(`btn_tabbar_${item.name}`)
|
|
78
|
+
const itemAccessibilityID = getAccessibilityID?.(`btn_tabbar_${item.name}`)
|
|
79
79
|
return (
|
|
80
80
|
<Tab.Screen
|
|
81
81
|
{...itemAccessibilityID}
|
|
@@ -15,7 +15,7 @@ import {
|
|
|
15
15
|
View,
|
|
16
16
|
ViewStyle,
|
|
17
17
|
} from 'react-native';
|
|
18
|
-
import {ApplicationContext
|
|
18
|
+
import {ApplicationContext} from './index';
|
|
19
19
|
import {Colors, Radius, Spacing, Styles} from '../Consts';
|
|
20
20
|
import {Image} from '../Image';
|
|
21
21
|
import {
|
|
@@ -29,7 +29,11 @@ import {scaleSize, Text} from '../Text';
|
|
|
29
29
|
import {Icon} from '../Icon';
|
|
30
30
|
import {PopupNotify} from '../Popup';
|
|
31
31
|
import {Badge, BadgeDot} from '../Badge';
|
|
32
|
-
import {getAccessibilityID} from
|
|
32
|
+
import {getAccessibilityID} from './utils';
|
|
33
|
+
|
|
34
|
+
const {
|
|
35
|
+
MiniAppContext,
|
|
36
|
+
} = require('react-native/Libraries/Components/ScreenContext');
|
|
33
37
|
|
|
34
38
|
const NavigationButton: React.FC<NavigationButtonProps> = ({
|
|
35
39
|
icon,
|
|
@@ -38,7 +42,7 @@ const NavigationButton: React.FC<NavigationButtonProps> = ({
|
|
|
38
42
|
useBorder = true,
|
|
39
43
|
badgeType,
|
|
40
44
|
badgeValue,
|
|
41
|
-
|
|
45
|
+
accessibilityID = '',
|
|
42
46
|
}) => {
|
|
43
47
|
const {theme} = useContext(ApplicationContext);
|
|
44
48
|
let buttonStyle: ViewStyle = {backgroundColor: '#00000066'};
|
|
@@ -65,7 +69,7 @@ const NavigationButton: React.FC<NavigationButtonProps> = ({
|
|
|
65
69
|
}
|
|
66
70
|
}, [badgeType, badgeValue]);
|
|
67
71
|
|
|
68
|
-
const ID = getAccessibilityID(accessibilityID)
|
|
72
|
+
const ID = getAccessibilityID?.(accessibilityID);
|
|
69
73
|
return (
|
|
70
74
|
<View {...ID} style={{width: scaleSize(28)}}>
|
|
71
75
|
<TouchableOpacity
|
|
@@ -93,6 +97,7 @@ const HeaderTitle: React.FC<any> = props => {
|
|
|
93
97
|
return (
|
|
94
98
|
<Animated.Text
|
|
95
99
|
{...props}
|
|
100
|
+
{...getAccessibilityID('title_navigation_header')}
|
|
96
101
|
style={[
|
|
97
102
|
styles.title,
|
|
98
103
|
{fontFamily: `${theme.font}-Bold`, opacity, color: props.tintColor},
|
|
@@ -107,7 +112,7 @@ const HeaderLeft: React.FC<HeaderBackProps> = ({
|
|
|
107
112
|
onPressLeftHeader,
|
|
108
113
|
useBorder,
|
|
109
114
|
}) => {
|
|
110
|
-
const context = useContext(MiniAppContext);
|
|
115
|
+
const context = useContext<any>(MiniAppContext);
|
|
111
116
|
const {navigator} = useContext(ApplicationContext);
|
|
112
117
|
|
|
113
118
|
useEffect(() => {
|
|
@@ -170,9 +175,9 @@ const HeaderLeft: React.FC<HeaderBackProps> = ({
|
|
|
170
175
|
return true;
|
|
171
176
|
};
|
|
172
177
|
return (
|
|
173
|
-
<View
|
|
178
|
+
<View style={styles.headerLeft}>
|
|
174
179
|
<NavigationButton
|
|
175
|
-
|
|
180
|
+
accessibilityID="btn_navigation_back"
|
|
176
181
|
icon="ic_back"
|
|
177
182
|
tintColor={tintColor}
|
|
178
183
|
onPress={goBackSafe}
|
|
@@ -246,7 +251,10 @@ const HeaderCustom: React.FC<TitleCustomProps> = ({
|
|
|
246
251
|
)}
|
|
247
252
|
</View>
|
|
248
253
|
<View style={[Styles.flex, {paddingHorizontal: 8}]}>
|
|
249
|
-
<Text
|
|
254
|
+
<Text
|
|
255
|
+
{...getAccessibilityID('title_navigation_header')}
|
|
256
|
+
typography="header_default_bold"
|
|
257
|
+
color={tintColor}>
|
|
250
258
|
{title}
|
|
251
259
|
</Text>
|
|
252
260
|
<Text typography="description_default_regular" color={tintColor}>
|
|
@@ -293,10 +301,10 @@ const HeaderToolkitAction: React.FC<any> = ({
|
|
|
293
301
|
tintColor,
|
|
294
302
|
pinnedTool,
|
|
295
303
|
runtimeTools = [],
|
|
296
|
-
|
|
304
|
+
preventClose,
|
|
297
305
|
}) => {
|
|
298
306
|
const {theme, navigator} = useContext(ApplicationContext);
|
|
299
|
-
const miniContext = useContext(MiniAppContext);
|
|
307
|
+
const miniContext = useContext<any>(MiniAppContext);
|
|
300
308
|
const [toolConfig, setToolConfig] = useState<any>();
|
|
301
309
|
const {onAction} = toolConfig ?? {};
|
|
302
310
|
|
|
@@ -340,15 +348,15 @@ const HeaderToolkitAction: React.FC<any> = ({
|
|
|
340
348
|
};
|
|
341
349
|
|
|
342
350
|
const onClose = () => {
|
|
343
|
-
if (
|
|
351
|
+
if (preventClose) {
|
|
344
352
|
navigator?.showModal({
|
|
345
353
|
screen: () => (
|
|
346
354
|
<PopupNotify
|
|
347
|
-
{...
|
|
355
|
+
{...preventClose}
|
|
348
356
|
primary={{
|
|
349
|
-
title:
|
|
357
|
+
title: preventClose.primary.title,
|
|
350
358
|
onPress: () => {
|
|
351
|
-
|
|
359
|
+
preventClose?.primary.onPress();
|
|
352
360
|
navigator?.maxApi?.dispatchFunction?.(
|
|
353
361
|
'dismiss',
|
|
354
362
|
undefined,
|
|
@@ -372,7 +380,7 @@ const HeaderToolkitAction: React.FC<any> = ({
|
|
|
372
380
|
if (pinTool)
|
|
373
381
|
return (
|
|
374
382
|
<NavigationButton
|
|
375
|
-
|
|
383
|
+
accessibilityID="btn_navigation_pin"
|
|
376
384
|
icon={pinTool.icon as string}
|
|
377
385
|
tintColor={tintColor}
|
|
378
386
|
badgeValue={badgeValue}
|
|
@@ -403,14 +411,14 @@ const HeaderToolkitAction: React.FC<any> = ({
|
|
|
403
411
|
},
|
|
404
412
|
]}>
|
|
405
413
|
<TouchableOpacity
|
|
406
|
-
|
|
407
|
-
|
|
414
|
+
{...getAccessibilityID?.('btn_navigation_more')}
|
|
415
|
+
onPress={onMore}>
|
|
408
416
|
<Icon color={tintColor} source="navigation_more_horiz" size={20} />
|
|
409
417
|
</TouchableOpacity>
|
|
410
418
|
<View style={[styles.divider, {backgroundColor: tintColor}]} />
|
|
411
419
|
<TouchableOpacity
|
|
412
|
-
|
|
413
|
-
|
|
420
|
+
{...getAccessibilityID?.('btn_navigation_close')}
|
|
421
|
+
onPress={onClose}>
|
|
414
422
|
<Icon
|
|
415
423
|
color={tintColor}
|
|
416
424
|
source="16_navigation_close_circle"
|
|
@@ -428,7 +436,7 @@ const HeaderToolkitAction: React.FC<any> = ({
|
|
|
428
436
|
const HeaderAnimated: React.FC<HeaderAnimatedProps> = ({
|
|
429
437
|
animatedValue,
|
|
430
438
|
image,
|
|
431
|
-
|
|
439
|
+
children,
|
|
432
440
|
}) => {
|
|
433
441
|
const scale = animatedValue.interpolate({
|
|
434
442
|
inputRange: [-300, 0, 300],
|
|
@@ -447,21 +455,21 @@ const HeaderAnimated: React.FC<HeaderAnimatedProps> = ({
|
|
|
447
455
|
});
|
|
448
456
|
|
|
449
457
|
return (
|
|
450
|
-
<
|
|
451
|
-
|
|
452
|
-
|
|
453
|
-
|
|
454
|
-
|
|
455
|
-
|
|
456
|
-
|
|
458
|
+
<Animated.View
|
|
459
|
+
style={{
|
|
460
|
+
height: 210,
|
|
461
|
+
opacity: opacity,
|
|
462
|
+
transform: [{scale}, {translateY}],
|
|
463
|
+
}}>
|
|
464
|
+
{children ?? (
|
|
457
465
|
<Image
|
|
458
466
|
source={{
|
|
459
467
|
uri: image,
|
|
460
468
|
}}
|
|
461
469
|
style={{width: '100%', height: '100%'}}
|
|
462
470
|
/>
|
|
463
|
-
|
|
464
|
-
</
|
|
471
|
+
)}
|
|
472
|
+
</Animated.View>
|
|
465
473
|
);
|
|
466
474
|
};
|
|
467
475
|
|
|
@@ -1,29 +1,21 @@
|
|
|
1
|
-
import React, {useContext, useEffect,
|
|
1
|
+
import React, {useContext, useEffect, useRef} from 'react';
|
|
2
2
|
import {
|
|
3
|
-
Dimensions,
|
|
4
|
-
Keyboard,
|
|
5
3
|
KeyboardAvoidingView,
|
|
6
4
|
Platform,
|
|
7
5
|
Pressable,
|
|
8
6
|
StyleSheet,
|
|
7
|
+
TouchableOpacity,
|
|
9
8
|
View,
|
|
10
9
|
} from 'react-native';
|
|
10
|
+
import {Modalize} from 'react-native-modalize';
|
|
11
11
|
import {SafeAreaView, useSafeAreaInsets} from 'react-native-safe-area-context';
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
} from '
|
|
12
|
+
|
|
13
|
+
import {ApplicationContext} from '.';
|
|
14
|
+
import {Radius, Spacing, Styles} from '../Consts';
|
|
15
|
+
import {Icon} from '../Icon';
|
|
16
|
+
import {Text} from '../Text';
|
|
17
17
|
import Navigation from './Navigation';
|
|
18
18
|
import {BottomSheetParams, ModalParams} from './types';
|
|
19
|
-
import {Radius, Spacing, Styles} from '../Consts';
|
|
20
|
-
import {
|
|
21
|
-
ApplicationContext,
|
|
22
|
-
HeaderRightAction,
|
|
23
|
-
NavigationButton,
|
|
24
|
-
NavigationContainer,
|
|
25
|
-
} from './index';
|
|
26
|
-
import {HeaderBackground, HeaderLeft, HeaderTitle} from './Components';
|
|
27
19
|
|
|
28
20
|
const ModalScreen: React.FC<any> = props => {
|
|
29
21
|
/**
|
|
@@ -92,141 +84,88 @@ const Modal: React.FC<ModalParams> = props => {
|
|
|
92
84
|
};
|
|
93
85
|
|
|
94
86
|
const BottomSheet: React.FC<BottomSheetParams> = props => {
|
|
95
|
-
const insets = useSafeAreaInsets();
|
|
96
87
|
const {theme, navigator} = useContext(ApplicationContext);
|
|
97
|
-
const
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
88
|
+
const {
|
|
89
|
+
screen: Screen,
|
|
90
|
+
options,
|
|
91
|
+
footerComponent,
|
|
92
|
+
flatListProps,
|
|
93
|
+
}: BottomSheetParams = props.route.params;
|
|
94
|
+
|
|
101
95
|
const navigation = new Navigation(props.navigation, theme);
|
|
96
|
+
|
|
102
97
|
const params = {
|
|
103
98
|
...props.route.params,
|
|
104
99
|
navigation,
|
|
105
100
|
};
|
|
106
101
|
|
|
107
102
|
delete params.screen;
|
|
108
|
-
|
|
109
|
-
const snapPoints = useMemo(() => {
|
|
110
|
-
if (snapPoint) {
|
|
111
|
-
const current = parseInt(snapPoint) + keyboardSnap * 100;
|
|
112
|
-
return [`${current}%`];
|
|
113
|
-
}
|
|
114
|
-
return ['50%', '70%', '90%'];
|
|
115
|
-
}, [keyboardSnap]);
|
|
116
|
-
|
|
117
|
-
const bottomSheetRef = useRef<any>(null);
|
|
118
|
-
const mountedRef = useRef(true);
|
|
119
|
-
|
|
120
|
-
let backgroundColor = theme.colors.background.default;
|
|
121
|
-
let bottomInset = keyboardSnap * Dimensions.get('window').height;
|
|
122
|
-
if (bottomInset > 16) {
|
|
123
|
-
bottomInset -= 16;
|
|
124
|
-
}
|
|
125
|
-
if (options?.surface) {
|
|
126
|
-
backgroundColor = theme.colors.background.surface;
|
|
127
|
-
}
|
|
103
|
+
const modalizeRef = useRef<Modalize>(null);
|
|
128
104
|
|
|
129
105
|
useEffect(() => {
|
|
130
|
-
|
|
131
|
-
setKeyboardSnap(
|
|
132
|
-
e.endCoordinates.height / Dimensions.get('window').height,
|
|
133
|
-
);
|
|
134
|
-
bottomSheetRef.current?.expand();
|
|
135
|
-
});
|
|
136
|
-
|
|
137
|
-
const keyboardDidHide = Keyboard.addListener('keyboardDidHide', () => {
|
|
138
|
-
setKeyboardSnap(0);
|
|
139
|
-
});
|
|
140
|
-
|
|
141
|
-
bottomSheetRef.current?.present();
|
|
142
|
-
return () => {
|
|
143
|
-
mountedRef.current = false;
|
|
144
|
-
keyboardDidShow.remove();
|
|
145
|
-
keyboardDidHide.remove();
|
|
146
|
-
};
|
|
106
|
+
modalizeRef.current?.open();
|
|
147
107
|
}, []);
|
|
148
108
|
|
|
149
|
-
const
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
appearsOnIndex={0}
|
|
153
|
-
{...backdropProps}
|
|
154
|
-
/>
|
|
155
|
-
);
|
|
109
|
+
const handleClose = () => {
|
|
110
|
+
modalizeRef?.current?.close();
|
|
111
|
+
};
|
|
156
112
|
|
|
157
113
|
return (
|
|
158
114
|
<SafeAreaView style={Styles.flex}>
|
|
159
|
-
<
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
115
|
+
<Modalize
|
|
116
|
+
keyboardAvoidingOffset={-20}
|
|
117
|
+
adjustToContentHeight
|
|
118
|
+
closeOnOverlayTap
|
|
119
|
+
closeSnapPointStraightEnabled
|
|
120
|
+
onClosed={() => {
|
|
121
|
+
navigator?.pop();
|
|
166
122
|
}}
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
</View>
|
|
180
|
-
<NavigationContainer
|
|
181
|
-
maxApi={navigator?.maxApi}
|
|
182
|
-
theme={{
|
|
183
|
-
...theme,
|
|
184
|
-
assets: {...theme.assets, headerBackground: undefined},
|
|
185
|
-
}}
|
|
186
|
-
screen={props => <Component {...props} {...params} />}
|
|
187
|
-
options={{
|
|
188
|
-
...options,
|
|
189
|
-
...{
|
|
190
|
-
headerLeft: (props: any) => {
|
|
191
|
-
if (props.canGoBack) {
|
|
192
|
-
return <HeaderLeft {...props} useBorder={false} />;
|
|
193
|
-
}
|
|
194
|
-
},
|
|
195
|
-
headerTitle: (props: any) => {
|
|
196
|
-
return <HeaderTitle {...props} />;
|
|
197
|
-
},
|
|
198
|
-
headerTintColor: theme.colors.text.default,
|
|
199
|
-
headerBackground: () => (
|
|
200
|
-
<HeaderBackground backgroundColor={backgroundColor} />
|
|
201
|
-
),
|
|
202
|
-
headerTransparent: false,
|
|
203
|
-
},
|
|
204
|
-
headerTitleAlign: 'center',
|
|
205
|
-
headerRight: props => (
|
|
206
|
-
<HeaderRightAction>
|
|
207
|
-
<NavigationButton
|
|
208
|
-
{...props}
|
|
209
|
-
icon="24_navigation_close"
|
|
210
|
-
useBorder={false}
|
|
211
|
-
onPress={() => bottomSheetRef.current?.dismiss()}
|
|
212
|
-
/>
|
|
213
|
-
</HeaderRightAction>
|
|
214
|
-
),
|
|
215
|
-
}}
|
|
216
|
-
/>
|
|
217
|
-
<View
|
|
218
|
-
style={{
|
|
219
|
-
height: Math.min(insets.bottom, 20),
|
|
220
|
-
backgroundColor: indicatorColor ?? backgroundColor,
|
|
221
|
-
}}
|
|
222
|
-
/>
|
|
223
|
-
</View>
|
|
224
|
-
</BottomSheetView>
|
|
225
|
-
</BottomSheetModal>
|
|
123
|
+
ref={modalizeRef}
|
|
124
|
+
withHandle={false}
|
|
125
|
+
flatListProps={flatListProps}
|
|
126
|
+
HeaderComponent={headerDefault(
|
|
127
|
+
options?.title ?? options?.customTitle?.title ?? '',
|
|
128
|
+
handleClose,
|
|
129
|
+
)}
|
|
130
|
+
FooterComponent={footerDefault(footerComponent)}>
|
|
131
|
+
<View style={styles.bottomSheetContainer}>
|
|
132
|
+
<Screen {...props} {...params} />
|
|
133
|
+
</View>
|
|
134
|
+
</Modalize>
|
|
226
135
|
</SafeAreaView>
|
|
227
136
|
);
|
|
228
137
|
};
|
|
229
138
|
|
|
139
|
+
const headerDefault = (title: string, onClose: () => void) => {
|
|
140
|
+
return (
|
|
141
|
+
<View style={styles.header}>
|
|
142
|
+
<Text
|
|
143
|
+
style={styles.textOption}
|
|
144
|
+
numberOfLines={2}
|
|
145
|
+
typography="header_default_bold">
|
|
146
|
+
{title ?? ''}
|
|
147
|
+
</Text>
|
|
148
|
+
<TouchableOpacity style={styles.buttonClose} onPress={onClose}>
|
|
149
|
+
<Icon source="navigation_close" />
|
|
150
|
+
</TouchableOpacity>
|
|
151
|
+
</View>
|
|
152
|
+
);
|
|
153
|
+
};
|
|
154
|
+
|
|
155
|
+
const footerDefault = (footerComponent: React.ReactNode) => {
|
|
156
|
+
const insets = useSafeAreaInsets();
|
|
157
|
+
if (!footerComponent) return;
|
|
158
|
+
return (
|
|
159
|
+
<View
|
|
160
|
+
style={{
|
|
161
|
+
marginBottom: Math.min(insets.bottom, 21) + Spacing.S,
|
|
162
|
+
paddingHorizontal: 12,
|
|
163
|
+
}}>
|
|
164
|
+
{footerComponent}
|
|
165
|
+
</View>
|
|
166
|
+
);
|
|
167
|
+
};
|
|
168
|
+
|
|
230
169
|
const styles = StyleSheet.create({
|
|
231
170
|
container: {flex: 1, flexDirection: 'row'},
|
|
232
171
|
modalContent: {
|
|
@@ -263,6 +202,43 @@ const styles = StyleSheet.create({
|
|
|
263
202
|
height: 4,
|
|
264
203
|
borderRadius: Radius.S,
|
|
265
204
|
},
|
|
205
|
+
bottomSheetContainer: {
|
|
206
|
+
width: '100%',
|
|
207
|
+
backgroundColor: 'white',
|
|
208
|
+
borderTopRightRadius: 16,
|
|
209
|
+
borderTopLeftRadius: 16,
|
|
210
|
+
},
|
|
211
|
+
header: {
|
|
212
|
+
height: 50,
|
|
213
|
+
width: '100%',
|
|
214
|
+
alignItems: 'center',
|
|
215
|
+
justifyContent: 'center',
|
|
216
|
+
},
|
|
217
|
+
textOption: {
|
|
218
|
+
fontSize: 16,
|
|
219
|
+
color: '#303233',
|
|
220
|
+
textAlign: 'center',
|
|
221
|
+
fontWeight: 'bold',
|
|
222
|
+
paddingHorizontal: 60,
|
|
223
|
+
},
|
|
224
|
+
imageOption: {
|
|
225
|
+
height: 1,
|
|
226
|
+
backgroundColor: '#ebebeb',
|
|
227
|
+
width: '100%',
|
|
228
|
+
position: 'absolute',
|
|
229
|
+
bottom: 1,
|
|
230
|
+
},
|
|
231
|
+
buttonClose: {
|
|
232
|
+
padding: 12,
|
|
233
|
+
position: 'absolute',
|
|
234
|
+
right: 0,
|
|
235
|
+
},
|
|
236
|
+
icon: {
|
|
237
|
+
width: 24,
|
|
238
|
+
height: 24,
|
|
239
|
+
tintColor: '#303233',
|
|
240
|
+
backgroundColor: 'red',
|
|
241
|
+
},
|
|
266
242
|
});
|
|
267
243
|
|
|
268
244
|
export default ModalScreen;
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
import React, {useContext, useEffect, useRef, useState} from 'react';
|
|
2
|
-
import {BottomSheetModalProvider} from '@gorhom/bottom-sheet';
|
|
3
2
|
import {SafeAreaProvider} from 'react-native-safe-area-context';
|
|
4
3
|
import {
|
|
5
4
|
NavigationContainer as ReactNavigationContainer,
|
|
6
5
|
NavigationContainerRef,
|
|
7
6
|
} from '@react-navigation/native';
|
|
7
|
+
import {BottomSheetModalProvider} from '@gorhom/bottom-sheet';
|
|
8
8
|
import {createStackNavigator} from '@react-navigation/stack';
|
|
9
9
|
import {DeviceEventEmitter} from 'react-native';
|
|
10
10
|
import StackScreen from './StackScreen';
|
|
@@ -12,9 +12,18 @@ import ModalScreen from './ModalScreen';
|
|
|
12
12
|
import Navigator from './Navigator';
|
|
13
13
|
import {getDialogOptions, getModalOptions, getStackOptions} from './utils';
|
|
14
14
|
import {LocalizationObject, NavigationContainerProps} from './types';
|
|
15
|
-
import {ApplicationContext
|
|
15
|
+
import {ApplicationContext} from './index';
|
|
16
16
|
import kitLocalization from '../Assets/language.json';
|
|
17
17
|
|
|
18
|
+
const {
|
|
19
|
+
MiniAppContext,
|
|
20
|
+
} = require('react-native/Libraries/Components/ScreenContext');
|
|
21
|
+
|
|
22
|
+
/**
|
|
23
|
+
* link for deprecated
|
|
24
|
+
*/
|
|
25
|
+
const deprecated = BottomSheetModalProvider;
|
|
26
|
+
|
|
18
27
|
const Stack = createStackNavigator();
|
|
19
28
|
|
|
20
29
|
const NavigationContainer: React.FC<NavigationContainerProps> = ({
|
|
@@ -23,9 +32,8 @@ const NavigationContainer: React.FC<NavigationContainerProps> = ({
|
|
|
23
32
|
options,
|
|
24
33
|
maxApi,
|
|
25
34
|
localization,
|
|
26
|
-
params,
|
|
27
35
|
}) => {
|
|
28
|
-
const context = useContext(MiniAppContext);
|
|
36
|
+
const context = useContext<any>(MiniAppContext);
|
|
29
37
|
const navigationRef = useRef<NavigationContainerRef>(null);
|
|
30
38
|
const isReady = useRef(false);
|
|
31
39
|
const navigator = useRef(new Navigator(navigationRef, isReady));
|
|
@@ -69,55 +77,53 @@ const NavigationContainer: React.FC<NavigationContainerProps> = ({
|
|
|
69
77
|
|
|
70
78
|
return (
|
|
71
79
|
<SafeAreaProvider>
|
|
72
|
-
<
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
theme
|
|
83
|
-
|
|
84
|
-
colors
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
<Stack.
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
</ApplicationContext.Provider>
|
|
120
|
-
</BottomSheetModalProvider>
|
|
80
|
+
<ApplicationContext.Provider
|
|
81
|
+
value={{
|
|
82
|
+
navigator: navigator.current,
|
|
83
|
+
config: config.current,
|
|
84
|
+
theme,
|
|
85
|
+
showGrid,
|
|
86
|
+
translate,
|
|
87
|
+
}}>
|
|
88
|
+
<ReactNavigationContainer
|
|
89
|
+
theme={{
|
|
90
|
+
...theme,
|
|
91
|
+
colors: {
|
|
92
|
+
...theme.colors,
|
|
93
|
+
background: theme.colors.background.default,
|
|
94
|
+
card: theme.colors.background.surface,
|
|
95
|
+
text: theme.colors.text.default,
|
|
96
|
+
border: theme.colors.border.default,
|
|
97
|
+
notification: theme.colors.error.primary,
|
|
98
|
+
},
|
|
99
|
+
}}
|
|
100
|
+
ref={navigator.current?.ref}
|
|
101
|
+
onReady={() => {
|
|
102
|
+
isReady.current = true;
|
|
103
|
+
}}
|
|
104
|
+
independent={true}>
|
|
105
|
+
<Stack.Navigator initialRouteName="Stack" headerMode="screen">
|
|
106
|
+
<Stack.Screen
|
|
107
|
+
name="Stack"
|
|
108
|
+
component={StackScreen}
|
|
109
|
+
initialParams={{screen}}
|
|
110
|
+
options={{...getStackOptions(), ...options}}
|
|
111
|
+
/>
|
|
112
|
+
<Stack.Screen
|
|
113
|
+
name="Dialog"
|
|
114
|
+
component={StackScreen}
|
|
115
|
+
options={getDialogOptions()}
|
|
116
|
+
initialParams={{screen}}
|
|
117
|
+
/>
|
|
118
|
+
<Stack.Screen
|
|
119
|
+
name="Modal"
|
|
120
|
+
component={ModalScreen}
|
|
121
|
+
options={getModalOptions()}
|
|
122
|
+
initialParams={{screen}}
|
|
123
|
+
/>
|
|
124
|
+
</Stack.Navigator>
|
|
125
|
+
</ReactNavigationContainer>
|
|
126
|
+
</ApplicationContext.Provider>
|
|
121
127
|
</SafeAreaProvider>
|
|
122
128
|
);
|
|
123
129
|
};
|