@momo-kits/foundation 0.89.3-api.1 → 0.89.3-beta.1
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/StackScreen.tsx +13 -2
- package/Button/index.tsx +35 -15
- package/CheckBox/index.tsx +18 -0
- package/CheckBox/types.ts +4 -0
- package/IconButton/index.tsx +28 -8
- package/Input/Input.tsx +35 -6
- package/Input/InputMoney.tsx +35 -6
- package/Input/InputOTP.tsx +24 -8
- package/Input/InputSearch.tsx +56 -27
- package/Input/index.tsx +7 -0
- package/Radio/index.tsx +16 -1
- package/Radio/types.ts +5 -0
- package/Switch/index.tsx +21 -2
- package/Switch/types.ts +4 -0
- package/package.json +1 -1
|
@@ -5,6 +5,10 @@ import {ApplicationContext, MiniAppContext} from './index';
|
|
|
5
5
|
import {GridSystem} from '../Layout';
|
|
6
6
|
import {useHeaderHeight} from '@react-navigation/stack';
|
|
7
7
|
|
|
8
|
+
const {
|
|
9
|
+
ScreenContext,
|
|
10
|
+
} = require('react-native/Libraries/Components/ScreenContext');
|
|
11
|
+
|
|
8
12
|
const StackScreen: React.FC<ScreenParams> = props => {
|
|
9
13
|
const {theme, showGrid, navigator} = useContext(ApplicationContext);
|
|
10
14
|
const context = useContext(MiniAppContext);
|
|
@@ -61,10 +65,17 @@ const StackScreen: React.FC<ScreenParams> = props => {
|
|
|
61
65
|
}, []);
|
|
62
66
|
|
|
63
67
|
return (
|
|
64
|
-
|
|
68
|
+
<ScreenContext.Provider
|
|
69
|
+
value={{
|
|
70
|
+
...context,
|
|
71
|
+
screenName: Component.name,
|
|
72
|
+
autoTracking: (data: any) => {
|
|
73
|
+
navigator?.maxApi?.dispatchFunction?.('autoTracking', data);
|
|
74
|
+
},
|
|
75
|
+
}}>
|
|
65
76
|
<Component heightHeader={heightHeader} {...params} />
|
|
66
77
|
{showGrid && <GridSystem />}
|
|
67
|
-
|
|
78
|
+
</ScreenContext.Provider>
|
|
68
79
|
);
|
|
69
80
|
};
|
|
70
81
|
|
package/Button/index.tsx
CHANGED
|
@@ -6,7 +6,6 @@ import {
|
|
|
6
6
|
TouchableOpacityProps,
|
|
7
7
|
View,
|
|
8
8
|
} from 'react-native';
|
|
9
|
-
|
|
10
9
|
import LinearGradient from 'react-native-linear-gradient';
|
|
11
10
|
import {ApplicationContext} from '../Application';
|
|
12
11
|
import {Text} from '../Text';
|
|
@@ -16,6 +15,10 @@ import styles from './styles';
|
|
|
16
15
|
import {Icon} from '../Icon';
|
|
17
16
|
import {Loader} from '../Loader';
|
|
18
17
|
|
|
18
|
+
const {
|
|
19
|
+
ScreenContext,
|
|
20
|
+
} = require('react-native/Libraries/Components/ScreenContext');
|
|
21
|
+
|
|
19
22
|
const AnimationLinear = Animated.createAnimatedComponent(LinearGradient);
|
|
20
23
|
|
|
21
24
|
export interface ButtonProps extends TouchableOpacityProps {
|
|
@@ -70,6 +73,10 @@ export interface ButtonProps extends TouchableOpacityProps {
|
|
|
70
73
|
* A callback function that is called when the button is pressed.
|
|
71
74
|
*/
|
|
72
75
|
onPress: () => void;
|
|
76
|
+
|
|
77
|
+
params?: any;
|
|
78
|
+
|
|
79
|
+
componentId?: string;
|
|
73
80
|
}
|
|
74
81
|
|
|
75
82
|
const Button: FC<ButtonProps> = ({
|
|
@@ -82,6 +89,8 @@ const Button: FC<ButtonProps> = ({
|
|
|
82
89
|
loading = false,
|
|
83
90
|
title = 'Button',
|
|
84
91
|
onPress,
|
|
92
|
+
params,
|
|
93
|
+
componentId,
|
|
85
94
|
...rest
|
|
86
95
|
}) => {
|
|
87
96
|
const {theme, config} = useContext(ApplicationContext);
|
|
@@ -94,6 +103,8 @@ const Button: FC<ButtonProps> = ({
|
|
|
94
103
|
end: {x: 0, y: 0.5},
|
|
95
104
|
};
|
|
96
105
|
}
|
|
106
|
+
|
|
107
|
+
const screenInfo = useContext<any>(ScreenContext);
|
|
97
108
|
const getSizeStyle = () => {
|
|
98
109
|
const styleSheet: {[key: string]: any} = styles;
|
|
99
110
|
return styleSheet[size ?? 'small'];
|
|
@@ -291,20 +302,29 @@ const Button: FC<ButtonProps> = ({
|
|
|
291
302
|
const activeOpacity = type === 'disabled' ? 0.75 : 0.5;
|
|
292
303
|
|
|
293
304
|
return (
|
|
294
|
-
<
|
|
295
|
-
{
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
|
|
305
|
-
|
|
306
|
-
|
|
307
|
-
|
|
305
|
+
<ScreenContext.Provider
|
|
306
|
+
value={{
|
|
307
|
+
...screenInfo,
|
|
308
|
+
componentName: 'Button',
|
|
309
|
+
params,
|
|
310
|
+
state: loading ? "loading" : type === 'disabled' ? 'disabled' : 'enabled',
|
|
311
|
+
componentId,
|
|
312
|
+
action: 'click',
|
|
313
|
+
}}>
|
|
314
|
+
<TouchableOpacity
|
|
315
|
+
{...rest}
|
|
316
|
+
activeOpacity={activeOpacity}
|
|
317
|
+
onPress={onPressButton}
|
|
318
|
+
style={buttonStyle}>
|
|
319
|
+
{renderLeading()}
|
|
320
|
+
{renderTitle()}
|
|
321
|
+
{renderTrailing()}
|
|
322
|
+
{gradientPros && (
|
|
323
|
+
<AnimationLinear {...gradientPros} style={styles.gradientView} />
|
|
324
|
+
)}
|
|
325
|
+
{gradientPros && <View style={styles.strokeView} />}
|
|
326
|
+
</TouchableOpacity>
|
|
327
|
+
</ScreenContext.Provider>
|
|
308
328
|
);
|
|
309
329
|
};
|
|
310
330
|
|
package/CheckBox/index.tsx
CHANGED
|
@@ -6,6 +6,10 @@ import {ApplicationContext} from '../Application';
|
|
|
6
6
|
import {Text} from '../Text';
|
|
7
7
|
import {Icon} from '../Icon';
|
|
8
8
|
|
|
9
|
+
const {
|
|
10
|
+
ScreenContext,
|
|
11
|
+
} = require('react-native/Libraries/Components/ScreenContext');
|
|
12
|
+
|
|
9
13
|
const CheckBox: FC<CheckBoxProps> = ({
|
|
10
14
|
value,
|
|
11
15
|
disabled,
|
|
@@ -13,8 +17,11 @@ const CheckBox: FC<CheckBoxProps> = ({
|
|
|
13
17
|
style,
|
|
14
18
|
label,
|
|
15
19
|
indeterminate,
|
|
20
|
+
params, componentId,
|
|
21
|
+
|
|
16
22
|
}) => {
|
|
17
23
|
const {theme} = useContext(ApplicationContext);
|
|
24
|
+
const screenInfo = useContext<any>(ScreenContext);
|
|
18
25
|
const haveValue = value || indeterminate;
|
|
19
26
|
const iconSource = indeterminate ? 'ic_minus' : 'ic_checked';
|
|
20
27
|
let borderColor = theme.colors.text.default;
|
|
@@ -35,6 +42,16 @@ const CheckBox: FC<CheckBoxProps> = ({
|
|
|
35
42
|
}
|
|
36
43
|
|
|
37
44
|
return (
|
|
45
|
+
<ScreenContext.Provider
|
|
46
|
+
value={{
|
|
47
|
+
...screenInfo,
|
|
48
|
+
componentName: 'Button',
|
|
49
|
+
params,
|
|
50
|
+
state: disabled ? 'disabled' : 'filled',
|
|
51
|
+
componentId,
|
|
52
|
+
componentValue: indeterminate ? "indetermine" : value,
|
|
53
|
+
action: 'click',
|
|
54
|
+
}}>
|
|
38
55
|
<TouchableOpacity
|
|
39
56
|
accessibilityLabel={`CheckBox/${label}/${value}`}
|
|
40
57
|
activeOpacity={0.8}
|
|
@@ -56,6 +73,7 @@ const CheckBox: FC<CheckBoxProps> = ({
|
|
|
56
73
|
</View>
|
|
57
74
|
{!!label && <Text typography={'body_default_regular'}>{label}</Text>}
|
|
58
75
|
</TouchableOpacity>
|
|
76
|
+
</ScreenContext.Provider>
|
|
59
77
|
);
|
|
60
78
|
};
|
|
61
79
|
|
package/CheckBox/types.ts
CHANGED
package/IconButton/index.tsx
CHANGED
|
@@ -10,6 +10,10 @@ import {Colors} from '../Consts';
|
|
|
10
10
|
import {Icon} from '../Icon';
|
|
11
11
|
import styles from './styles';
|
|
12
12
|
|
|
13
|
+
const {
|
|
14
|
+
ScreenContext,
|
|
15
|
+
} = require('react-native/Libraries/Components/ScreenContext');
|
|
16
|
+
|
|
13
17
|
export interface IconButtonProps extends TouchableOpacityProps {
|
|
14
18
|
/**
|
|
15
19
|
* Represents the name or key of the icon to be displayed on the IconButton.
|
|
@@ -26,6 +30,10 @@ export interface IconButtonProps extends TouchableOpacityProps {
|
|
|
26
30
|
* Optional. Defines the size of the IconButton.
|
|
27
31
|
*/
|
|
28
32
|
size?: 'large' | 'small';
|
|
33
|
+
|
|
34
|
+
params?: any;
|
|
35
|
+
|
|
36
|
+
componentId?: string;
|
|
29
37
|
}
|
|
30
38
|
|
|
31
39
|
const IconButton: React.FC<IconButtonProps> = ({
|
|
@@ -33,9 +41,12 @@ const IconButton: React.FC<IconButtonProps> = ({
|
|
|
33
41
|
icon,
|
|
34
42
|
size,
|
|
35
43
|
onPress,
|
|
44
|
+
params,
|
|
45
|
+
componentId,
|
|
36
46
|
...rest
|
|
37
47
|
}) => {
|
|
38
48
|
const {theme} = useContext(ApplicationContext);
|
|
49
|
+
const screenInfo = useContext<any>(ScreenContext);
|
|
39
50
|
|
|
40
51
|
/**
|
|
41
52
|
* get size icon button
|
|
@@ -121,14 +132,23 @@ const IconButton: React.FC<IconButtonProps> = ({
|
|
|
121
132
|
const iconSize = size === 'small' ? 16 : 24;
|
|
122
133
|
|
|
123
134
|
return (
|
|
124
|
-
<
|
|
125
|
-
{
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
135
|
+
<ScreenContext.Provider
|
|
136
|
+
value={{
|
|
137
|
+
...screenInfo,
|
|
138
|
+
componentName: 'IconButton',
|
|
139
|
+
params,
|
|
140
|
+
state: type === 'disabled' ? 'disabled' : 'enabled',
|
|
141
|
+
componentId,
|
|
142
|
+
action: 'click',
|
|
143
|
+
}}>
|
|
144
|
+
<TouchableOpacity
|
|
145
|
+
{...rest}
|
|
146
|
+
activeOpacity={activeOpacity}
|
|
147
|
+
onPress={onPressButton}
|
|
148
|
+
style={buttonStyle}>
|
|
149
|
+
<Icon size={iconSize} source={icon} color={getIconColor()} />
|
|
150
|
+
</TouchableOpacity>
|
|
151
|
+
</ScreenContext.Provider>
|
|
132
152
|
);
|
|
133
153
|
};
|
|
134
154
|
|
package/Input/Input.tsx
CHANGED
|
@@ -14,6 +14,10 @@ import {Icon} from '../Icon';
|
|
|
14
14
|
import {checkTyping} from './utils';
|
|
15
15
|
import {Loader} from '../Loader';
|
|
16
16
|
|
|
17
|
+
const {
|
|
18
|
+
ScreenContext,
|
|
19
|
+
} = require('react-native/Libraries/Components/ScreenContext');
|
|
20
|
+
|
|
17
21
|
const Input = forwardRef(
|
|
18
22
|
(
|
|
19
23
|
{
|
|
@@ -38,6 +42,8 @@ const Input = forwardRef(
|
|
|
38
42
|
fontWeight = 'Regular',
|
|
39
43
|
onPressIcon,
|
|
40
44
|
style,
|
|
45
|
+
params,
|
|
46
|
+
componentId,
|
|
41
47
|
...props
|
|
42
48
|
}: InputProps,
|
|
43
49
|
ref,
|
|
@@ -47,6 +53,7 @@ const Input = forwardRef(
|
|
|
47
53
|
const [haveValue, setHaveValue] = useState(!!value || !!props.defaultValue);
|
|
48
54
|
const inputRef = (ref as React.RefObject<TextInput>) ?? useRef<TextInput>();
|
|
49
55
|
const accessibilityLabel = `Input/${floatingValue ?? placeholder}`;
|
|
56
|
+
const screenInfo = useContext<any>(ScreenContext);
|
|
50
57
|
|
|
51
58
|
const onClearText = () => {
|
|
52
59
|
inputRef?.current?.clear();
|
|
@@ -159,13 +166,35 @@ const Input = forwardRef(
|
|
|
159
166
|
);
|
|
160
167
|
};
|
|
161
168
|
|
|
169
|
+
let inputState = "active"
|
|
170
|
+
|
|
171
|
+
if (value && value?.length > 0 ) {
|
|
172
|
+
inputState = 'filled'
|
|
173
|
+
}
|
|
174
|
+
if (errorMessage && errorMessage?.length > 0) {
|
|
175
|
+
inputState = 'error'
|
|
176
|
+
}
|
|
177
|
+
|
|
178
|
+
if (disabled) {
|
|
179
|
+
inputState = 'disabled'
|
|
180
|
+
}
|
|
181
|
+
|
|
162
182
|
return (
|
|
163
|
-
<
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
183
|
+
<ScreenContext.Provider
|
|
184
|
+
value={{
|
|
185
|
+
...screenInfo,
|
|
186
|
+
componentName: 'Input',
|
|
187
|
+
params,
|
|
188
|
+
state: inputState,
|
|
189
|
+
componentId,
|
|
190
|
+
}}>
|
|
191
|
+
<View
|
|
192
|
+
style={[style, styles.wrapper]}
|
|
193
|
+
accessibilityLabel={accessibilityLabel}>
|
|
194
|
+
{renderInputView()}
|
|
195
|
+
<ErrorView errorMessage={errorMessage} errorSpacing={errorSpacing} />
|
|
196
|
+
</View>
|
|
197
|
+
</ScreenContext.Provider>
|
|
169
198
|
);
|
|
170
199
|
},
|
|
171
200
|
);
|
package/Input/InputMoney.tsx
CHANGED
|
@@ -19,6 +19,10 @@ import {InputMoneyProps} from './index';
|
|
|
19
19
|
import {Icon} from '../Icon';
|
|
20
20
|
import {formatMoneyToNumber, formatNumberToMoney} from './utils';
|
|
21
21
|
|
|
22
|
+
const {
|
|
23
|
+
ScreenContext,
|
|
24
|
+
} = require('react-native/Libraries/Components/ScreenContext');
|
|
25
|
+
|
|
22
26
|
const InputMoney = forwardRef(
|
|
23
27
|
(
|
|
24
28
|
{
|
|
@@ -36,7 +40,9 @@ const InputMoney = forwardRef(
|
|
|
36
40
|
required = false,
|
|
37
41
|
errorSpacing,
|
|
38
42
|
style,
|
|
43
|
+
params,
|
|
39
44
|
defaultValue = '',
|
|
45
|
+
componentId,
|
|
40
46
|
...props
|
|
41
47
|
}: InputMoneyProps,
|
|
42
48
|
ref,
|
|
@@ -45,6 +51,7 @@ const InputMoney = forwardRef(
|
|
|
45
51
|
const [focused, setFocused] = useState(false);
|
|
46
52
|
const inputRef = (ref as React.RefObject<TextInput>) ?? useRef<TextInput>();
|
|
47
53
|
const accessibilityLabel = `InputMoney/${floatingValue}`;
|
|
54
|
+
const screenInfo = useContext<any>(ScreenContext);
|
|
48
55
|
|
|
49
56
|
const validateText = (text: string) => {
|
|
50
57
|
const valueFormat = formatMoneyToNumber(text, 'đ');
|
|
@@ -97,6 +104,7 @@ const InputMoney = forwardRef(
|
|
|
97
104
|
iconTintColor = disabledColor;
|
|
98
105
|
}
|
|
99
106
|
|
|
107
|
+
|
|
100
108
|
return (
|
|
101
109
|
<View
|
|
102
110
|
style={[
|
|
@@ -153,13 +161,34 @@ const InputMoney = forwardRef(
|
|
|
153
161
|
);
|
|
154
162
|
};
|
|
155
163
|
|
|
164
|
+
let inputState = "active"
|
|
165
|
+
|
|
166
|
+
if (value && value?.length > 0 ) {
|
|
167
|
+
inputState = 'filled'
|
|
168
|
+
}
|
|
169
|
+
if (errorMessage && errorMessage?.length > 0) {
|
|
170
|
+
inputState = 'error'
|
|
171
|
+
}
|
|
172
|
+
|
|
173
|
+
if (disabled) {
|
|
174
|
+
inputState = 'disabled'
|
|
175
|
+
}
|
|
156
176
|
return (
|
|
157
|
-
<
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
177
|
+
<ScreenContext.Provider
|
|
178
|
+
value={{
|
|
179
|
+
...screenInfo,
|
|
180
|
+
componentName: 'InputMoney',
|
|
181
|
+
params,
|
|
182
|
+
state: inputState,
|
|
183
|
+
componentId,
|
|
184
|
+
}}>
|
|
185
|
+
<View
|
|
186
|
+
style={[style, styles.wrapper]}
|
|
187
|
+
accessibilityLabel={accessibilityLabel}>
|
|
188
|
+
{renderInputView()}
|
|
189
|
+
<ErrorView errorMessage={errorMessage} errorSpacing={errorSpacing} />
|
|
190
|
+
</View>
|
|
191
|
+
</ScreenContext.Provider>
|
|
163
192
|
);
|
|
164
193
|
},
|
|
165
194
|
);
|
package/Input/InputOTP.tsx
CHANGED
|
@@ -22,6 +22,10 @@ import {ErrorView, getBorderColor} from './common';
|
|
|
22
22
|
import {ApplicationContext} from '../Application';
|
|
23
23
|
import {Spacing} from '../Consts';
|
|
24
24
|
|
|
25
|
+
const {
|
|
26
|
+
ScreenContext,
|
|
27
|
+
} = require('react-native/Libraries/Components/ScreenContext');
|
|
28
|
+
|
|
25
29
|
const OTPCaret: FC<CaretProps> = ({index, length}) => {
|
|
26
30
|
const DURATION = 300;
|
|
27
31
|
const {theme} = useContext(ApplicationContext);
|
|
@@ -78,7 +82,9 @@ const InputOTP = forwardRef(
|
|
|
78
82
|
onFocus,
|
|
79
83
|
onBlur,
|
|
80
84
|
dataType = 'number',
|
|
85
|
+
params,
|
|
81
86
|
style,
|
|
87
|
+
componentId,
|
|
82
88
|
...props
|
|
83
89
|
}: InputOTPProps,
|
|
84
90
|
ref,
|
|
@@ -89,6 +95,7 @@ const InputOTP = forwardRef(
|
|
|
89
95
|
const inputRef = useRef<TextInput>(null);
|
|
90
96
|
const {theme} = useContext(ApplicationContext);
|
|
91
97
|
const accessibilityLabel = `InputOTP/${floatingValue ?? placeholder}`;
|
|
98
|
+
const screenInfo = useContext<any>(ScreenContext);
|
|
92
99
|
|
|
93
100
|
useImperativeHandle(ref, () => ({
|
|
94
101
|
onChangeText: (text: string) => {
|
|
@@ -223,14 +230,23 @@ const InputOTP = forwardRef(
|
|
|
223
230
|
};
|
|
224
231
|
|
|
225
232
|
return (
|
|
226
|
-
<
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
233
|
+
<ScreenContext.Provider
|
|
234
|
+
value={{
|
|
235
|
+
...screenInfo,
|
|
236
|
+
componentName: 'InputOTP',
|
|
237
|
+
params,
|
|
238
|
+
state: 'enabled',
|
|
239
|
+
componentId,
|
|
240
|
+
}}>
|
|
241
|
+
<TouchableOpacity
|
|
242
|
+
activeOpacity={1}
|
|
243
|
+
onPress={onFocusInput}
|
|
244
|
+
style={[style, styles.otpWrapper]}
|
|
245
|
+
accessibilityLabel={accessibilityLabel}>
|
|
246
|
+
{renderInputView()}
|
|
247
|
+
<ErrorView errorMessage={errorMessage} errorSpacing={errorSpacing} />
|
|
248
|
+
</TouchableOpacity>
|
|
249
|
+
</ScreenContext.Provider>
|
|
234
250
|
);
|
|
235
251
|
},
|
|
236
252
|
);
|
package/Input/InputSearch.tsx
CHANGED
|
@@ -13,6 +13,10 @@ import {Icon} from '../Icon';
|
|
|
13
13
|
import {Text} from '../Text';
|
|
14
14
|
import {checkTyping} from './utils';
|
|
15
15
|
|
|
16
|
+
const {
|
|
17
|
+
ScreenContext,
|
|
18
|
+
} = require('react-native/Libraries/Components/ScreenContext');
|
|
19
|
+
|
|
16
20
|
const InputSearch = forwardRef(
|
|
17
21
|
(
|
|
18
22
|
{
|
|
@@ -29,6 +33,8 @@ const InputSearch = forwardRef(
|
|
|
29
33
|
style,
|
|
30
34
|
defaultValue,
|
|
31
35
|
onPressButtonText,
|
|
36
|
+
params,
|
|
37
|
+
componentId,
|
|
32
38
|
...props
|
|
33
39
|
}: InputSearchProps,
|
|
34
40
|
ref,
|
|
@@ -38,6 +44,7 @@ const InputSearch = forwardRef(
|
|
|
38
44
|
const [haveValue, setHaveValue] = useState(!!value || !!defaultValue);
|
|
39
45
|
const inputRef = (ref as React.RefObject<TextInput>) ?? useRef<TextInput>();
|
|
40
46
|
const accessibilityLabel = `InputMoney/${placeholder}`;
|
|
47
|
+
const screenInfo = useContext<any>(ScreenContext);
|
|
41
48
|
|
|
42
49
|
const _onFocus = (e: NativeSyntheticEvent<TextInputFocusEventData>) => {
|
|
43
50
|
setFocused(true);
|
|
@@ -118,36 +125,58 @@ const InputSearch = forwardRef(
|
|
|
118
125
|
</View>
|
|
119
126
|
);
|
|
120
127
|
};
|
|
128
|
+
|
|
129
|
+
let inputState = "empty"
|
|
130
|
+
|
|
131
|
+
if (focused) {
|
|
132
|
+
inputState = 'focus'
|
|
133
|
+
}
|
|
134
|
+
|
|
135
|
+
if (value && value?.length > 0 ) {
|
|
136
|
+
inputState = 'filled'
|
|
137
|
+
}
|
|
138
|
+
|
|
121
139
|
return (
|
|
122
|
-
<
|
|
123
|
-
|
|
124
|
-
|
|
140
|
+
<ScreenContext.Provider
|
|
141
|
+
value={{
|
|
142
|
+
...screenInfo,
|
|
143
|
+
componentName: 'InputSearch',
|
|
144
|
+
params,
|
|
145
|
+
state: inputState,
|
|
146
|
+
componentId,
|
|
147
|
+
}}>
|
|
125
148
|
<View
|
|
126
|
-
style={[
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
149
|
+
style={[style, styles.searchInputContainer]}
|
|
150
|
+
accessibilityLabel={accessibilityLabel}>
|
|
151
|
+
<View
|
|
152
|
+
style={[
|
|
153
|
+
styles.searchInputWrapper,
|
|
154
|
+
{
|
|
155
|
+
backgroundColor: theme.colors.background.surface,
|
|
156
|
+
borderColor: theme.colors.background.surface,
|
|
157
|
+
},
|
|
158
|
+
showBorder && {borderColor: theme.colors.border.default},
|
|
159
|
+
focused && {borderColor: theme.colors.primary},
|
|
160
|
+
]}>
|
|
161
|
+
<Icon
|
|
162
|
+
source={'navigation_search'}
|
|
163
|
+
size={24}
|
|
164
|
+
color={theme.colors.text.hint}
|
|
165
|
+
/>
|
|
166
|
+
{renderInputView()}
|
|
167
|
+
{renderIconView()}
|
|
168
|
+
</View>
|
|
169
|
+
{showButtonText && (
|
|
170
|
+
<TouchableOpacity onPress={onPressButtonText}>
|
|
171
|
+
<Text
|
|
172
|
+
typography={'action_default_bold'}
|
|
173
|
+
style={styles.textButton}>
|
|
174
|
+
{buttonText}
|
|
175
|
+
</Text>
|
|
176
|
+
</TouchableOpacity>
|
|
177
|
+
)}
|
|
142
178
|
</View>
|
|
143
|
-
|
|
144
|
-
<TouchableOpacity onPress={onPressButtonText}>
|
|
145
|
-
<Text typography={'action_default_bold'} style={styles.textButton}>
|
|
146
|
-
{buttonText}
|
|
147
|
-
</Text>
|
|
148
|
-
</TouchableOpacity>
|
|
149
|
-
)}
|
|
150
|
-
</View>
|
|
179
|
+
</ScreenContext.Provider>
|
|
151
180
|
);
|
|
152
181
|
},
|
|
153
182
|
);
|
package/Input/index.tsx
CHANGED
|
@@ -80,6 +80,9 @@ export interface InputProps extends TextInputProps {
|
|
|
80
80
|
fontWeight?: 'Regular' | 'Bold';
|
|
81
81
|
|
|
82
82
|
onPressIcon?: () => void;
|
|
83
|
+
|
|
84
|
+
params?: any;
|
|
85
|
+
componentId?: string;
|
|
83
86
|
}
|
|
84
87
|
|
|
85
88
|
type InputPropsWithoutSizeAndIcon = Omit<
|
|
@@ -126,6 +129,10 @@ export interface InputSearchProps extends TextInputProps {
|
|
|
126
129
|
* Optional. Represents the name or key of the icon to be displayed in the Input component.
|
|
127
130
|
*/
|
|
128
131
|
icon?: string;
|
|
132
|
+
|
|
133
|
+
params?: any;
|
|
134
|
+
|
|
135
|
+
componentId?: string;
|
|
129
136
|
}
|
|
130
137
|
|
|
131
138
|
export interface InputMoneyProps extends InputPropsWithoutPlaceholder {}
|
package/Radio/index.tsx
CHANGED
|
@@ -6,6 +6,9 @@ import {Text} from '../Text';
|
|
|
6
6
|
import styles from './styles';
|
|
7
7
|
import {ApplicationContext} from '../Application';
|
|
8
8
|
import {Spacing} from '../Consts';
|
|
9
|
+
const {
|
|
10
|
+
ScreenContext,
|
|
11
|
+
} = require('react-native/Libraries/Components/ScreenContext');
|
|
9
12
|
|
|
10
13
|
const Radio: FC<RadioProps> = ({
|
|
11
14
|
value,
|
|
@@ -13,9 +16,10 @@ const Radio: FC<RadioProps> = ({
|
|
|
13
16
|
disabled,
|
|
14
17
|
onChange,
|
|
15
18
|
label,
|
|
16
|
-
style,
|
|
19
|
+
style, params, componentId,
|
|
17
20
|
}) => {
|
|
18
21
|
const {theme} = useContext(ApplicationContext);
|
|
22
|
+
const screenInfo = useContext<any>(ScreenContext);
|
|
19
23
|
const selected = value === groupValue;
|
|
20
24
|
let disabledStyle = {};
|
|
21
25
|
let checkBoxStyle = {
|
|
@@ -38,6 +42,16 @@ const Radio: FC<RadioProps> = ({
|
|
|
38
42
|
}
|
|
39
43
|
|
|
40
44
|
return (
|
|
45
|
+
<ScreenContext.Provider
|
|
46
|
+
value={{
|
|
47
|
+
...screenInfo,
|
|
48
|
+
componentName: 'Button',
|
|
49
|
+
params,
|
|
50
|
+
state: disabled ? 'disabled' : 'enabled',
|
|
51
|
+
componentId,
|
|
52
|
+
componentValue: value,
|
|
53
|
+
action: 'click',
|
|
54
|
+
}}>
|
|
41
55
|
<TouchableOpacity
|
|
42
56
|
accessibilityLabel={`Radio/${label}/${value}`}
|
|
43
57
|
onPress={onChange}
|
|
@@ -59,6 +73,7 @@ const Radio: FC<RadioProps> = ({
|
|
|
59
73
|
/>
|
|
60
74
|
{!!label && <Text typography={'body_default_regular'}>{label}</Text>}
|
|
61
75
|
</TouchableOpacity>
|
|
76
|
+
</ScreenContext.Provider>
|
|
62
77
|
);
|
|
63
78
|
};
|
|
64
79
|
|
package/Radio/types.ts
CHANGED
package/Switch/index.tsx
CHANGED
|
@@ -1,11 +1,19 @@
|
|
|
1
|
-
import React, {FC} from 'react';
|
|
1
|
+
import React, {FC, useContext} from 'react';
|
|
2
2
|
import {TouchableOpacity, View} from 'react-native';
|
|
3
3
|
import {SwitchProps} from './types';
|
|
4
4
|
import styles from './styles';
|
|
5
5
|
import {Colors} from '../Consts';
|
|
6
6
|
|
|
7
|
+
const {
|
|
8
|
+
ScreenContext,
|
|
9
|
+
} = require('react-native/Libraries/Components/ScreenContext');
|
|
10
|
+
|
|
7
11
|
const Switch: FC<SwitchProps> = props => {
|
|
8
|
-
const {value, onChange, disabled, style
|
|
12
|
+
const {value, onChange, disabled, style,
|
|
13
|
+
params, componentId,
|
|
14
|
+
} = props;
|
|
15
|
+
const screenInfo = useContext<any>(ScreenContext);
|
|
16
|
+
|
|
9
17
|
const circleBackgroundColor = value ? Colors.black_01 : Colors.black_03;
|
|
10
18
|
const circleAlign = value ? 'flex-end' : 'flex-start';
|
|
11
19
|
|
|
@@ -15,6 +23,16 @@ const Switch: FC<SwitchProps> = props => {
|
|
|
15
23
|
}
|
|
16
24
|
|
|
17
25
|
return (
|
|
26
|
+
<ScreenContext.Provider
|
|
27
|
+
value={{
|
|
28
|
+
...screenInfo,
|
|
29
|
+
componentName: 'Button',
|
|
30
|
+
params,
|
|
31
|
+
state: disabled ? 'disabled' : 'enabled',
|
|
32
|
+
componentId,
|
|
33
|
+
componentValue: value,
|
|
34
|
+
action: 'click',
|
|
35
|
+
}}>
|
|
18
36
|
<TouchableOpacity
|
|
19
37
|
accessibilityLabel={'Switch'}
|
|
20
38
|
disabled={disabled}
|
|
@@ -28,6 +46,7 @@ const Switch: FC<SwitchProps> = props => {
|
|
|
28
46
|
<View style={[styles.circleSmall, {backgroundColor}]} />
|
|
29
47
|
</View>
|
|
30
48
|
</TouchableOpacity>
|
|
49
|
+
</ScreenContext.Provider>
|
|
31
50
|
);
|
|
32
51
|
};
|
|
33
52
|
|
package/Switch/types.ts
CHANGED