@momo-kits/foundation 0.162.2-beta.21 → 0.162.2-rn.86.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.
@@ -255,7 +255,7 @@ const BottomSheet: React.FC<BottomSheetParams> = props => {
255
255
  onRequestClose={() => {
256
256
  onDismiss();
257
257
  }}
258
- style={StyleSheet.absoluteFillObject}
258
+ style={StyleSheet.absoluteFill}
259
259
  isModalKit={true}
260
260
  >
261
261
  <KeyboardAvoidingView
@@ -269,7 +269,7 @@ const BottomSheet: React.FC<BottomSheetParams> = props => {
269
269
  style={styles.container}
270
270
  >
271
271
  <Pressable
272
- style={StyleSheet.absoluteFillObject}
272
+ style={StyleSheet.absoluteFill}
273
273
  onPress={() => {
274
274
  action.current = 'touch';
275
275
  onDismiss();
@@ -128,7 +128,7 @@ const Modal: React.FC<ModalParams> = props => {
128
128
  transparent
129
129
  visible={true}
130
130
  onRequestClose={onDismiss}
131
- style={StyleSheet.absoluteFillObject}
131
+ style={StyleSheet.absoluteFill}
132
132
  isModalKit={true}
133
133
  >
134
134
  <KeyboardAvoidingView
@@ -136,7 +136,7 @@ const Modal: React.FC<ModalParams> = props => {
136
136
  behavior={Platform.OS === 'ios' ? 'padding' : undefined}
137
137
  >
138
138
  <Pressable
139
- style={StyleSheet.absoluteFillObject}
139
+ style={StyleSheet.absoluteFill}
140
140
  onPress={() => onDismiss(undefined, barrierDismissible)}
141
141
  >
142
142
  <Animated.View style={[styles.overlayContent, { opacity }]} />
@@ -16,7 +16,6 @@ import { DeviceEventEmitter } from 'react-native';
16
16
  import StackScreen from './StackScreen';
17
17
  import ModalScreen from './ModalScreen';
18
18
  import Navigator from './Navigator';
19
- import ScaleSizeProvider from './ScaleSizeProvider';
20
19
  import { getModalOptions, getStackOptions } from './utils';
21
20
  import { NavigationContainerProps } from './types';
22
21
  import { ApplicationContext, MiniAppContext } from '../Context';
@@ -65,17 +64,15 @@ const NavigationContainer: React.FC<NavigationContainerProps> = ({
65
64
  return (
66
65
  <SafeAreaProvider>
67
66
  <MiniAppContext.Provider value={mergedContext}>
68
- <ScaleSizeProvider scaleSizeMaxRate={mergedContext?.scaleSizeMaxRate}>
69
- <Navigation
70
- screen={screen}
71
- theme={theme}
72
- options={options}
73
- maxApi={maxApi}
74
- setCurrentContext={setCurrentContext}
75
- initialParams={initialParams}
76
- localize={localize}
77
- />
78
- </ScaleSizeProvider>
67
+ <Navigation
68
+ screen={screen}
69
+ theme={theme}
70
+ options={options}
71
+ maxApi={maxApi}
72
+ setCurrentContext={setCurrentContext}
73
+ initialParams={initialParams}
74
+ localize={localize}
75
+ />
79
76
  </MiniAppContext.Provider>
80
77
  </SafeAreaProvider>
81
78
  );
@@ -315,6 +315,7 @@ const StackScreen: React.FC<any> = props => {
315
315
  <ScreenContext.Provider
316
316
  value={{
317
317
  screenName,
318
+ bottomTab: !!bottomTab,
318
319
  onElementLoad: (item: any) => {
319
320
  /**
320
321
  * widget handle
@@ -81,12 +81,9 @@ const WidgetContainer: React.FC<WidgetContainerProps> = ({
81
81
  };
82
82
 
83
83
  return (
84
- <View style={{ height: height ?? '100%', minHeight:1 }}>
84
+ <View style={{ height: height ?? '100%', minHeight: 1 }}>
85
85
  <SafeAreaProvider>
86
86
  <MiniAppContext.Provider value={mergedContext}>
87
- <ScaleSizeProvider
88
- scaleSizeMaxRate={mergedContext?.scaleSizeMaxRate}
89
- >
90
87
  <ApplicationContext.Provider
91
88
  value={{
92
89
  navigator: navigator.current,
@@ -164,7 +161,6 @@ const WidgetContainer: React.FC<WidgetContainerProps> = ({
164
161
  </ReactNavigationContainer>
165
162
  </NavigationIndependentTree>
166
163
  </ApplicationContext.Provider>
167
- </ScaleSizeProvider>
168
164
  </MiniAppContext.Provider>
169
165
  </SafeAreaProvider>
170
166
  </View>
package/Divider/index.tsx CHANGED
@@ -1,5 +1,5 @@
1
1
  import React, { useContext } from 'react';
2
- import { View, ViewStyle } from 'react-native';
2
+ import { StyleProp, View, ViewStyle } from 'react-native';
3
3
  import { ApplicationContext } from '../Context';
4
4
  import { Spacing } from '../Consts';
5
5
  import { DashDivider } from './DashDivider';
@@ -8,7 +8,7 @@ export interface DividerProps {
8
8
  /**
9
9
  * Custom styles for divider
10
10
  */
11
- style?: ViewStyle;
11
+ style?: StyleProp<ViewStyle>;
12
12
 
13
13
  /**
14
14
  * Enable margin vertical 4px
@@ -30,13 +30,13 @@ const Divider: React.FC<DividerProps> = ({
30
30
  return (
31
31
  <View
32
32
  style={[
33
- style,
34
33
  {
35
34
  height: 1,
36
35
  width: '100%',
37
36
  backgroundColor: theme.colors.border.default,
38
37
  marginVertical: useMargin ? Spacing.XS : 0,
39
38
  },
39
+ style,
40
40
  ]}
41
41
  />
42
42
  );
@@ -28,7 +28,12 @@ export interface IconButtonProps extends TouchableOpacityProps {
28
28
  /**
29
29
  * Optional. Defines the size of the IconButton.
30
30
  */
31
- size?: 'large' | 'small';
31
+ size?: 'large' | 'medium' | 'small';
32
+
33
+ /**
34
+ * Optional. Defines the shape of the IconButton.
35
+ */
36
+ shape?: 'circle' | 'square';
32
37
 
33
38
  /**
34
39
  * Optional. Params auto tracking component.
@@ -40,6 +45,7 @@ const IconButton: React.FC<IconButtonProps> = ({
40
45
  type = 'primary',
41
46
  icon,
42
47
  size,
48
+ shape = 'circle',
43
49
  params,
44
50
  ...rest
45
51
  }) => {
@@ -52,10 +58,21 @@ const IconButton: React.FC<IconButtonProps> = ({
52
58
  * get size icon button
53
59
  */
54
60
  const getSizeStyle = () => {
55
- if (size === 'small') {
56
- return styles.small;
61
+ switch (size) {
62
+ case 'small':
63
+ return styles.small;
64
+ case 'medium':
65
+ return styles.medium;
66
+ default:
67
+ return styles.large;
57
68
  }
58
- return styles.large;
69
+ };
70
+
71
+ /**
72
+ * get shape icon button
73
+ */
74
+ const getShapeStyle = () => {
75
+ return shape === 'square' ? styles.square : styles.circle;
59
76
  };
60
77
 
61
78
  /**
@@ -117,8 +134,13 @@ const IconButton: React.FC<IconButtonProps> = ({
117
134
  };
118
135
 
119
136
  const activeOpacity = type === 'disabled' ? 0.75 : 0.5;
120
- const buttonStyle = StyleSheet.flatten([getTypeStyle(), getSizeStyle()]);
121
- const iconSize = size === 'small' ? 16 : 24;
137
+ const buttonStyle = StyleSheet.flatten([
138
+ getTypeStyle(),
139
+ styles.base,
140
+ getSizeStyle(),
141
+ getShapeStyle(),
142
+ ]);
143
+ const iconSize = size === 'small' || size === 'medium' ? 16 : 24;
122
144
 
123
145
  return (
124
146
  <ComponentContext.Provider
@@ -2,19 +2,27 @@ import { StyleSheet } from 'react-native';
2
2
  import { Radius, Colors } from '../Consts';
3
3
 
4
4
  export default StyleSheet.create({
5
+ base: {
6
+ justifyContent: 'center',
7
+ alignItems: 'center',
8
+ },
5
9
  large: {
6
10
  width: 48,
7
11
  height: 48,
8
- borderRadius: Radius.XL,
9
- justifyContent: 'center',
10
- alignItems: 'center',
12
+ },
13
+ medium: {
14
+ width: 36,
15
+ height: 36,
11
16
  },
12
17
  small: {
13
- width: 40,
14
- height: 40,
18
+ width: 28,
19
+ height: 28,
20
+ },
21
+ circle: {
15
22
  borderRadius: Radius.XL,
16
- justifyContent: 'center',
17
- alignItems: 'center',
23
+ },
24
+ square: {
25
+ borderRadius: Radius.S,
18
26
  },
19
27
  debugBaseLine: { borderWidth: 1, borderColor: Colors.green_06 },
20
28
  });
package/Image/index.tsx CHANGED
@@ -1,5 +1,5 @@
1
1
  import React, { useContext, useRef, useState } from 'react';
2
- import { StyleSheet, View } from 'react-native';
2
+ import { Image as RNImage, StyleSheet, View } from 'react-native';
3
3
  import FastImage from 'react-native-fast-image';
4
4
  import styles from './styles';
5
5
  import {
@@ -23,6 +23,10 @@ export const getImageName = (source: any): string => {
23
23
  return '';
24
24
  };
25
25
 
26
+ const isDataUriSource = (source: any): boolean => {
27
+ return typeof source?.uri === 'string' && source.uri.startsWith('data:');
28
+ };
29
+
26
30
  const Image: React.FC<ImageProps> = ({
27
31
  style,
28
32
  source,
@@ -43,6 +47,7 @@ const Image: React.FC<ImageProps> = ({
43
47
  const [status, setStatus] = useState<Status>('success');
44
48
 
45
49
  const showBaseLineDebug = context?.features?.showBaseLineDebug ?? false;
50
+ const useFastImage = !isDataUriSource(source);
46
51
 
47
52
  let accessibilityLabel: any = `img|${getImageName(source)}`;
48
53
  if (component?.componentId) {
@@ -79,6 +84,46 @@ const Image: React.FC<ImageProps> = ({
79
84
  return children;
80
85
  };
81
86
 
87
+ if (!useFastImage) {
88
+ return (
89
+ <RNImage
90
+ {...rest}
91
+ {...{
92
+ accessibilityLabel: rest.accessibilityLabel ?? accessibilityLabel,
93
+ }}
94
+ source={source}
95
+ style={[
96
+ styles.container,
97
+ style,
98
+ showBaseLineDebug && styles.debugBaseLine,
99
+ ]}
100
+ onLoadStart={() => {
101
+ error.current = false;
102
+ if (status !== 'loading' && loading) {
103
+ setStatus('loading');
104
+ }
105
+ }}
106
+ onLoad={() => {
107
+ error.current = false;
108
+ }}
109
+ onLoadEnd={() => {
110
+ let current: Status = 'success';
111
+ if (error.current) {
112
+ current = 'error';
113
+ }
114
+ setStatus(prevState =>
115
+ prevState !== current ? current : prevState,
116
+ );
117
+ }}
118
+ onError={() => {
119
+ error.current = true;
120
+ }}
121
+ >
122
+ {renderContent()}
123
+ </RNImage>
124
+ );
125
+ }
126
+
82
127
  return (
83
128
  <FastImage
84
129
  {...rest}
package/Layout/Screen.tsx CHANGED
@@ -25,10 +25,7 @@ import {
25
25
  View,
26
26
  ViewProps,
27
27
  } from 'react-native';
28
- import {
29
- useSharedValue,
30
- withTiming,
31
- } from 'react-native-reanimated';
28
+ import { useSharedValue, withTiming } from 'react-native-reanimated';
32
29
  import { useSafeAreaInsets } from 'react-native-safe-area-context';
33
30
  import { ApplicationContext, ScreenContext } from '../Context';
34
31
  import Navigation from '../Application/Navigation';
@@ -196,7 +193,7 @@ const Screen = forwardRef(
196
193
  ) => {
197
194
  const screenRef = useRef<View | ScrollView>(null);
198
195
  const { width: widthDevice } = useWindowDimensions();
199
- const { theme } = useContext(ApplicationContext);
196
+ const { theme, navigator } = useContext(ApplicationContext);
200
197
  const screen: any = useContext(ScreenContext);
201
198
  const insets = useSafeAreaInsets();
202
199
  const heightHeader = useHeaderHeight();
@@ -235,7 +232,8 @@ const Screen = forwardRef(
235
232
  }, [customAnimatedValue, internalShared]);
236
233
 
237
234
  const currentTint = useRef<string | undefined>(undefined);
238
- const isTab = navigation?.instance?.getState?.()?.type === 'tab';
235
+
236
+ const isTab = !!screen?.bottomTab;
239
237
 
240
238
  let handleScroll;
241
239
  let Component: any = View;
@@ -650,10 +648,7 @@ const Screen = forwardRef(
650
648
  onScroll={handleScroll}
651
649
  onScrollEndDrag={handleScrollEnd}
652
650
  scrollEventThrottle={16}
653
- style={[
654
- Styles.flex,
655
- !scrollable && !Footer && !isTab && { paddingBottom: bottomInset },
656
- ]}
651
+ style={[Styles.flex]}
657
652
  contentContainerStyle={[
658
653
  scrollable && !Footer && !isTab && { paddingBottom: bottomInset },
659
654
  scrollViewProps?.contentContainerStyle,
@@ -669,9 +664,7 @@ const Screen = forwardRef(
669
664
  <FloatingButton
670
665
  {...floatingButtonProps}
671
666
  animatedValue={sharedValue}
672
- bottom={
673
- Footer || isTab ? 12 : bottomInset + Spacing.S
674
- }
667
+ bottom={Footer || isTab ? 12 : bottomInset + Spacing.S}
675
668
  />
676
669
  </View>
677
670
  )}
package/package.json CHANGED
@@ -1,35 +1,35 @@
1
1
  {
2
2
  "name": "@momo-kits/foundation",
3
- "version": "0.162.2-beta.21",
3
+ "version": "0.162.2-rn.86.2",
4
4
  "description": "React Native Component Kits",
5
- "main": "index.ts",
6
- "scripts": {},
7
5
  "keywords": [
8
6
  "@momo-kits/foundation"
9
7
  ],
8
+ "license": "MoMo",
9
+ "main": "index.ts",
10
+ "publishConfig": {
11
+ "registry": "https://registry.npmjs.org/"
12
+ },
13
+ "scripts": {},
10
14
  "dependencies": {
11
- "react-native-fast-image": "git+https://oauth2:k_r5y_gV6sX9-TqQxgcd@gitlab.mservice.com.vn/momo-platform/public/react-native-fast-image.git#v8.11.0",
12
15
  "@react-navigation/bottom-tabs": "7.4.2",
13
16
  "@react-navigation/core": "7.12.1",
14
17
  "@react-navigation/elements": "2.5.2",
15
18
  "@react-navigation/native": "7.1.14",
16
19
  "@react-navigation/routers": "7.4.1",
17
20
  "@react-navigation/stack": "7.4.2",
18
- "react-native-gesture-handler": "2.27.1",
21
+ "@shopify/flash-list": "2.1.0",
22
+ "lottie-react-native": "7.3.6",
23
+ "react-native-fast-image": "git+https://oauth2:k_r5y_gV6sX9-TqQxgcd@gitlab.mservice.com.vn/momo-platform/public/react-native-fast-image.git#v8.11.0",
24
+ "react-native-gesture-handler": "2.31.0",
19
25
  "react-native-linear-gradient": "git+https://oauth2:k_r5y_gV6sX9-TqQxgcd@gitlab.mservice.com.vn/momo-platform/public/react-native-linear-gradient#v3.0.0",
20
26
  "react-native-reanimated": "4.2.2",
21
- "react-native-safe-area-context": "5.5.2",
22
- "@shopify/flash-list": "2.1.0",
23
- "lottie-react-native": "7.2.4"
24
- },
25
- "peerDependencies": {
26
- "react-native": "*"
27
+ "react-native-safe-area-context": "5.7.0"
27
28
  },
28
29
  "devDependencies": {
29
30
  "@types/color": "3.0.6"
30
31
  },
31
- "publishConfig": {
32
- "registry": "https://registry.npmjs.org/"
33
- },
34
- "license": "MoMo"
32
+ "peerDependencies": {
33
+ "react-native": "*"
34
+ }
35
35
  }