react-native-timacare 3.3.64 → 3.3.66

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.
Files changed (104) hide show
  1. package/lib/commonjs/components/AlertLoan.js +1 -1
  2. package/lib/commonjs/components/AlertLoan.js.flow +12 -2
  3. package/lib/commonjs/components/AlertLoan.js.map +1 -1
  4. package/lib/commonjs/components/ItemTimaOne.js +1 -1
  5. package/lib/commonjs/components/ItemTimaOne.js.flow +2 -0
  6. package/lib/commonjs/components/ItemTimaOne.js.map +1 -1
  7. package/lib/commonjs/navigation/primary-navigator.js +1 -1
  8. package/lib/commonjs/navigation/primary-navigator.js.flow +9 -0
  9. package/lib/commonjs/navigation/primary-navigator.js.map +1 -1
  10. package/lib/commonjs/screens/full-submit/selfie.js +1 -1
  11. package/lib/commonjs/screens/full-submit/selfie.js.flow +257 -114
  12. package/lib/commonjs/screens/full-submit/selfie.js.map +1 -1
  13. package/lib/commonjs/screens/motobike/InfoLoanMotobike.js +1 -1
  14. package/lib/commonjs/screens/motobike/InfoLoanMotobike.js.flow +3 -2
  15. package/lib/commonjs/screens/motobike/InfoLoanMotobike.js.map +1 -1
  16. package/lib/commonjs/screens/motobike/ReviewLoanMotobike.js +1 -1
  17. package/lib/commonjs/screens/motobike/ReviewLoanMotobike.js.flow +1 -0
  18. package/lib/commonjs/screens/motobike/ReviewLoanMotobike.js.map +1 -1
  19. package/lib/commonjs/screens/selfie/SelfieCamera.js +2 -0
  20. package/lib/commonjs/screens/selfie/SelfieCamera.js.flow +302 -0
  21. package/lib/commonjs/screens/selfie/SelfieCamera.js.map +1 -0
  22. package/lib/commonjs/screens/selfie/index.js +1 -1
  23. package/lib/commonjs/screens/selfie/index.js.flow +295 -165
  24. package/lib/commonjs/screens/selfie/index.js.map +1 -1
  25. package/lib/commonjs/screens/toan-trinh-so/ReviewInformation.js +1 -1
  26. package/lib/commonjs/screens/toan-trinh-so/ReviewInformation.js.flow +1 -0
  27. package/lib/commonjs/screens/toan-trinh-so/ReviewInformation.js.map +1 -1
  28. package/lib/commonjs/screens/toan-trinh-so/ReviewInformationOther.js +1 -1
  29. package/lib/commonjs/screens/toan-trinh-so/ReviewInformationOther.js.flow +1 -0
  30. package/lib/commonjs/screens/toan-trinh-so/ReviewInformationOther.js.map +1 -1
  31. package/lib/commonjs/screens/toan-trinh-so/ReviewLoan.js +1 -1
  32. package/lib/commonjs/screens/toan-trinh-so/ReviewLoan.js.flow +1 -0
  33. package/lib/commonjs/screens/toan-trinh-so/ReviewLoan.js.map +1 -1
  34. package/lib/commonjs/screens/toan-trinh-so/TopupLoanInfo.js +1 -1
  35. package/lib/commonjs/screens/toan-trinh-so/TopupLoanInfo.js.flow +8 -5
  36. package/lib/commonjs/screens/toan-trinh-so/TopupLoanInfo.js.map +1 -1
  37. package/lib/commonjs/screens/v3/AssetInformation.js +1 -1
  38. package/lib/commonjs/screens/v3/AssetInformation.js.flow +1 -0
  39. package/lib/commonjs/screens/v3/AssetInformation.js.map +1 -1
  40. package/lib/commonjs/screens/v3/ReviewInfoLoanBuyCar.js +2 -0
  41. package/lib/commonjs/screens/v3/ReviewInfoLoanBuyCar.js.flow +522 -0
  42. package/lib/commonjs/screens/v3/ReviewInfoLoanBuyCar.js.map +1 -0
  43. package/lib/commonjs/services/api/api.js +1 -1
  44. package/lib/commonjs/services/api/api.js.flow +41 -7
  45. package/lib/commonjs/services/api/api.js.map +1 -1
  46. package/lib/module/components/AlertLoan.js +1 -1
  47. package/lib/module/components/AlertLoan.js.map +1 -1
  48. package/lib/module/components/ItemTimaOne.js +1 -1
  49. package/lib/module/components/ItemTimaOne.js.map +1 -1
  50. package/lib/module/navigation/primary-navigator.js +1 -1
  51. package/lib/module/navigation/primary-navigator.js.map +1 -1
  52. package/lib/module/screens/full-submit/selfie.js +1 -1
  53. package/lib/module/screens/full-submit/selfie.js.map +1 -1
  54. package/lib/module/screens/motobike/InfoLoanMotobike.js +1 -1
  55. package/lib/module/screens/motobike/InfoLoanMotobike.js.map +1 -1
  56. package/lib/module/screens/motobike/ReviewLoanMotobike.js +1 -1
  57. package/lib/module/screens/motobike/ReviewLoanMotobike.js.map +1 -1
  58. package/lib/module/screens/selfie/SelfieCamera.js +2 -0
  59. package/lib/module/screens/selfie/SelfieCamera.js.map +1 -0
  60. package/lib/module/screens/selfie/index.js +1 -1
  61. package/lib/module/screens/selfie/index.js.map +1 -1
  62. package/lib/module/screens/toan-trinh-so/ReviewInformation.js +1 -1
  63. package/lib/module/screens/toan-trinh-so/ReviewInformation.js.map +1 -1
  64. package/lib/module/screens/toan-trinh-so/ReviewInformationOther.js +1 -1
  65. package/lib/module/screens/toan-trinh-so/ReviewInformationOther.js.map +1 -1
  66. package/lib/module/screens/toan-trinh-so/ReviewLoan.js +1 -1
  67. package/lib/module/screens/toan-trinh-so/ReviewLoan.js.map +1 -1
  68. package/lib/module/screens/toan-trinh-so/TopupLoanInfo.js +1 -1
  69. package/lib/module/screens/toan-trinh-so/TopupLoanInfo.js.map +1 -1
  70. package/lib/module/screens/v3/AssetInformation.js +1 -1
  71. package/lib/module/screens/v3/AssetInformation.js.map +1 -1
  72. package/lib/module/screens/v3/ReviewInfoLoanBuyCar.js +2 -0
  73. package/lib/module/screens/v3/ReviewInfoLoanBuyCar.js.map +1 -0
  74. package/lib/module/services/api/api.js +1 -1
  75. package/lib/module/services/api/api.js.map +1 -1
  76. package/lib/typescript/components/AlertLoan.d.ts.map +1 -1
  77. package/lib/typescript/components/ItemTimaOne.d.ts.map +1 -1
  78. package/lib/typescript/navigation/primary-navigator.d.ts +2 -0
  79. package/lib/typescript/navigation/primary-navigator.d.ts.map +1 -1
  80. package/lib/typescript/screens/full-submit/selfie.d.ts.map +1 -1
  81. package/lib/typescript/screens/selfie/SelfieCamera.d.ts +2 -0
  82. package/lib/typescript/screens/selfie/SelfieCamera.d.ts.map +1 -0
  83. package/lib/typescript/screens/selfie/index.d.ts.map +1 -1
  84. package/lib/typescript/screens/toan-trinh-so/TopupLoanInfo.d.ts.map +1 -1
  85. package/lib/typescript/screens/v3/ReviewInfoLoanBuyCar.d.ts +2 -0
  86. package/lib/typescript/screens/v3/ReviewInfoLoanBuyCar.d.ts.map +1 -0
  87. package/lib/typescript/services/api/api.d.ts +32 -0
  88. package/lib/typescript/services/api/api.d.ts.map +1 -1
  89. package/package.json +1 -1
  90. package/src/components/AlertLoan.tsx +12 -2
  91. package/src/components/ItemTimaOne.tsx +2 -0
  92. package/src/navigation/primary-navigator.tsx +9 -0
  93. package/src/screens/full-submit/selfie.tsx +257 -114
  94. package/src/screens/motobike/InfoLoanMotobike.tsx +3 -2
  95. package/src/screens/motobike/ReviewLoanMotobike.tsx +1 -0
  96. package/src/screens/selfie/SelfieCamera.tsx +302 -0
  97. package/src/screens/selfie/index.tsx +295 -165
  98. package/src/screens/toan-trinh-so/ReviewInformation.tsx +1 -0
  99. package/src/screens/toan-trinh-so/ReviewInformationOther.tsx +1 -0
  100. package/src/screens/toan-trinh-so/ReviewLoan.tsx +1 -0
  101. package/src/screens/toan-trinh-so/TopupLoanInfo.tsx +8 -5
  102. package/src/screens/v3/AssetInformation.tsx +1 -0
  103. package/src/screens/v3/ReviewInfoLoanBuyCar.tsx +522 -0
  104. package/src/services/api/api.ts +41 -7
