react-native-timacare 3.3.63 → 3.3.65

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 (81) hide show
  1. package/lib/commonjs/components/AlertLoan.js +1 -1
  2. package/lib/commonjs/components/AlertLoan.js.flow +11 -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 +3 -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/home/DigitalTopupItem.js +1 -1
  14. package/lib/commonjs/screens/home/DigitalTopupItem.js.flow +2 -11
  15. package/lib/commonjs/screens/home/DigitalTopupItem.js.map +1 -1
  16. package/lib/commonjs/screens/home/ItemMotoBikeLoan.js +1 -1
  17. package/lib/commonjs/screens/home/ItemMotoBikeLoan.js.flow +2 -7
  18. package/lib/commonjs/screens/home/ItemMotoBikeLoan.js.map +1 -1
  19. package/lib/commonjs/screens/home/index.js +1 -1
  20. package/lib/commonjs/screens/home/index.js.flow +1 -1
  21. package/lib/commonjs/screens/home/index.js.map +1 -1
  22. package/lib/commonjs/screens/selfie/SelfieCamera.js +2 -0
  23. package/lib/commonjs/screens/selfie/SelfieCamera.js.flow +302 -0
  24. package/lib/commonjs/screens/selfie/SelfieCamera.js.map +1 -0
  25. package/lib/commonjs/screens/selfie/index.js +1 -1
  26. package/lib/commonjs/screens/selfie/index.js.flow +295 -165
  27. package/lib/commonjs/screens/selfie/index.js.map +1 -1
  28. package/lib/commonjs/screens/v3/ReviewInfoLoanBuyCar.js +2 -0
  29. package/lib/commonjs/screens/v3/ReviewInfoLoanBuyCar.js.flow +521 -0
  30. package/lib/commonjs/screens/v3/ReviewInfoLoanBuyCar.js.map +1 -0
  31. package/lib/commonjs/services/api/api.js +1 -1
  32. package/lib/commonjs/services/api/api.js.flow +41 -7
  33. package/lib/commonjs/services/api/api.js.map +1 -1
  34. package/lib/module/components/AlertLoan.js +1 -1
  35. package/lib/module/components/AlertLoan.js.map +1 -1
  36. package/lib/module/components/ItemTimaOne.js +1 -1
  37. package/lib/module/components/ItemTimaOne.js.map +1 -1
  38. package/lib/module/navigation/primary-navigator.js +1 -1
  39. package/lib/module/navigation/primary-navigator.js.map +1 -1
  40. package/lib/module/screens/full-submit/selfie.js +1 -1
  41. package/lib/module/screens/full-submit/selfie.js.map +1 -1
  42. package/lib/module/screens/home/DigitalTopupItem.js +1 -1
  43. package/lib/module/screens/home/DigitalTopupItem.js.map +1 -1
  44. package/lib/module/screens/home/ItemMotoBikeLoan.js +1 -1
  45. package/lib/module/screens/home/ItemMotoBikeLoan.js.map +1 -1
  46. package/lib/module/screens/home/index.js +1 -1
  47. package/lib/module/screens/home/index.js.map +1 -1
  48. package/lib/module/screens/selfie/SelfieCamera.js +2 -0
  49. package/lib/module/screens/selfie/SelfieCamera.js.map +1 -0
  50. package/lib/module/screens/selfie/index.js +1 -1
  51. package/lib/module/screens/selfie/index.js.map +1 -1
  52. package/lib/module/screens/v3/ReviewInfoLoanBuyCar.js +2 -0
  53. package/lib/module/screens/v3/ReviewInfoLoanBuyCar.js.map +1 -0
  54. package/lib/module/services/api/api.js +1 -1
  55. package/lib/module/services/api/api.js.map +1 -1
  56. package/lib/typescript/components/AlertLoan.d.ts.map +1 -1
  57. package/lib/typescript/components/ItemTimaOne.d.ts.map +1 -1
  58. package/lib/typescript/navigation/primary-navigator.d.ts +2 -0
  59. package/lib/typescript/navigation/primary-navigator.d.ts.map +1 -1
  60. package/lib/typescript/screens/full-submit/selfie.d.ts.map +1 -1
  61. package/lib/typescript/screens/home/DigitalTopupItem.d.ts.map +1 -1
  62. package/lib/typescript/screens/home/ItemMotoBikeLoan.d.ts.map +1 -1
  63. package/lib/typescript/screens/selfie/SelfieCamera.d.ts +2 -0
  64. package/lib/typescript/screens/selfie/SelfieCamera.d.ts.map +1 -0
  65. package/lib/typescript/screens/selfie/index.d.ts.map +1 -1
  66. package/lib/typescript/screens/v3/ReviewInfoLoanBuyCar.d.ts +2 -0
  67. package/lib/typescript/screens/v3/ReviewInfoLoanBuyCar.d.ts.map +1 -0
  68. package/lib/typescript/services/api/api.d.ts +32 -0
  69. package/lib/typescript/services/api/api.d.ts.map +1 -1
  70. package/package.json +1 -1
  71. package/src/components/AlertLoan.tsx +11 -2
  72. package/src/components/ItemTimaOne.tsx +3 -0
  73. package/src/navigation/primary-navigator.tsx +9 -0
  74. package/src/screens/full-submit/selfie.tsx +257 -114
  75. package/src/screens/home/DigitalTopupItem.tsx +2 -11
  76. package/src/screens/home/ItemMotoBikeLoan.tsx +2 -7
  77. package/src/screens/home/index.tsx +1 -1
  78. package/src/screens/selfie/SelfieCamera.tsx +302 -0
  79. package/src/screens/selfie/index.tsx +295 -165
  80. package/src/screens/v3/ReviewInfoLoanBuyCar.tsx +521 -0
  81. 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
