@momo-kits/foundation 0.92.1-tracking.9 → 0.92.2-tracking.2
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/BottomTabBar.tsx +479 -0
- package/Application/{BottomTab.tsx → BottomTab/index.tsx} +19 -14
- package/Application/Components.tsx +48 -48
- package/Application/ModalScreen.tsx +107 -131
- package/Application/NavigationContainer.tsx +57 -54
- package/Application/StackScreen.tsx +76 -66
- package/Application/types.ts +13 -6
- package/Application/utils.tsx +14 -3
- package/Badge/Badge.tsx +1 -1
- package/Button/index.tsx +14 -23
- package/CheckBox/index.tsx +10 -18
- package/CheckBox/types.ts +4 -6
- package/Consts/colors+spacing+radius.ts +14 -0
- package/Icon/index.tsx +8 -8
- package/IconButton/index.tsx +7 -15
- package/Image/index.tsx +20 -10
- package/Image/types.ts +1 -0
- package/Input/Input.tsx +19 -14
- package/Input/InputDropDown.tsx +8 -14
- package/Input/InputMoney.tsx +9 -15
- package/Input/InputOTP.tsx +8 -14
- package/Input/InputSearch.tsx +8 -13
- package/Input/InputTextArea.tsx +5 -9
- package/Input/index.tsx +3 -9
- package/Popup/PopupNotify.tsx +15 -15
- package/Popup/PopupPromotion.tsx +13 -15
- package/Radio/index.tsx +8 -12
- package/Radio/types.ts +4 -7
- package/Switch/index.tsx +14 -19
- package/Switch/types.ts +4 -6
- package/Text/index.tsx +24 -3
- package/Text/styles.ts +3 -3
- package/Text/types.ts +19 -1
- package/Title/index.tsx +148 -102
- package/Title/styles.ts +33 -9
- package/Title/types.ts +12 -48
- package/package.json +3 -1
|
@@ -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 {
|
|
@@ -30,7 +30,10 @@ import {Icon} from '../Icon';
|
|
|
30
30
|
import {PopupNotify} from '../Popup';
|
|
31
31
|
import {Badge, BadgeDot} from '../Badge';
|
|
32
32
|
import {getAccessibilityID} from './utils';
|
|
33
|
-
|
|
33
|
+
|
|
34
|
+
const {
|
|
35
|
+
MiniAppContext,
|
|
36
|
+
} = require('react-native/Libraries/Components/ScreenContext');
|
|
34
37
|
|
|
35
38
|
const NavigationButton: React.FC<NavigationButtonProps> = ({
|
|
36
39
|
icon,
|
|
@@ -66,9 +69,10 @@ const NavigationButton: React.FC<NavigationButtonProps> = ({
|
|
|
66
69
|
}
|
|
67
70
|
}, [badgeType, badgeValue]);
|
|
68
71
|
|
|
69
|
-
const ID = getAccessibilityID?.(accessibilityID);
|
|
70
72
|
return (
|
|
71
|
-
<View
|
|
73
|
+
<View
|
|
74
|
+
{...getAccessibilityID(accessibilityID)}
|
|
75
|
+
style={{width: scaleSize(28)}}>
|
|
72
76
|
<TouchableOpacity
|
|
73
77
|
style={[styles.navigationButton, buttonStyle]}
|
|
74
78
|
onPress={onPress}>
|
|
@@ -91,11 +95,10 @@ const HeaderTitle: React.FC<any> = props => {
|
|
|
91
95
|
extrapolate: 'clamp',
|
|
92
96
|
});
|
|
93
97
|
|
|
94
|
-
|
|
95
98
|
return (
|
|
96
99
|
<Animated.Text
|
|
97
100
|
{...props}
|
|
98
|
-
{...
|
|
101
|
+
{...getAccessibilityID('title_navigation_header')}
|
|
99
102
|
style={[
|
|
100
103
|
styles.title,
|
|
101
104
|
{fontFamily: `${theme.font}-Bold`, opacity, color: props.tintColor},
|
|
@@ -110,7 +113,7 @@ const HeaderLeft: React.FC<HeaderBackProps> = ({
|
|
|
110
113
|
onPressLeftHeader,
|
|
111
114
|
useBorder,
|
|
112
115
|
}) => {
|
|
113
|
-
const context = useContext(MiniAppContext);
|
|
116
|
+
const context = useContext<any>(MiniAppContext);
|
|
114
117
|
const {navigator} = useContext(ApplicationContext);
|
|
115
118
|
|
|
116
119
|
useEffect(() => {
|
|
@@ -124,26 +127,25 @@ const HeaderLeft: React.FC<HeaderBackProps> = ({
|
|
|
124
127
|
|
|
125
128
|
const goBackSafe = () => {
|
|
126
129
|
const goBack = () => {
|
|
127
|
-
const canGoBack = navigator?.ref
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
}
|
|
130
|
+
const canGoBack = navigator?.ref?.current?.canGoBack?.();
|
|
131
|
+
const currentRoute = navigator?.ref?.current?.getCurrentRoute?.();
|
|
132
|
+
const params = {
|
|
133
|
+
appId: context.appId,
|
|
134
|
+
code: context.code,
|
|
135
|
+
screen_name: currentRoute?.params?.screen?.name ?? currentRoute?.name,
|
|
136
|
+
trigger_id: '111154000000000000',
|
|
137
|
+
icon_name: 'back',
|
|
138
|
+
};
|
|
139
|
+
navigator?.maxApi?.showToastDebug?.({
|
|
140
|
+
appId: `auto - ${context.appId}`,
|
|
141
|
+
message: 'service_icon_clicked',
|
|
142
|
+
params,
|
|
143
|
+
});
|
|
144
|
+
navigator?.maxApi?.trackEvent?.('service_icon_clicked', params);
|
|
143
145
|
if (canGoBack) {
|
|
144
|
-
navigator?.ref
|
|
146
|
+
navigator?.ref?.current?.goBack?.();
|
|
145
147
|
} else if (navigator?.maxApi) {
|
|
146
|
-
navigator?.maxApi?.dismiss(navigator
|
|
148
|
+
navigator?.maxApi?.dismiss?.(navigator?.dismissData);
|
|
147
149
|
} else {
|
|
148
150
|
const currentTime = new Date().getTime();
|
|
149
151
|
const requestId = `navigationBackPress#${currentTime}`;
|
|
@@ -250,8 +252,9 @@ const HeaderCustom: React.FC<TitleCustomProps> = ({
|
|
|
250
252
|
</View>
|
|
251
253
|
<View style={[Styles.flex, {paddingHorizontal: 8}]}>
|
|
252
254
|
<Text
|
|
253
|
-
|
|
254
|
-
|
|
255
|
+
{...getAccessibilityID('title_navigation_header')}
|
|
256
|
+
typography="header_default_bold"
|
|
257
|
+
color={tintColor}>
|
|
255
258
|
{title}
|
|
256
259
|
</Text>
|
|
257
260
|
<Text typography="description_default_regular" color={tintColor}>
|
|
@@ -301,7 +304,7 @@ const HeaderToolkitAction: React.FC<any> = ({
|
|
|
301
304
|
preventClose,
|
|
302
305
|
}) => {
|
|
303
306
|
const {theme, navigator} = useContext(ApplicationContext);
|
|
304
|
-
const miniContext = useContext(MiniAppContext);
|
|
307
|
+
const miniContext = useContext<any>(MiniAppContext);
|
|
305
308
|
const [toolConfig, setToolConfig] = useState<any>();
|
|
306
309
|
const {onAction} = toolConfig ?? {};
|
|
307
310
|
|
|
@@ -408,13 +411,13 @@ const HeaderToolkitAction: React.FC<any> = ({
|
|
|
408
411
|
},
|
|
409
412
|
]}>
|
|
410
413
|
<TouchableOpacity
|
|
411
|
-
{...getAccessibilityID
|
|
414
|
+
{...getAccessibilityID('btn_navigation_more')}
|
|
412
415
|
onPress={onMore}>
|
|
413
416
|
<Icon color={tintColor} source="navigation_more_horiz" size={20} />
|
|
414
417
|
</TouchableOpacity>
|
|
415
418
|
<View style={[styles.divider, {backgroundColor: tintColor}]} />
|
|
416
419
|
<TouchableOpacity
|
|
417
|
-
{...getAccessibilityID
|
|
420
|
+
{...getAccessibilityID('btn_navigation_close')}
|
|
418
421
|
onPress={onClose}>
|
|
419
422
|
<Icon
|
|
420
423
|
color={tintColor}
|
|
@@ -433,7 +436,6 @@ const HeaderToolkitAction: React.FC<any> = ({
|
|
|
433
436
|
const HeaderAnimated: React.FC<HeaderAnimatedProps> = ({
|
|
434
437
|
animatedValue,
|
|
435
438
|
image,
|
|
436
|
-
onPress,
|
|
437
439
|
children,
|
|
438
440
|
}) => {
|
|
439
441
|
const scale = animatedValue.interpolate({
|
|
@@ -453,23 +455,21 @@ const HeaderAnimated: React.FC<HeaderAnimatedProps> = ({
|
|
|
453
455
|
});
|
|
454
456
|
|
|
455
457
|
return (
|
|
456
|
-
<
|
|
457
|
-
|
|
458
|
-
|
|
459
|
-
|
|
460
|
-
|
|
461
|
-
|
|
462
|
-
|
|
463
|
-
|
|
464
|
-
|
|
465
|
-
|
|
466
|
-
|
|
467
|
-
|
|
468
|
-
|
|
469
|
-
|
|
470
|
-
|
|
471
|
-
</Animated.View>
|
|
472
|
-
</TouchableOpacity>
|
|
458
|
+
<Animated.View
|
|
459
|
+
style={{
|
|
460
|
+
height: 210,
|
|
461
|
+
opacity: opacity,
|
|
462
|
+
transform: [{scale}, {translateY}],
|
|
463
|
+
}}>
|
|
464
|
+
{children ?? (
|
|
465
|
+
<Image
|
|
466
|
+
source={{
|
|
467
|
+
uri: image,
|
|
468
|
+
}}
|
|
469
|
+
style={{width: '100%', height: '100%'}}
|
|
470
|
+
/>
|
|
471
|
+
)}
|
|
472
|
+
</Animated.View>
|
|
473
473
|
);
|
|
474
474
|
};
|
|
475
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
|
-
import React, {
|
|
2
|
-
import {BottomSheetModalProvider} from '@gorhom/bottom-sheet';
|
|
1
|
+
import React, {useEffect, useRef, useState} from 'react';
|
|
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,15 @@ 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
|
+
/**
|
|
19
|
+
* link for deprecated
|
|
20
|
+
*/
|
|
21
|
+
|
|
22
|
+
console.log(typeof BottomSheetModalProvider);
|
|
23
|
+
|
|
18
24
|
const Stack = createStackNavigator();
|
|
19
25
|
|
|
20
26
|
const NavigationContainer: React.FC<NavigationContainerProps> = ({
|
|
@@ -25,7 +31,6 @@ const NavigationContainer: React.FC<NavigationContainerProps> = ({
|
|
|
25
31
|
localization,
|
|
26
32
|
initialParams,
|
|
27
33
|
}) => {
|
|
28
|
-
const context = useContext(MiniAppContext);
|
|
29
34
|
const navigationRef = useRef<NavigationContainerRef>(null);
|
|
30
35
|
const isReady = useRef(false);
|
|
31
36
|
const navigator = useRef(new Navigator(navigationRef, isReady));
|
|
@@ -59,7 +64,7 @@ const NavigationContainer: React.FC<NavigationContainerProps> = ({
|
|
|
59
64
|
* @param key
|
|
60
65
|
*/
|
|
61
66
|
const translate = (key: string) => {
|
|
62
|
-
const language: 'vi' | 'en' =
|
|
67
|
+
const language: 'vi' | 'en' = 'vi';
|
|
63
68
|
const mergedLocalization: LocalizationObject = {
|
|
64
69
|
vi: {...localization?.vi, ...kitLocalization.vi},
|
|
65
70
|
en: {...localization?.en, ...kitLocalization.en},
|
|
@@ -69,55 +74,53 @@ const NavigationContainer: React.FC<NavigationContainerProps> = ({
|
|
|
69
74
|
|
|
70
75
|
return (
|
|
71
76
|
<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>
|
|
77
|
+
<ApplicationContext.Provider
|
|
78
|
+
value={{
|
|
79
|
+
navigator: navigator.current,
|
|
80
|
+
config: config.current,
|
|
81
|
+
theme,
|
|
82
|
+
showGrid,
|
|
83
|
+
translate,
|
|
84
|
+
}}>
|
|
85
|
+
<ReactNavigationContainer
|
|
86
|
+
theme={{
|
|
87
|
+
...theme,
|
|
88
|
+
colors: {
|
|
89
|
+
...theme.colors,
|
|
90
|
+
background: theme.colors.background.default,
|
|
91
|
+
card: theme.colors.background.surface,
|
|
92
|
+
text: theme.colors.text.default,
|
|
93
|
+
border: theme.colors.border.default,
|
|
94
|
+
notification: theme.colors.error.primary,
|
|
95
|
+
},
|
|
96
|
+
}}
|
|
97
|
+
ref={navigator.current?.ref}
|
|
98
|
+
onReady={() => {
|
|
99
|
+
isReady.current = true;
|
|
100
|
+
}}
|
|
101
|
+
independent={true}>
|
|
102
|
+
<Stack.Navigator initialRouteName="Stack" headerMode="screen">
|
|
103
|
+
<Stack.Screen
|
|
104
|
+
name="Stack"
|
|
105
|
+
component={StackScreen}
|
|
106
|
+
initialParams={{screen, initialParams}}
|
|
107
|
+
options={{...getStackOptions(), ...options}}
|
|
108
|
+
/>
|
|
109
|
+
<Stack.Screen
|
|
110
|
+
name="Dialog"
|
|
111
|
+
component={StackScreen}
|
|
112
|
+
options={getDialogOptions()}
|
|
113
|
+
initialParams={{screen}}
|
|
114
|
+
/>
|
|
115
|
+
<Stack.Screen
|
|
116
|
+
name="Modal"
|
|
117
|
+
component={ModalScreen}
|
|
118
|
+
options={getModalOptions()}
|
|
119
|
+
initialParams={{screen}}
|
|
120
|
+
/>
|
|
121
|
+
</Stack.Navigator>
|
|
122
|
+
</ReactNavigationContainer>
|
|
123
|
+
</ApplicationContext.Provider>
|
|
121
124
|
</SafeAreaProvider>
|
|
122
125
|
);
|
|
123
126
|
};
|