@@ -1,20 +1,19 @@
1
1
  //@ts-nocheck
2
2
  import { StackActions, useNavigation } from '@react-navigation/native';
3
- import { observer, Observer } from 'mobx-react-lite';
4
- import React, { useState } from 'react';
3
+ import { observer } from 'mobx-react-lite';
4
+ import React, { useCallback, useEffect, useRef, useState } from 'react';
5
5
  import {
6
6
  ActivityIndicator,
7
- Dimensions,
7
+ Animated,
8
+ Easing,
8
9
  Image,
9
- ImageStyle,
10
10
  SafeAreaView,
11
11
  ScrollView,
12
- StatusBar,
13
- TouchableOpacity,
12
+ StyleSheet,
14
13
  View,
15
14
  } from 'react-native';
16
15
  import LinearGradient from 'react-native-linear-gradient';
17
- import { CIMBBank, IconBackWhite } from '../../assets/icons';
16
+ import { CIMBBank, IConCamera, Tick2, TimaSmall } from '../../assets/icons';
18
17
  import CIMBLoading from '../../components/CIMBLoading';
19
18
  import MButton from '../../components/MButton';
20
19
  import { MText } from '../../components/MText';
@@ -23,30 +22,55 @@ import { commonStyles } from '../CommonStyles';
23
22
  import FullSubmitStore from './store';