+ });
@@ -315,17 +315,7 @@ export default function DigitalTopupItem({
315
315
  <View style={$row}>
316
316
  <View style={styles.statusLeft}>
317
317
  <MText style={styles.statusLabel}>Trạng thái</MText>
318
- <MText style={styles.statusValue}>
319
- {step <= 1
320
- ? 'Chờ cập nhật thông tin tài sản'
321
- : step === 3
322
- ? 'Chờ cập nhật thông tin khoản vay'
323
- : isPersonalStep
324
- ? 'Chờ cập nhật thông tin cá nhân'
325
- : step === 9
326
- ? 'Chờ cập nhật eKYC'
327
- : 'Đơn vay đang trong quá trình xử lý'}
328
- </MText>
318
+ <MText style={styles.statusValue}>{item?.statusTima}</MText>
329
319
  </View>
330
320
  {primaryAction && (
331
321
  <UpdateButton
@@ -599,6 +589,7 @@ const styles = StyleSheet.create({
599
589
  statusValue: {
600
590
  fontSize: 12,
601
591
  fontWeight: 'bold',
592
+ marginTop: 5,
602
593
  },
603
594
  updateButton: {
604
595
  height: 30,
@@ -224,13 +224,7 @@ export default function ItemMotoBikeLoan({
224
224
  <View style={styles.statusSection}>
225
225
  <View style={styles.statusLeft}>
226
226
  <MText style={styles.statusLabel}>Trạng thái</MText>
227
- <MText style={styles.statusValue}>
228
- {stepOnePending
229
- ? 'Chờ cập nhật thông tin cá nhân'
230
- : stepTwoActive
231
- ? 'Chờ cập nhật thông tin xe máy'
232
- : 'Đơn vay đang chờ phê duyệt'}
233
- </MText>
227
+ <MText style={styles.statusValue}>{item?.statusTima}</MText>
234
228
  </View>
235
229
  {(stepOnePending || stepTwoActive) && (
236
230
  <TouchableOpacity onPress={stepOnePending ? goToStep1 : goToStep2}>
@@ -500,6 +494,7 @@ const styles = StyleSheet.create({
500
494
  statusValue: {
501
495
  fontSize: 12,
502
496
  fontWeight: 'bold',
497
+ marginTop: 5,
503
498
  },
504
499
  updateButton: {
505
500
  height: 30,
@@ -1729,7 +1729,7 @@ export const Home = observer(function Home() {
1729
1729
  fontWeight: 'bold',
1730
1730
  }}
1731
1731
  >
1732
- {item?.loanStatus ?? 'Chưa xác định'}
1732
+ {item?.statusTima}
1733
1733
  </MText>
1734
1734
  </View>
1735
1735
  <View style={styles.dividerThin} />