@momo-kits/foundation 0.80.9 → 0.81.1-beta.0
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/BottomSheet.tsx +212 -0
- package/Application/BottomTab/BottomTabBar.tsx +278 -0
- package/Application/BottomTab/index.tsx +143 -0
- package/Application/Components.tsx +379 -209
- package/Application/ModalScreen.tsx +14 -178
- package/Application/Navigation.ts +15 -19
- package/Application/NavigationContainer.tsx +66 -63
- package/Application/Navigator.ts +106 -53
- package/Application/StackScreen.tsx +123 -9
- package/Application/index.ts +19 -6
- package/Application/types.ts +83 -26
- package/Application/utils.tsx +38 -49
- package/Assets/icon.json +83 -5
- package/Assets/icon_bank.json +506 -0
- package/Assets/language.json +3 -1
- package/Badge/Badge.tsx +56 -0
- package/Badge/BadgeDot.tsx +11 -0
- package/Badge/BadgeRibbon.tsx +125 -0
- package/Badge/Shape.tsx +29 -0
- package/Badge/index.tsx +7 -0
- package/Badge/styles.ts +58 -0
- package/Badge/types.ts +63 -0
- package/Button/index.tsx +64 -28
- package/Button/styles.ts +19 -0
- package/CheckBox/index.tsx +37 -27
- package/CheckBox/types.ts +5 -3
- package/Consts/colors+spacing+radius.ts +18 -0
- package/Icon/index.tsx +14 -9
- package/Icon/types.ts +4 -3
- package/IconButton/index.tsx +24 -15
- package/Image/index.tsx +62 -47
- package/Image/styles.ts +1 -9
- package/Image/types.ts +5 -1
- package/Input/Input.tsx +104 -25
- package/Input/InputDropDown.tsx +35 -23
- package/Input/InputMoney.tsx +79 -18
- package/Input/InputOTP.tsx +190 -149
- package/Input/InputSearch.tsx +96 -44
- package/Input/InputTextArea.tsx +33 -17
- package/Input/common.tsx +26 -17
- package/Input/index.tsx +69 -24
- package/Input/styles.ts +5 -7
- package/Input/utils.ts +1 -1
- package/Layout/AnimatedInputSearch.tsx +44 -0
- package/Layout/Card.tsx +37 -13
- package/Layout/FloatingButton.tsx +168 -0
- package/Layout/GridSystem.tsx +2 -3
- package/Layout/Item.tsx +1 -2
- package/Layout/ItemList.tsx +55 -0
- package/Layout/ItemSectionList.tsx +39 -0
- package/Layout/Screen.tsx +404 -181
- package/Layout/Section.tsx +22 -22
- package/Layout/TextTyping.tsx +114 -0
- package/Layout/index.ts +12 -2
- package/Layout/styles.ts +46 -13
- package/Layout/types.ts +13 -5
- package/Layout/utils.ts +7 -12
- package/Loader/index.tsx +2 -0
- package/Pagination/PaginationDot.tsx +6 -1
- package/Pagination/PaginationNumber.tsx +7 -4
- package/Pagination/PaginationScroll.tsx +0 -1
- package/Pagination/PaginationWhiteDot.tsx +6 -1
- package/Pagination/styles.ts +3 -0
- package/Pagination/types.ts +2 -0
- package/Popup/PopupNotify.tsx +108 -40
- package/Popup/PopupPromotion.tsx +45 -10
- package/Popup/types.ts +13 -10
- package/Radio/index.tsx +35 -21
- package/Radio/types.ts +7 -5
- package/Skeleton/index.tsx +1 -1
- package/Switch/index.tsx +32 -19
- package/Switch/types.ts +5 -3
- package/Tag/index.tsx +2 -4
- package/Text/index.tsx +26 -6
- package/Text/styles.ts +38 -0
- package/Text/types.ts +25 -13
- package/Title/index.tsx +177 -63
- package/Title/styles.ts +48 -15
- package/Title/types.ts +16 -47
- package/code-scanner.js +125 -16
- package/index.ts +9 -0
- package/migrate_typo.js +56 -0
- package/package.json +9 -8
- package/publish.sh +21 -16
- package/tsconfig.json +1 -2
- package/verify.js +24 -6
- package/Application/BottomTab.tsx +0 -65
|
@@ -1,32 +1,146 @@
|
|
|
1
|
-
import React, {useContext, useLayoutEffect} from 'react';
|
|
1
|
+
import React, {useContext, useEffect, useLayoutEffect, useRef} from 'react';
|
|
2
2
|
import {ScreenParams} from './types';
|
|
3
3
|
import Navigation from './Navigation';
|
|
4
|
-
import {ApplicationContext} from './index';
|
|
4
|
+
import {ApplicationContext, MiniAppContext, ScreenContext} from './index';
|
|
5
5
|
import {GridSystem} from '../Layout';
|
|
6
|
+
import {useHeaderHeight} from '@react-navigation/stack';
|
|
7
|
+
import {Alert, InteractionManager} from 'react-native';
|
|
6
8
|
|
|
7
9
|
const StackScreen: React.FC<ScreenParams> = props => {
|
|
8
|
-
const {
|
|
9
|
-
const
|
|
10
|
+
const {theme, showGrid, navigator} = useContext(ApplicationContext);
|
|
11
|
+
const startTime = useRef(Date.now());
|
|
12
|
+
const endTime = useRef(Date.now());
|
|
13
|
+
const timeLoad = useRef(0);
|
|
14
|
+
const timeInteraction = useRef(0);
|
|
15
|
+
const timeoutLoad = useRef<any>();
|
|
16
|
+
const tracked = useRef<any>({
|
|
17
|
+
releaseLoad: undefined,
|
|
18
|
+
releaseInteraction: undefined,
|
|
19
|
+
timeoutLoad: undefined,
|
|
20
|
+
timeoutInteraction: undefined,
|
|
21
|
+
});
|
|
22
|
+
const interaction = useRef<any>();
|
|
23
|
+
const context = useContext<any>(MiniAppContext);
|
|
24
|
+
|
|
25
|
+
const {screen: Component, options, initialParams} = props.route.params;
|
|
10
26
|
const navigation = new Navigation(props.navigation, theme);
|
|
27
|
+
const heightHeader = useHeaderHeight();
|
|
11
28
|
|
|
12
|
-
const
|
|
29
|
+
const data = {
|
|
30
|
+
...initialParams,
|
|
13
31
|
...props.route.params,
|
|
14
32
|
navigation,
|
|
15
33
|
};
|
|
16
34
|
|
|
17
|
-
delete
|
|
35
|
+
delete data.screen;
|
|
36
|
+
delete data.initialParams;
|
|
37
|
+
|
|
38
|
+
const screenName = Component?.name || Component?.type?.name || 'Invalid';
|
|
18
39
|
|
|
40
|
+
/**
|
|
41
|
+
* set options for screen
|
|
42
|
+
*/
|
|
19
43
|
useLayoutEffect(() => {
|
|
20
44
|
if (options) {
|
|
21
45
|
navigation.setOptions(options);
|
|
22
46
|
}
|
|
23
47
|
}, [options]);
|
|
24
48
|
|
|
49
|
+
/**
|
|
50
|
+
* tracking for screen
|
|
51
|
+
*/
|
|
52
|
+
useEffect(() => {
|
|
53
|
+
if (__DEV__ && (!screenName || screenName == 'Invalid')) {
|
|
54
|
+
Alert.alert('Design system', `Unvalidated screen name "${screenName}" !`);
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
navigator?.maxApi?.of?.({screenName});
|
|
58
|
+
tracked.current.timeoutLoad = setTimeout(() => {
|
|
59
|
+
onScreenLoad();
|
|
60
|
+
}, 5000);
|
|
61
|
+
tracked.current.timeoutInteraction = setTimeout(() => {
|
|
62
|
+
onScreenInteraction();
|
|
63
|
+
}, 5000);
|
|
64
|
+
|
|
65
|
+
return () => {
|
|
66
|
+
onScreenLoad();
|
|
67
|
+
onScreenInteraction();
|
|
68
|
+
};
|
|
69
|
+
}, []);
|
|
70
|
+
|
|
71
|
+
/**
|
|
72
|
+
* tracking for screen load
|
|
73
|
+
*/
|
|
74
|
+
const onScreenLoad = () => {
|
|
75
|
+
clearTimeout(tracked.current.timeoutLoad);
|
|
76
|
+
if (!tracked.current?.releaseLoad) {
|
|
77
|
+
context.autoTracking?.({
|
|
78
|
+
appId: context.appId,
|
|
79
|
+
code: context.code,
|
|
80
|
+
buildNumber: context.buildNumber,
|
|
81
|
+
screenName,
|
|
82
|
+
componentName: 'Screen',
|
|
83
|
+
state: 'load',
|
|
84
|
+
duration: timeLoad.current,
|
|
85
|
+
});
|
|
86
|
+
navigator?.maxApi?.showToastDebug?.({
|
|
87
|
+
appId: `auto - ${context.appId}`,
|
|
88
|
+
message: `${screenName} screen_load_time ${timeLoad.current}`,
|
|
89
|
+
});
|
|
90
|
+
tracked.current.releaseLoad = true;
|
|
91
|
+
}
|
|
92
|
+
};
|
|
93
|
+
|
|
94
|
+
/**
|
|
95
|
+
* tracking for screen load
|
|
96
|
+
*/
|
|
97
|
+
const onScreenInteraction = () => {
|
|
98
|
+
clearTimeout(tracked.current.timeoutInteraction);
|
|
99
|
+
if (!tracked.current?.releaseInteraction) {
|
|
100
|
+
context.autoTracking?.({
|
|
101
|
+
appId: context.appId,
|
|
102
|
+
code: context.code,
|
|
103
|
+
buildNumber: context.buildNumber,
|
|
104
|
+
screenName,
|
|
105
|
+
componentName: 'Screen',
|
|
106
|
+
state: 'interaction',
|
|
107
|
+
duration: timeInteraction.current - timeLoad.current,
|
|
108
|
+
});
|
|
109
|
+
|
|
110
|
+
navigator?.maxApi?.showToastDebug?.({
|
|
111
|
+
appId: `auto - ${context.appId}`,
|
|
112
|
+
message: `${screenName} screen_interaction_time ${timeInteraction.current}`,
|
|
113
|
+
});
|
|
114
|
+
tracked.current.releaseInteraction = true;
|
|
115
|
+
}
|
|
116
|
+
};
|
|
117
|
+
|
|
25
118
|
return (
|
|
26
|
-
|
|
27
|
-
|
|
119
|
+
<ScreenContext.Provider
|
|
120
|
+
value={{
|
|
121
|
+
screenName,
|
|
122
|
+
onElementLoad: () => {
|
|
123
|
+
endTime.current = Date.now();
|
|
124
|
+
interaction.current?.cancel?.();
|
|
125
|
+
interaction.current = InteractionManager.runAfterInteractions(() => {
|
|
126
|
+
timeInteraction.current = Date.now() - startTime.current;
|
|
127
|
+
});
|
|
128
|
+
clearTimeout(timeoutLoad.current);
|
|
129
|
+
timeoutLoad.current = setTimeout(() => {
|
|
130
|
+
if (timeLoad.current === 0) {
|
|
131
|
+
timeLoad.current = endTime.current - startTime.current;
|
|
132
|
+
}
|
|
133
|
+
}, 2000);
|
|
134
|
+
},
|
|
135
|
+
}}>
|
|
136
|
+
<Component
|
|
137
|
+
heightHeader={heightHeader}
|
|
138
|
+
{...data}
|
|
139
|
+
onScreenLoad={onScreenLoad}
|
|
140
|
+
onScreenInteraction={onScreenInteraction}
|
|
141
|
+
/>
|
|
28
142
|
{showGrid && <GridSystem />}
|
|
29
|
-
|
|
143
|
+
</ScreenContext.Provider>
|
|
30
144
|
);
|
|
31
145
|
};
|
|
32
146
|
|
package/Application/index.ts
CHANGED
|
@@ -1,24 +1,37 @@
|
|
|
1
|
+
import {Platform} from 'react-native';
|
|
1
2
|
import {NavigationContainer} from './NavigationContainer';
|
|
2
3
|
import Screen from '../Layout/Screen';
|
|
3
4
|
import {
|
|
5
|
+
HeaderAnimated,
|
|
6
|
+
HeaderBackground,
|
|
7
|
+
HeaderCustom,
|
|
4
8
|
HeaderRightAction,
|
|
5
|
-
NavigationButton,
|
|
6
|
-
HeaderToolkitAction,
|
|
7
9
|
HeaderTitle,
|
|
10
|
+
NavigationButton,
|
|
8
11
|
} from './Components';
|
|
9
12
|
import BottomTab from './BottomTab';
|
|
10
13
|
import {createContext} from 'react';
|
|
11
14
|
import {defaultContext} from '../Consts';
|
|
12
15
|
|
|
16
|
+
const Context = createContext({});
|
|
13
17
|
const ApplicationContext = createContext(defaultContext);
|
|
14
18
|
|
|
19
|
+
const MiniAppContext = (Platform as any).MiniAppContext ?? createContext({});
|
|
20
|
+
const ScreenContext = (Platform as any).ScreenContext ?? createContext({});
|
|
21
|
+
const ComponentContext = (Platform as any).ComponentContext ?? Context;
|
|
22
|
+
|
|
15
23
|
export {
|
|
16
|
-
NavigationContainer,
|
|
17
24
|
ApplicationContext,
|
|
25
|
+
MiniAppContext,
|
|
26
|
+
ScreenContext,
|
|
27
|
+
ComponentContext,
|
|
28
|
+
NavigationContainer,
|
|
18
29
|
Screen,
|
|
30
|
+
BottomTab,
|
|
19
31
|
NavigationButton,
|
|
20
|
-
HeaderRightAction,
|
|
21
|
-
HeaderToolkitAction,
|
|
22
32
|
HeaderTitle,
|
|
23
|
-
|
|
33
|
+
HeaderBackground,
|
|
34
|
+
HeaderRightAction,
|
|
35
|
+
HeaderCustom,
|
|
36
|
+
HeaderAnimated,
|
|
24
37
|
};
|
package/Application/types.ts
CHANGED
|
@@ -1,8 +1,9 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import React from 'react';
|
|
3
|
-
import
|
|
1
|
+
import {StackNavigationOptions} from '@react-navigation/stack';
|
|
2
|
+
import React, {ReactElement} from 'react';
|
|
3
|
+
import {Animated, ViewProps} from 'react-native';
|
|
4
4
|
import {PopupNotifyProps} from '../Popup/types';
|
|
5
5
|
import Navigation from './Navigation';
|
|
6
|
+
import Navigator from './Navigator';
|
|
6
7
|
|
|
7
8
|
type Screen = React.ComponentType<NavigationScreenProps>;
|
|
8
9
|
|
|
@@ -62,10 +63,10 @@ export type Theme = {
|
|
|
62
63
|
};
|
|
63
64
|
|
|
64
65
|
export type Context = {
|
|
66
|
+
[key: string]: any;
|
|
65
67
|
theme: Theme;
|
|
66
68
|
navigator?: Navigator;
|
|
67
69
|
showGrid?: boolean;
|
|
68
|
-
language?: 'vi' | 'en';
|
|
69
70
|
translate?: (key: string) => string;
|
|
70
71
|
};
|
|
71
72
|
|
|
@@ -82,8 +83,9 @@ export type NavigationContainerProps = {
|
|
|
82
83
|
screen: Screen;
|
|
83
84
|
options?: NavigationOptions;
|
|
84
85
|
theme: Theme;
|
|
85
|
-
maxApi
|
|
86
|
+
maxApi: any;
|
|
86
87
|
localization?: LocalizationObject;
|
|
88
|
+
initialParams?: any;
|
|
87
89
|
};
|
|
88
90
|
|
|
89
91
|
export type NavigationScreenProps = {
|
|
@@ -98,52 +100,87 @@ export type ScreenParams = {
|
|
|
98
100
|
options?: NavigationOptions;
|
|
99
101
|
};
|
|
100
102
|
|
|
101
|
-
export
|
|
103
|
+
export type ModalParams = {
|
|
102
104
|
[key: string]: any;
|
|
105
|
+
screen: React.ComponentType;
|
|
103
106
|
onDismiss?: () => void;
|
|
104
107
|
barrierDismissible?: boolean;
|
|
105
|
-
}
|
|
108
|
+
};
|
|
106
109
|
|
|
107
|
-
export
|
|
110
|
+
export type BottomSheetParams = {
|
|
108
111
|
[key: string]: any;
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
+
screen: React.ComponentType;
|
|
113
|
+
options: {
|
|
114
|
+
title: string;
|
|
115
|
+
surface?: boolean;
|
|
116
|
+
};
|
|
117
|
+
surface?: boolean;
|
|
118
|
+
onDismiss?: (type?: string) => void;
|
|
119
|
+
barrierDismissible?: boolean;
|
|
120
|
+
draggable?: boolean;
|
|
121
|
+
useBottomInset?: boolean;
|
|
122
|
+
keyboardVerticalOffset?: number;
|
|
123
|
+
};
|
|
112
124
|
|
|
113
125
|
export type NavigationButtonProps = {
|
|
114
126
|
icon: string;
|
|
115
127
|
tintColor?: string;
|
|
116
|
-
backgroundColor?: string;
|
|
117
128
|
useBorder?: boolean;
|
|
118
129
|
onPress: () => void;
|
|
130
|
+
badgeType?: 'dot' | 'number';
|
|
131
|
+
badgeValue?: number;
|
|
119
132
|
accessibilityLabel?: string;
|
|
120
133
|
};
|
|
121
134
|
|
|
122
|
-
export type
|
|
135
|
+
export type PinnedToolType = {
|
|
136
|
+
key: string;
|
|
137
|
+
badgeValue?: number;
|
|
138
|
+
badgeType?: 'number' | 'dot';
|
|
139
|
+
};
|
|
140
|
+
|
|
141
|
+
export type RuntimeToolType = {
|
|
142
|
+
title: {vi: string; en: string};
|
|
143
|
+
icon: string;
|
|
144
|
+
key: string;
|
|
145
|
+
};
|
|
146
|
+
|
|
147
|
+
export interface NavigationOptions
|
|
148
|
+
extends Omit<StackNavigationOptions, 'headerRight'> {
|
|
123
149
|
preventBack?: PopupNotifyProps;
|
|
124
150
|
onPressLeftHeader?: () => void;
|
|
125
151
|
surface?: boolean;
|
|
126
|
-
headerTransparent?: boolean;
|
|
127
152
|
hiddenBack?: boolean;
|
|
128
|
-
title?: string;
|
|
129
|
-
headerTitle?: (props?: any) => React.ReactElement;
|
|
130
|
-
headerTitleAlign?: 'left' | 'center';
|
|
131
153
|
customTitle?: TitleCustomProps;
|
|
132
|
-
headerRight?:
|
|
133
|
-
|
|
154
|
+
headerRight?: HeaderRightToolkit | HeaderRightActions | Element;
|
|
155
|
+
}
|
|
156
|
+
|
|
157
|
+
export type HeaderRightToolkit = {
|
|
158
|
+
type?: 'toolkit';
|
|
159
|
+
pinnedTool?: PinnedToolType;
|
|
160
|
+
runtimeTools?: RuntimeToolType[];
|
|
161
|
+
preventClose?: PopupNotifyProps;
|
|
162
|
+
useMore?: boolean;
|
|
163
|
+
};
|
|
164
|
+
|
|
165
|
+
export type HeaderRightActions = {
|
|
166
|
+
type?: 'iconButton';
|
|
167
|
+
buttons: IconButton[];
|
|
168
|
+
};
|
|
169
|
+
|
|
170
|
+
export type IconButton = {
|
|
171
|
+
icon: string;
|
|
172
|
+
onPress: () => void;
|
|
134
173
|
};
|
|
135
174
|
|
|
136
175
|
export interface HeaderBackProps extends NavigationButtonProps {
|
|
137
176
|
preventBack?: PopupNotifyProps;
|
|
138
177
|
onPressLeftHeader?: () => void;
|
|
139
|
-
accessibilityLabel?: string;
|
|
140
178
|
}
|
|
141
179
|
|
|
142
180
|
export type HeaderBackgroundProps = {
|
|
143
181
|
image?: string | null;
|
|
144
|
-
backgroundColor?: string | null;
|
|
145
182
|
animatedValue?: Animated.Value;
|
|
146
|
-
|
|
183
|
+
useSurface?: boolean;
|
|
147
184
|
};
|
|
148
185
|
|
|
149
186
|
export type TitleCustomProps = {
|
|
@@ -159,26 +196,46 @@ export type TitleCustomProps = {
|
|
|
159
196
|
export type HeaderToolkitProps = {
|
|
160
197
|
[key: string]: any;
|
|
161
198
|
appCode: string;
|
|
162
|
-
|
|
163
|
-
type: string;
|
|
164
|
-
onAction?: (action: string) => void;
|
|
199
|
+
configs: any[];
|
|
165
200
|
};
|
|
166
201
|
|
|
202
|
+
export interface HeaderAnimatedProps extends ViewProps {
|
|
203
|
+
animatedValue: Animated.Value;
|
|
204
|
+
image: string;
|
|
205
|
+
}
|
|
206
|
+
|
|
167
207
|
export type BottomTabItemProps = {
|
|
168
208
|
name: string;
|
|
169
209
|
label: string;
|
|
170
210
|
icon: string;
|
|
171
211
|
showDot?: boolean;
|
|
172
|
-
badgeLabel?: string;
|
|
212
|
+
badgeLabel?: string | number;
|
|
173
213
|
screen: Screen;
|
|
174
214
|
options: NavigationOptions;
|
|
215
|
+
initialParams?: any;
|
|
175
216
|
};
|
|
176
217
|
|
|
177
218
|
export type BottomTabProps = {
|
|
219
|
+
nested?: boolean;
|
|
178
220
|
tabs: BottomTabItemProps[];
|
|
221
|
+
initialRouteName?: string;
|
|
179
222
|
navigation: Navigation;
|
|
180
223
|
listeners?: {
|
|
181
224
|
tabPress?: any;
|
|
182
225
|
focus?: any;
|
|
183
226
|
};
|
|
227
|
+
floatingButton?: FloatingButtonProps;
|
|
228
|
+
};
|
|
229
|
+
|
|
230
|
+
export type FloatingButtonProps = {
|
|
231
|
+
container?: React.ReactNode;
|
|
232
|
+
icon: string | React.ReactNode;
|
|
233
|
+
label: string;
|
|
234
|
+
onPress: () => void;
|
|
235
|
+
};
|
|
236
|
+
|
|
237
|
+
export type AnimatedHeader = {
|
|
238
|
+
type: 'default' | 'surface';
|
|
239
|
+
component?: (props?: any) => React.ReactElement;
|
|
240
|
+
headerTitle?: (props?: any) => React.ReactElement;
|
|
184
241
|
};
|
package/Application/utils.tsx
CHANGED
|
@@ -13,39 +13,37 @@ import {
|
|
|
13
13
|
import {NavigationOptions, Theme} from './types';
|
|
14
14
|
import {Colors} from '../Consts';
|
|
15
15
|
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
};
|
|
21
|
-
}
|
|
22
|
-
return {
|
|
23
|
-
headerTintColor: theme.colors.text.default,
|
|
24
|
-
};
|
|
25
|
-
};
|
|
26
|
-
|
|
27
|
-
const getStackOptions = (theme: Theme): StackNavigationOptions => {
|
|
16
|
+
/**
|
|
17
|
+
* default options for stack screen
|
|
18
|
+
*/
|
|
19
|
+
const getStackOptions = (): StackNavigationOptions => {
|
|
28
20
|
return {
|
|
29
21
|
headerTitleAlign: 'left',
|
|
30
22
|
headerTitle: HeaderTitle,
|
|
31
|
-
headerBackground: HeaderBackground
|
|
23
|
+
headerBackground: (props: any) => <HeaderBackground {...props} />,
|
|
32
24
|
headerLeft: (props: any) => <HeaderLeft {...props} />,
|
|
33
25
|
headerRight: (props: any) => <HeaderToolkitAction {...props} />,
|
|
34
|
-
|
|
26
|
+
headerTintColor: Colors.black_01,
|
|
35
27
|
};
|
|
36
28
|
};
|
|
37
29
|
|
|
38
|
-
|
|
30
|
+
/**
|
|
31
|
+
* default options for dialog screen
|
|
32
|
+
*/
|
|
33
|
+
const getDialogOptions = (): StackNavigationOptions => {
|
|
39
34
|
return {
|
|
40
35
|
headerTitleAlign: 'left',
|
|
41
36
|
headerTitle: HeaderTitle,
|
|
42
37
|
headerLeft: (props: any) => <HeaderLeft {...props} />,
|
|
43
|
-
headerBackground: HeaderBackground
|
|
44
|
-
|
|
38
|
+
headerBackground: (props: any) => <HeaderBackground {...props} />,
|
|
39
|
+
headerTintColor: Colors.black_01,
|
|
45
40
|
...TransitionPresets.ModalTransition,
|
|
46
41
|
};
|
|
47
42
|
};
|
|
48
43
|
|
|
44
|
+
/**
|
|
45
|
+
* default options for modal screen
|
|
46
|
+
*/
|
|
49
47
|
const getModalOptions = (): StackNavigationOptions => {
|
|
50
48
|
return {
|
|
51
49
|
headerShown: false,
|
|
@@ -71,9 +69,10 @@ const getModalOptions = (): StackNavigationOptions => {
|
|
|
71
69
|
};
|
|
72
70
|
};
|
|
73
71
|
|
|
72
|
+
/**
|
|
73
|
+
* build react-navigation options
|
|
74
|
+
*/
|
|
74
75
|
const getOptions = (params: NavigationOptions, theme: Theme) => {
|
|
75
|
-
let backgroundProps: any;
|
|
76
|
-
let titleProps: any;
|
|
77
76
|
let options = {};
|
|
78
77
|
|
|
79
78
|
if (
|
|
@@ -95,40 +94,24 @@ const getOptions = (params: NavigationOptions, theme: Theme) => {
|
|
|
95
94
|
};
|
|
96
95
|
}
|
|
97
96
|
|
|
98
|
-
if (typeof params.surface
|
|
97
|
+
if (typeof params.surface === 'boolean') {
|
|
99
98
|
if (params.surface) {
|
|
100
99
|
options = {
|
|
101
100
|
...options,
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
};
|
|
107
|
-
backgroundProps = {
|
|
108
|
-
image: null,
|
|
109
|
-
backgroundColor: theme.colors.background.surface,
|
|
110
|
-
useBorder: true,
|
|
101
|
+
headerTintColor: theme.colors.text.default,
|
|
102
|
+
headerBackground: () => (
|
|
103
|
+
<HeaderBackground image={null} useSurface={true} />
|
|
104
|
+
),
|
|
111
105
|
};
|
|
112
106
|
} else {
|
|
113
107
|
options = {
|
|
114
108
|
...options,
|
|
115
|
-
|
|
109
|
+
headerTintColor: Colors.black_01,
|
|
116
110
|
headerBackground: HeaderBackground,
|
|
117
111
|
};
|
|
118
112
|
}
|
|
119
113
|
}
|
|
120
114
|
|
|
121
|
-
if (params.animatedValue) {
|
|
122
|
-
backgroundProps = {...backgroundProps, animatedValue: params.animatedValue};
|
|
123
|
-
titleProps = {animatedValue: params.animatedValue};
|
|
124
|
-
options = {
|
|
125
|
-
...options,
|
|
126
|
-
headerTitle: (props: any) => {
|
|
127
|
-
return <HeaderTitle {...titleProps} {...props} />;
|
|
128
|
-
},
|
|
129
|
-
};
|
|
130
|
-
}
|
|
131
|
-
|
|
132
115
|
if (params.customTitle) {
|
|
133
116
|
options = {
|
|
134
117
|
...options,
|
|
@@ -139,17 +122,23 @@ const getOptions = (params: NavigationOptions, theme: Theme) => {
|
|
|
139
122
|
};
|
|
140
123
|
}
|
|
141
124
|
|
|
142
|
-
if (backgroundProps) {
|
|
143
|
-
options = {
|
|
144
|
-
...options,
|
|
145
|
-
headerBackground: () => <HeaderBackground {...backgroundProps} />,
|
|
146
|
-
};
|
|
147
|
-
}
|
|
148
|
-
|
|
149
125
|
return {
|
|
150
126
|
...params,
|
|
151
127
|
...options,
|
|
152
128
|
};
|
|
153
129
|
};
|
|
154
130
|
|
|
155
|
-
|
|
131
|
+
const formatNameLength = (name = '') => {
|
|
132
|
+
let formattedName = name;
|
|
133
|
+
if (formattedName.length > 100) {
|
|
134
|
+
formattedName = formattedName.substring(0, 100);
|
|
135
|
+
}
|
|
136
|
+
return formattedName;
|
|
137
|
+
};
|
|
138
|
+
export {
|
|
139
|
+
getStackOptions,
|
|
140
|
+
getDialogOptions,
|
|
141
|
+
getModalOptions,
|
|
142
|
+
getOptions,
|
|
143
|
+
formatNameLength,
|
|
144
|
+
};
|
package/Assets/icon.json
CHANGED
|
@@ -801,7 +801,7 @@
|
|
|
801
801
|
"uri": "https://img.mservice.com.vn/app/img/kits/navigation_minus_circle_full.png"
|
|
802
802
|
},
|
|
803
803
|
"navigation_more_horiz": {
|
|
804
|
-
"uri": "
|
|
804
|
+
"uri": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAIAAAACACAYAAADDPmHLAAAAAXNSR0IArs4c6QAAAERlWElmTU0AKgAAAAgAAYdpAAQAAAABAAAAGgAAAAAAA6ABAAMAAAABAAEAAKACAAQAAAABAAAAgKADAAQAAAABAAAAgAAAAABIjgR3AAAFAklEQVR4Ae2aS4tcRRiGM2rEO14SY7wFURGc+CPEyyYJLnSlaCCKLgSzUNBNRAMSF0LIRhGDBMQQMAQ3Zin+A/VHKOIlTm4aJ5fx+VBCT5Puru9UleOE54OX7nO66n2rnj7dp+ucXrPGkoAEJCABCUhAAhKQgAQkIAEJSEACEpCABCQgAQlIQAISkIAEJCABCUhAAhKQgAQkIAEJSEACEpCABCQgAQlIQAISkIAEJCABCUhAAhKQgAQkIAEJSEACEpCABCQgAQlIQAISkIAEJCABCUhAAhKQgAQkIAEJSEACEpCABCQgAQlIQAISkIAEJCABCUhAAhLoTmCue8JYwNLS0m3s2ooeQXeiJfQj+h59NTc39zuP3Yr89ZhH/mYU+RdQ5H+HIn+Bx25F/u2YR/48ivzzKPK/RUfJP87j5VdM/EH0BTqHJtVZXjiI7mtNAM+H0BF0Hk2qyP8MbeqQ/zC+X6Jp+Yu8fgDd2zp/Rf2Y0E4UcEvrLxq+3GrQeL2OMvlnaL+jYf6b+E078Hl5Wf3J1gut8lfUh4nsWza13Mae2sET92Euclnr3Q3yP1nmmNvYVZu/ov2Z62u5+V6y9UtDJ4FbfPJra3tF/lu14fR/dmj+ivZj4A+gOKfVVnwd3pOdDH3inJ/52p80ztO8sHFA/jz9pp3vJ+WN7z/Jjvjh2KWu6OL6j+l7PKxt4H8NHu8O8InTx1UD+o13uY4d74zvLNh+nzYt+N6Az9sFeYOadFkGcsTewmh+Ri3egJjYGbSOJdLp2JhV5MdS7yfU4g2IuMiN/BjHzCI/vjF+QK34nsBrPfmLM8OTDVoBGo/dwo5Wb354x7fAk/GksGKd3XJu1+P3eGF2NNuGWr354XcTejSetK6WkEbHFhdZWlfGM9O2dJwZz0zbHvmlnk0/JaOhcYWrdWU8M21Lx5nxzLTtkV/q2e0AiMurrSvjmWlbOs6MZ6Ztj/xSz24HQFzbbl0Zz0zb0nFmPDNte+SXenY7AOLGSuvKeGbalo4z45lp2yO/1LPpL9WLoSyDbmTjV3T1xZ11T7LLsJuJ+wW1WomklmHMfx3ZsQy9ErWoY5hsYBl4roXZqEeXVQADPUnI56NBlc8PlK7BI4e2Czwcqswc7f4pnoujO6Y9p20c/IentUm+th/P5m9+cgy55nwK7kZ/oNo6gUH6Uih9NqG4q1dbCxjEfxhSRZ/7UYtL4b/hE99oq68Y+POopi7Q+ZmhM6fvjppw+kb+UxX5r1Tmx72EuKi2eosJ7BoIIeC/UTtzPHZX5O9skL9nYH68+a/W5v8v+jOR59CpBIjjtH261eDx2o7irl5pxdf+4E/++LjxehFlTofHaL913GdVbzOhO9BHKG5vTqo438cfSOJmTtPCcyP6GE07EOPA24vS5/xZg8XzLrQfTTsQ48D7AN06y6/V6y1vWBSNicnFjZ3H0KX+FPp15td2UeBYo3/z48bOZhSXbOOqXVy4ibX7N/9B/rXkPIHmUeSP/ik08s+yz5KABCQgAQlIQAISkIAEJCABCUhAAhKQgAQkIAEJSEACEpCABCQgAQlIQAISkIAEJCABCUhAAhKQgAQkIAEJSEACEpCABCQgAQlIQAISkIAEJCABCUhAAhKQgAQkIAEJSEACEpCABCQgAQlIQAISkIAEJCABCUhAAhKQgAQkIAEJSEACEpCABCQgAQlIQAISuJwI/A2lzL3lHltsxwAAAABJRU5ErkJggg=="
|
|
805
805
|
},
|
|
806
806
|
"navigation_more_vert": {
|
|
807
807
|
"uri": "https://img.mservice.com.vn/app/img/kits/navigation_more_vert.png"
|
|
@@ -822,7 +822,7 @@
|
|
|
822
822
|
"uri": "https://img.mservice.com.vn/app/img/kits/navigation_scan.png"
|
|
823
823
|
},
|
|
824
824
|
"navigation_search": {
|
|
825
|
-
"uri": "
|
|
825
|
+
"uri": "data:image/webp;base64,UklGRqwEAABXRUJQVlA4TKAEAAAvf8AfEDVIchtJkqT6/6fZ21hkukWeZouKkARJtmlbtm3btm3b741sjWzbtm3btm184xkLgiS5cZsGUuXbsJOAoPSD88dlwMVKiDwdxtRJ4UUP+XlwcpVn1A0I4dWOVnEMET7n62avxi24FD4tSyT9AJCpq/YI7oQjYZj3Bp2zU3A/dBDfF0y+bsBMGCK3KTpOwFyoR70h9Nreo+EvXyi7Ye4vmA7TaLcCQy4ohB90NoLaKqiEL1HbwOH84sdyqk+aQC5smHLkKViZWT8vXlACZQ/EfAcXOJa5bPO4uGm51A91wtzix3+w5I88UhfXAw5GL6Rh6Bvcu77smyD4N4okpNkXWIVGSPVXWz7DqyjYN+vEa3yZctrvunwjw9gGSmW3/EXx6ZILFiTM/BYx2FjwRqzabUHmhe1UtXBWS4RTBMW1xt/MLYm5eiGKXqSGnsX3ZwPNaMUsvYMYtGoL/eIymuGauS66JIzSmOMkP4NE9z9GeAdfELGdrxqK0cgj0sqM6Sa/a6NuxI5BCrENnHO763RvvF7jUlV4B8hOY7PHVvq/EQNSCJpHAyS1AQaWs8QZxHGq40oLu9a32IIU5Mc3dx7z76wGipNE0TT28W8WfnHd4hSrhz5MTSKvuW7C9q931W1Cqjo3KK/1Xpxx0ThVVBKTtWVLZhdU/9P8A3OUvIRheXDUmz4AwVFp0fKJsExgwmKUm8BJe26nmggb7XqpWr1t6BK1k7Al0togegyMTiKcCKjv2xwFliaRT7jUWQ3slyZeNnUmAjeTGCdM6wylAzGTqCcc68wGLieRSnjW2QrsjY6sieA6V4Hl0Q1noqx+xM5Xp4NC9hqYbcPXOgJiJ/CzjVmrg2pN5eIsk5YwGiUu4VZmI0E3imGipQtpeqS7Mwqhz7RnhlvFBQTahwu2nArmUGUm4TVMUmKkCRtIMA4jDVIQKpKX2Bov2XGiuQeVl+ahH2HxCD/eGhmpdp/ox2GOV4234PWe6CtUrTMmu9LIaxIkDAqIR75jqOAH4qMhdie299sGnAIaPkDeczWQe8fQNv/F4fAbJLZLZz/U5xQ9DaGDWLMvMq1zLv7mZDl8xMkgiGTU+gbfzDvX0csGFiceYNdAMQ1yyD1zz3AAMsrFdQOtHyCHUcRTb+Q3yBR2z/X7Wp3uxDvS7vj6AAtEu4OTKLAIr2Jg3W/2JsEyXGPrphKwCmds770kKhnewXuzhKITLMMJJ9iXYZX3vdBvlzANg3X4p5wK1CsjLpcfQ96OCV0juBL+6xVIFd2vawEMvEyl2fg+47xrQpIDroZHR1ZNGDJry5VPMBCusXZfjI83cDf2T2JOCxQSdb1VItAwzelXs8e2Vx5ajif5kvHVGvZLGMI9jrH9PWfsmAepWH9mLrH4mrJ2zYNAkLO7fOpjCHHRirfLA5G8In9usCX8x/Zm8zwHOnnhJr1d4E47rx9b24ncI2ARZClMrVFL9t344dKeZb1yBDL6ua+byl1jLl39vktXq8Ty/ET6+NRwHp84H59sXghPT24vhKcnqRfCw9MetPPs9EHyhfDUQKrhx2WS58GBkw030p/3/nUYBw=="
|
|
826
826
|
},
|
|
827
827
|
"navigation_search_add": {
|
|
828
828
|
"uri": "https://img.mservice.com.vn/app/img/kits/navigation_search_add.png"
|
|
@@ -2640,7 +2640,7 @@
|
|
|
2640
2640
|
"uri": "https://img.mservice.io/momo_app_v2/new_version/img/appx_icon/16_navigation_close_circle_full.png"
|
|
2641
2641
|
},
|
|
2642
2642
|
"16_navigation_close_circle": {
|
|
2643
|
-
"uri": "
|
|
2643
|
+
"uri": "data:image/webp;base64,UklGRkICAABXRUJQVlA4TDUCAAAvP8APEM8x//M//wzbRlKcvMws3D1DYBwIAASMF4YAQCHQAAED7AAg8AMYB0DhQCMgGAnwAARuAAHcAABsSCQMYAgFAFIhSQDYtJHKzMzMzB3//2mWbdmahaMVR/QfgiS5cZsB4DskKoXzC7H/FklUBov99fENkd/zoJJwTKqzegmDvEIn5Y706CFQEo3Y0dm9m0AL9yIHNC/CSkLTlvhY5+N50q2XslGo+8lZ5w3HrchshMJhWGStRMGrHm0yFuSOArKtYpyqbhWnjgFvdw84tbF+RSfo1x2rGeX1LBlDS5gpLyPcafAvfvoxK4kC/IM4BnjRsxGzFB/gPZh4g6+tjdnDl+b4S1wAfXYgEQzghIkePM1NYsHDeqZUvYFbk24I4NJbWs9ISFqqG+X5NG/Ch3lZE3/AyZG+zjxAtGvs4/27pid6e//R6A6UkZSOjpBUVebCSzWZ93NNCgE3g441SFVWmQqoJvNB4xhI4pXu5JdkqKHwVtRgnNcQQClNmP4P2kJRU9XghLaMAE8qKgNQpphRijTms2SgspRMGKlI44lkqbKXdBmpSOOuJKhcJXVGKtI4SK4qD0mJEWphHEDkqnwlWcYo3jgrCfTQv6H/Cf1B5HG7+D15UyHLW3zdyDurG+R1i75u0tdtRN9o2/SNAqZv0Pct8r5J37fJ5wbyuYV+biKf22znxpb93Eg+t5LPzeRzO/XeQL63UO9NLve2tXlvW4eU672xOliqe+NywInY/4owAA=="
|
|
2644
2644
|
},
|
|
2645
2645
|
"16_navigation_close": {
|
|
2646
2646
|
"uri": "https://img.mservice.io/momo_app_v2/new_version/img/appx_icon/16_navigation_close.png"
|
|
@@ -3918,7 +3918,7 @@
|
|
|
3918
3918
|
"uri": "https://img.mservice.com.vn/app/img/kits/Phonebook-outline.png"
|
|
3919
3919
|
},
|
|
3920
3920
|
"ic_back": {
|
|
3921
|
-
"uri": "
|
|
3921
|
+
"uri": "data:image/webp;base64,UklGRqIBAABXRUJQVlA4TJYBAAAvX8AXEFVActtIkjT//zRn9WzKYwOJRgQkAADLRtvOtm3btm3b9r1svWzbtm3btu27OHIkN26abK9JbpFIPuE+bAQmFS5c6qcQhrE34CPEZKHr9/kJf0SiUPENfAnNTcj4eH7FaRKiXoGBmyJ4PQILPUGwuwUmtHpgdLFV0RO1461eyDmQ2tsahZYTgY2tGZg54VjcWoabE4aprU1EOaEa3tpHnhOS7q1TNDkhaN66wpQTnKqtOxw5QRVsPeHvLRfSt16J9ZS49UGup/Ctb+o9BW790u/JbeufZU82/jecggWWvy3fnrT8bAX1pORrK7YnKe9byT1RetrKAe2hcqsM7PZwMVEP/h5A/Eb52039I3LfPlL/IUkvkHvA/7q+Lgm+t76u8ikm2/q+cC/37/e1/L5cTGHf1xUH1EX5ui4IqMLv69ID6up4X+AS01se0Ncc0Jcd0Ffm++JgIvxBX9+fS/TnKsHE8O1cqD/XKia+b+Zy/bniAXPRZlAd5ZjmA+bS1WDq51MVI+R2A4tKRx51UL6PD3EB"
|
|
3922
3922
|
},
|
|
3923
3923
|
"share": {
|
|
3924
3924
|
"uri": "https://img.mservice.com.vn/app/img/mini-app-center/share.png"
|
|
@@ -3936,7 +3936,7 @@
|
|
|
3936
3936
|
"uri": "https://img.mservice.com.vn/app/img/kits/error_mess_icon.png"
|
|
3937
3937
|
},
|
|
3938
3938
|
"media_fail": {
|
|
3939
|
-
"uri": "
|
|
3939
|
+
"uri": "data:image/png;base64,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"
|
|
3940
3940
|
},
|
|
3941
3941
|
"ic_checked": {
|
|
3942
3942
|
"uri": "https://img.mservice.com.vn/app/img/kits/checked_ic.png"
|
|
@@ -3949,5 +3949,83 @@
|
|
|
3949
3949
|
},
|
|
3950
3950
|
"ic_money_bag": {
|
|
3951
3951
|
"uri": "https://static.momocdn.net/app/img/kits/ic_money_bag.png"
|
|
3952
|
+
},
|
|
3953
|
+
"basic_flaged": {
|
|
3954
|
+
"uri": "https://static.momocdn.net/app/img/kits/basic_flaged.png"
|
|
3955
|
+
},
|
|
3956
|
+
"basic_user": {
|
|
3957
|
+
"uri": "https://static.momocdn.net/app/img/kits/basic_user.png"
|
|
3958
|
+
},
|
|
3959
|
+
"media_player_play_not": {
|
|
3960
|
+
"uri": "https://static.momocdn.net/app/img/kits/media_player_play_not.png"
|
|
3961
|
+
},
|
|
3962
|
+
"navigation_AR": {
|
|
3963
|
+
"uri": "https://static.momocdn.net/app/img/kits/navigation_AR.png"
|
|
3964
|
+
},
|
|
3965
|
+
"navigation_scan_barcode": {
|
|
3966
|
+
"uri": "https://static.momocdn.net/app/img/kits/navigation_scan_barcode.png"
|
|
3967
|
+
},
|
|
3968
|
+
"notifications_follow": {
|
|
3969
|
+
"uri": "https://static.momocdn.net/app/img/kits/notifications_follow.png"
|
|
3970
|
+
},
|
|
3971
|
+
"notifications_followed": {
|
|
3972
|
+
"uri": "https://static.momocdn.net/app/img/kits/notifications_followed.png"
|
|
3973
|
+
},
|
|
3974
|
+
"notifications_unfollow": {
|
|
3975
|
+
"uri": "https://static.momocdn.net/app/img/kits/notifications_unfollow.png"
|
|
3976
|
+
},
|
|
3977
|
+
"reaction_disliked": {
|
|
3978
|
+
"uri": "https://static.momocdn.net/app/img/kits/reaction_disliked.png"
|
|
3979
|
+
},
|
|
3980
|
+
"reaction_liked": {
|
|
3981
|
+
"uri": "https://static.momocdn.net/app/img/kits/reaction_liked.png"
|
|
3982
|
+
},
|
|
3983
|
+
"travel_247": {
|
|
3984
|
+
"uri": "https://static.momocdn.net/app/img/kits/travel_247.png"
|
|
3985
|
+
},
|
|
3986
|
+
"travel_children_area": {
|
|
3987
|
+
"uri": "https://static.momocdn.net/app/img/kits/travel_children_area.png"
|
|
3988
|
+
},
|
|
3989
|
+
"travel_cooker": {
|
|
3990
|
+
"uri": "https://static.momocdn.net/app/img/kits/travel_cooker.png"
|
|
3991
|
+
},
|
|
3992
|
+
"travel_dishwasher": {
|
|
3993
|
+
"uri": "https://static.momocdn.net/app/img/kits/travel_dishwasher.png"
|
|
3994
|
+
},
|
|
3995
|
+
"travel_electronic_stove": {
|
|
3996
|
+
"uri": "https://static.momocdn.net/app/img/kits/travel_electronic_stove.png"
|
|
3997
|
+
},
|
|
3998
|
+
"travel_friend_group": {
|
|
3999
|
+
"uri": "https://static.momocdn.net/app/img/kits/travel_friend_group.png"
|
|
4000
|
+
},
|
|
4001
|
+
"travel_gas_stove": {
|
|
4002
|
+
"uri": "https://static.momocdn.net/app/img/kits/travel_gas_stove.png"
|
|
4003
|
+
},
|
|
4004
|
+
"travel_kid_area": {
|
|
4005
|
+
"uri": "https://static.momocdn.net/app/img/kits/travel_kid_area.png"
|
|
4006
|
+
},
|
|
4007
|
+
"travel_led_Light": {
|
|
4008
|
+
"uri": "https://static.momocdn.net/app/img/kits/travel_led_Light.png"
|
|
4009
|
+
},
|
|
4010
|
+
"travel_light": {
|
|
4011
|
+
"uri": "https://static.momocdn.net/app/img/kits/travel_light.png"
|
|
4012
|
+
},
|
|
4013
|
+
"travel_music": {
|
|
4014
|
+
"uri": "https://static.momocdn.net/app/img/kits/travel_music.png"
|
|
4015
|
+
},
|
|
4016
|
+
"travel_outdoor_table": {
|
|
4017
|
+
"uri": "https://static.momocdn.net/app/img/kits/travel_outdoor_table.png"
|
|
4018
|
+
},
|
|
4019
|
+
"travel_private_room": {
|
|
4020
|
+
"uri": "https://static.momocdn.net/app/img/kits/travel_private_room.png"
|
|
4021
|
+
},
|
|
4022
|
+
"travel_romantic": {
|
|
4023
|
+
"uri": "https://static.momocdn.net/app/img/kits/travel_romantic.png"
|
|
4024
|
+
},
|
|
4025
|
+
"travel_smoking": {
|
|
4026
|
+
"uri": "https://static.momocdn.net/app/img/kits/travel_smoking.png"
|
|
4027
|
+
},
|
|
4028
|
+
"travel_suitcase": {
|
|
4029
|
+
"uri": "https://static.momocdn.net/app/img/kits/travel_suitcase.png"
|
|
3952
4030
|
}
|
|
3953
4031
|
}
|