24
23
  import MHeader from '../../components/MHeader';
25
24
 
26
- const logoView: ImageStyle = {
27
- position: 'absolute',
28
- width: '100%',
29
- height: '100%',
30
- resizeMode: 'cover',
31
- };
25
+ // require() ở module scope: không phải resolve lại asset mỗi lần render
26
+ const BACKGROUND = require('../../assets/img/EKYC.png');
27
+ const PLACEHOLDER = require('../../assets/img/selfie.png');
28
+
29
+ // Khung dọc 3:4 - đúng tỉ lệ ảnh máy ảnh trước trả về nên ảnh khách chụp
30
+ // không bị cắt hai bên như khung 356/534 cũ
31
+ const PREVIEW_ASPECT = 3 / 4;
32
+
33
+ const NOTES = [
34
+ 'Nhìn thẳng vào máy ảnh, khuôn mặt nằm gọn trong khung hình',
35
+ 'Chụp nơi đủ sáng, tránh ngược sáng hoặc bóng đổ lên mặt',
36
+ 'Không đeo kính, khẩu trang, mũ và để lộ rõ đường nét khuôn mặt',
37
+ ];
32
38
 
33
39
  export const CimbSelfie = observer(function CimbSelfie(props: any) {
34
- const [isLoading, setIsLoading] = useState(false);
35
40
  const navigation = useNavigation();
41
+ const [isLoading, setIsLoading] = useState(false);
36
42
  const [photo, setPhoto] = useState(null);
43
+ // Chặn double-submit: setIsLoading là bất đồng bộ nên hai lần bấm liên tiếp
44
+ // vẫn lọt qua được nếu chỉ dựa vào state.
45
+ const submitting = useRef(false);
37
46
  const loan = props?.route.params?.loan;
38
- const takePhoto = () => {
39
- navigation.push(ScreenNames.Camera, {
47
+
48
+ // Ảnh vừa chụp hiện lên bằng fade + scale nhẹ để thấy rõ khung ảnh đã đổi
49
+ const reveal = useRef(new Animated.Value(1)).current;
50
+ useEffect(() => {
51
+ if (!photo) return;
52
+ reveal.setValue(0);
53
+ Animated.timing(reveal, {
54
+ toValue: 1,
55
+ duration: 260,
56
+ easing: Easing.out(Easing.cubic),
57
+ useNativeDriver: true,
58
+ }).start();
59
+ }, [photo, reveal]);
60
+
61
+ const takePhoto = useCallback(() => {
62
+ navigation.push(ScreenNames.SelfieCamera, {
40
63
  front: true,
41
64
  selfie: true,
42
- callback: (photo) => {
43
- setPhoto(photo);
44
- },
65
+ callback: setPhoto,
45
66
  });
46
- };
67
+ }, [navigation]);
47
68
 
48
- const nextStep = () => {
69
+ const nextStep = useCallback(() => {
70
+ if (!photo || submitting.current) return;
71
+ submitting.current = true;
49
72
  setIsLoading(true);
73
+
50
74
  const formData = new FormData();
51
75
  formData.append('loanbriefId', loan?.id);
52
76
  formData.append('TypeDocumentId', 487);
@@ -55,126 +79,123 @@ export const CimbSelfie = observer(function CimbSelfie(props: any) {
55
79
  type: 'image/jpg',
56
80
  name: 'image.jpg',
57
81
  });
82
+
58
83
  FullSubmitStore.uploadDocument(
59
84
  formData,
60
85
  () => {
86
+ submitting.current = false;
61
87
  setIsLoading(false);
62
88
  setTimeout(() => {
63
89
  navigation.dispatch(
64
- StackActions.push(ScreenNames.MRZScanner, {
65
- loan: loan,
66
- })
90
+ StackActions.push(ScreenNames.MRZScanner, { loan })
67
91
  );
68
92
  }, 600);
69
93
  },
70
94
  () => {
95
+ submitting.current = false;
71
96
  setIsLoading(false);
72
97
  }
73
98
  );
74
- };
99
+ }, [photo, loan, navigation]);
100
+
101
+ const goBack = useCallback(() => navigation.goBack(), [navigation]);
102
+
103
+ const canSubmit = !!photo && !isLoading;
75
104
 
76
105
  return (
77
- <View style={{ flex: 1 }}>
78
- <Image source={require('../../assets/img/EKYC.png')} style={logoView} />
79
- <MHeader title="Xác thực khuôn mặt" onBack={() => navigation.goBack()} />
106
+ <View style={commonStyles.fill}>
107
+ <Image source={BACKGROUND} style={styles.background} />
108
+ <MHeader title="Xác thực khuôn mặt" onBack={goBack} />
80
109
  <SafeAreaView style={commonStyles.fill}>
81
- <ScrollView style={commonStyles.fill}>
82
- <View style={{ paddingHorizontal: 16, paddingBottom: 16 }}>
83
- <Image
84
- source={
85
- photo ? { uri: photo } : require('../../assets/img/selfie.png')
86
- }
87
- style={{
88
- width: Dimensions.get('window').width - 32,
89
- height: ((Dimensions.get('window').width - 32) * 534) / 356,
90
- borderWidth: 6,
91
- borderRadius: 6,
92
- borderColor: '#FFFFFF',
93
- marginTop: 16,
94
- }}
95
- />
110
+ <ScrollView
111
+ style={commonStyles.fill}
112
+ contentContainerStyle={styles.scrollContent}
113
+ showsVerticalScrollIndicator={false}
114
+ >
115
+ <View style={styles.card}>
116
+ {/* Bọc một lớp cắt riêng: để Image tự bo góc thì mép ảnh vẫn thò ra
117
+ ngoài đường cong của card trên Android */}
118
+ <View style={styles.previewFrame}>
119
+ <Animated.Image
120
+ source={photo ? { uri: photo } : PLACEHOLDER}
121
+ resizeMode="cover"
122
+ style={[
123
+ styles.preview,
124
+ {
125
+ opacity: reveal,
126
+ transform: [
127
+ {
128
+ scale: reveal.interpolate({
129
+ inputRange: [0, 1],
130
+ outputRange: [0.97, 1],
131
+ }),
132
+ },
133
+ ],
134
+ },
135
+ ]}
136
+ />
137
+ </View>
138
+ {/* Nhãn trạng thái: phân biệt rõ ảnh mẫu minh hoạ và ảnh đã chụp */}
139
+ <View style={[styles.badge, photo && styles.badgeDone]}>
140
+ {photo ? <Tick2 /> : null}
141
+ <MText style={[styles.badgeText, photo && styles.badgeTextDone]}>
142
+ {photo ? 'Ảnh của bạn' : 'Ảnh mẫu'}
143
+ </MText>
144
+ </View>
145
+ </View>
146
+
147
+ <View style={styles.noteCard}>
148
+ <MText style={styles.noteTitle}>Lưu ý khi chụp ảnh khuôn mặt</MText>
149
+ {NOTES.map((note) => (
150
+ <View key={note} style={styles.noteRow}>
151
+ <TimaSmall style={styles.noteBullet} />
152
+ <MText style={styles.noteText}>{note}</MText>
153
+ </View>
154
+ ))}
96
155
  </View>
97
156
  </ScrollView>
98
- <View
99
- style={{
100
- flexDirection: 'row',
101
- paddingHorizontal: 16,
102
- marginBottom: 30,
103
- }}
104
- >
157
+
158
+ <View style={styles.footer}>
105
159
  <MButton
106
- //@ts-ignore
107
- onPress={() => {
108
- takePhoto();
109
- }}
160
+ onPress={takePhoto}
110
161
  disabled={isLoading}
111
- style={[
112
- commonStyles.row,
113
- commonStyles.alignCenter,
114
- commonStyles.justifyCenter,
115
- {
116
- backgroundColor: '#FFFFFF',
117
- height: 40,
118
- borderRadius: 30,
119
- flex: 1,
120
- marginRight: 8,
121
- borderWidth: 1,
122
- borderColor: '#EF4123',
123
- },
124
- ]}
162
+ style={[styles.captureButton, isLoading && styles.buttonMuted]}
125
163
  >
126
- <MText style={[commonStyles.textNormal, { color: '#F05123' }]}>
127
- Chụp ảnh
164
+ <IConCamera width={16} height={16} />
165
+ <MText style={styles.captureText}>
166
+ {photo ? 'Chụp lại' : 'Chụp ảnh'}
128
167
  </MText>
129
168
  </MButton>
130
169
 
131
- <Observer>
132
- {() => (
133
- <MButton
134
- //@ts-ignore
135
- disabled={!photo || isLoading}
136
- onPress={nextStep}
137
- style={{ flex: 1 }}
170
+ <MButton
171
+ disabled={!canSubmit}
172
+ onPress={nextStep}
173
+ style={commonStyles.fill}
174
+ >
175
+ {canSubmit ? (
176
+ <LinearGradient
177
+ colors={['#FF7A00', '#EF4123']}
178
+ start={{ x: 0, y: 0 }}
179
+ end={{ x: 1, y: 1 }}
180
+ style={[styles.submitButton, styles.submitShadow]}
138
181
  >
139
- <LinearGradient
140
- colors={
141
- photo ? ['#FF7A00', '#EF4123'] : ['#BDBDBD', '#BDBDBD']
142
- }
143
- style={[
144
- commonStyles.alignCenter,
145
- commonStyles.justifyCenter,
146
- {
147
- height: 40,
148
- borderRadius: 30,
149
- marginLeft: 8,
150
- },
151
- ]}
152
- >
153
- {isLoading ? (
154
- <ActivityIndicator color={'white'} size="small" />
155
- ) : (
156
- <MText
157
- style={[commonStyles.textNormal, { color: 'white' }]}
158
- >
159
- Tiếp tục
160
- </MText>
161
- )}
162
- </LinearGradient>
163
- </MButton>
182
+ <MText style={styles.submitText}>Tiếp tục</MText>
183
+ </LinearGradient>
184
+ ) : (
185
+ // Trạng thái chưa chụp/đang xử lý phải nhìn là biết chưa bấm được
186
+ <View style={[styles.submitButton, styles.submitDisabled]}>
187
+ {isLoading ? (
188
+ <ActivityIndicator color={'#FFFFFF'} size="small" />
189
+ ) : (
190
+ <MText style={styles.submitText}>Tiếp tục</MText>
191
+ )}
192
+ </View>
164
193
  )}
165
- </Observer>
194
+ </MButton>
166
195
  </View>
167
- <View
168
- style={{
169
- marginBottom: 24,
170
- marginTop: 8,
171
- flexDirection: 'row',
172
- justifyContent: 'center',
173
- }}
174
- >
175
- <MText style={{ fontSize: 12, color: '#333333' }}>
176
- Cung cấp bởi{' '}
177
- </MText>
196
+
197
+ <View style={styles.cimbRow}>
198
+ <MText style={styles.cimbText}>Cung cấp bởi </MText>
178
199
  <CIMBBank />
179
200
  </View>
180
201
  </SafeAreaView>
@@ -182,3 +203,125 @@ export const CimbSelfie = observer(function CimbSelfie(props: any) {
182
203
  </View>
183
204
  );
184
205
  });
206
+
207
+ const styles = StyleSheet.create({
208
+ background: {
209
+ position: 'absolute',
210
+ width: '100%',
211
+ height: '100%',
212
+ resizeMode: 'cover',
213
+ },
214
+ scrollContent: { paddingHorizontal: 24, paddingBottom: 24 },
215
+
216
+ card: {
217
+ marginTop: 20,
218
+ padding: 8,
219
+ borderRadius: 20,
220
+ backgroundColor: '#FFFFFF',
221
+ shadowColor: '#7A2E12',
222
+ shadowOffset: { width: 0, height: 10 },
223
+ shadowOpacity: 0.18,
224
+ shadowRadius: 20,
225
+ elevation: 8,
226
+ },
227
+ // Bán kính trong = bán kính card (20) - padding (8) để hai đường cong khớp nhau
228
+ previewFrame: {
229
+ width: '100%',
230
+ aspectRatio: PREVIEW_ASPECT,
231
+ borderRadius: 12,
232
+ overflow: 'hidden',
233
+ backgroundColor: '#F5EDE9',
234
+ },
235
+ preview: { width: '100%', height: '100%' },
236
+ badge: {
237
+ position: 'absolute',
238
+ left: 20,
239
+ bottom: 20,
240
+ flexDirection: 'row',
241
+ alignItems: 'center',
242
+ paddingHorizontal: 10,
243
+ paddingVertical: 5,
244
+ borderRadius: 14,
245
+ backgroundColor: 'rgba(0, 0, 0, 0.45)',
246
+ },
247
+ badgeDone: { backgroundColor: 'rgba(255, 255, 255, 0.94)' },
248
+ badgeText: { color: '#FFFFFF', fontSize: 11, fontWeight: '600' },
249
+ badgeTextDone: { color: '#28A745', marginLeft: 6 },
250
+
251
+ noteCard: {
252
+ marginTop: 20,
253
+ padding: 16,
254
+ borderRadius: 16,
255
+ backgroundColor: 'rgba(255, 255, 255, 0.75)',
256
+ borderWidth: 1,
257
+ borderColor: '#FFE1D3',
258
+ },
259
+ noteTitle: {
260
+ ...commonStyles.textNormalBold,
261
+ fontSize: 15,
262
+ color: '#333333',
263
+ },
264
+ noteRow: { flexDirection: 'row', marginTop: 12 },
265
+ noteBullet: { marginTop: 5 },
266
+ noteText: {
267
+ color: '#5A5A5A',
268
+ marginLeft: 10,
269
+ fontSize: 13,
270
+ lineHeight: 20,
271
+ flex: 1,
272
+ },
273
+
274
+ // SafeAreaView đã cộng inset dưới trên iOS nên chỉ cần khoảng thở cố định
275
+ footer: {
276
+ flexDirection: 'row',
277
+ paddingHorizontal: 24,
278
+ paddingTop: 4,
279
+ marginBottom: 16,
280
+ },
281
+ captureButton: {
282
+ flexDirection: 'row',
283
+ alignItems: 'center',
284
+ justifyContent: 'center',
285
+ backgroundColor: '#FFFFFF',
286
+ height: 48,
287
+ borderRadius: 24,
288
+ flex: 1,
289
+ marginRight: 10,
290
+ borderWidth: 1.5,
291
+ borderColor: '#EF4123',
292
+ },
293
+ buttonMuted: { opacity: 0.5 },
294
+ captureText: {
295
+ ...commonStyles.textNormal,
296
+ color: '#F05123',
297
+ fontWeight: '600',
298
+ marginLeft: 8,
299
+ },
300
+ submitButton: {
301
+ alignItems: 'center',
302
+ justifyContent: 'center',
303
+ height: 48,
304
+ borderRadius: 24,
305
+ },
306
+ submitShadow: {
307
+ shadowColor: '#EF4123',
308
+ shadowOffset: { width: 0, height: 6 },
309
+ shadowOpacity: 0.35,
310
+ shadowRadius: 12,
311
+ elevation: 6,
312
+ },
313
+ submitDisabled: { backgroundColor: '#D8D2CF' },
314
+ submitText: {
315
+ ...commonStyles.textNormal,
316
+ color: '#FFFFFF',
317
+ fontWeight: '600',
318
+ },
319
+
320
+ cimbRow: {
321
+ marginBottom: 24,
322
+ flexDirection: 'row',
323
+ justifyContent: 'center',
324
+ alignItems: 'center',
325
+ },
326
+ cimbText: { fontSize: 12, color: '#333333' },
327
+ });
@@ -353,8 +353,8 @@ export default function InfoLoanMotobike(props: any) {
353
353
  {values.gender === 0
354
354
  ? 'Nam'
355
355
  : values.gender === 1
356
- ? 'Nữ'
357
- : ''}
356
+ ? 'Nữ'
357
+ : ''}
358
358
  </MText>
359
359
  <DropDown2 />
360
360
  </TouchableOpacity>
@@ -625,6 +625,7 @@ const $textInput: ViewStyle = {
625
625
  height: 40,
626
626
  paddingHorizontal: 8,
627
627
  fontFamily: 'BeVietnamPro-Medium',
628
+ fontSize: 14,
628
629
  };
629
630
 
630
631
  const $label: TextStyle = {
@@ -402,6 +402,7 @@ const $textInput: ViewStyle = {
402
402
  height: 40,
403
403
  paddingHorizontal: 8,
404
404
  fontFamily: 'BeVietnamPro-Medium',
405
+ fontSize: 14,
405
406
  };
406
407
 
407
408
  const $label: TextStyle = {