react-native-timacare 3.3.20 → 3.3.21

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 (109) hide show
  1. package/lib/commonjs/assets/tts/f88.png +0 -0
  2. package/lib/commonjs/assets/v3/11.svg +13 -0
  3. package/lib/commonjs/assets/v3/12.svg +21 -0
  4. package/lib/commonjs/assets/v3/index.js +1 -1
  5. package/lib/commonjs/assets/v3/index.js.flow +4 -0
  6. package/lib/commonjs/assets/v3/index.js.map +1 -1
  7. package/lib/commonjs/components/MSelect.js +1 -1
  8. package/lib/commonjs/components/MSelect.js.flow +4 -2
  9. package/lib/commonjs/components/MSelect.js.map +1 -1
  10. package/lib/commonjs/components/select/index.js +1 -1
  11. package/lib/commonjs/components/select/index.js.flow +4 -2
  12. package/lib/commonjs/components/select/index.js.map +1 -1
  13. package/lib/commonjs/navigation/primary-navigator.js +1 -1
  14. package/lib/commonjs/navigation/primary-navigator.js.flow +15 -0
  15. package/lib/commonjs/navigation/primary-navigator.js.map +1 -1
  16. package/lib/commonjs/screens/home/ItemMotoBikeLoan.js +2 -0
  17. package/lib/commonjs/screens/home/ItemMotoBikeLoan.js.flow +845 -0
  18. package/lib/commonjs/screens/home/ItemMotoBikeLoan.js.map +1 -0
  19. package/lib/commonjs/screens/home/index.js +1 -1
  20. package/lib/commonjs/screens/home/index.js.flow +8 -1
  21. package/lib/commonjs/screens/home/index.js.map +1 -1
  22. package/lib/commonjs/screens/motobike/InfoLoanMotobike.js +2 -0
  23. package/lib/commonjs/screens/motobike/InfoLoanMotobike.js.flow +674 -0
  24. package/lib/commonjs/screens/motobike/InfoLoanMotobike.js.map +1 -0
  25. package/lib/commonjs/screens/motobike/PolicyF88.js +2 -0
  26. package/lib/commonjs/screens/motobike/PolicyF88.js.flow +131 -0
  27. package/lib/commonjs/screens/motobike/PolicyF88.js.map +1 -0
  28. package/lib/commonjs/screens/motobike/ReviewLoanMotobike.js +2 -0
  29. package/lib/commonjs/screens/motobike/ReviewLoanMotobike.js.flow +453 -0
  30. package/lib/commonjs/screens/motobike/ReviewLoanMotobike.js.map +1 -0
  31. package/lib/commonjs/screens/toan-trinh-so/TTSSelfie.js +1 -1
  32. package/lib/commonjs/screens/toan-trinh-so/TTSSelfie.js.flow +4 -0
  33. package/lib/commonjs/screens/toan-trinh-so/TTSSelfie.js.map +1 -1
  34. package/lib/commonjs/screens/toan-trinh-so/VehicleRegistrationBack.js +1 -1
  35. package/lib/commonjs/screens/toan-trinh-so/VehicleRegistrationBack.js.flow +28 -12
  36. package/lib/commonjs/screens/toan-trinh-so/VehicleRegistrationBack.js.map +1 -1
  37. package/lib/commonjs/services/api/api.js +1 -1
  38. package/lib/commonjs/services/api/api.js.flow +80 -0
  39. package/lib/commonjs/services/api/api.js.map +1 -1
  40. package/lib/module/assets/tts/f88.png +0 -0
  41. package/lib/module/assets/v3/11.svg +13 -0
  42. package/lib/module/assets/v3/12.svg +21 -0
  43. package/lib/module/assets/v3/index.js +1 -1
  44. package/lib/module/assets/v3/index.js.map +1 -1
  45. package/lib/module/components/MSelect.js +1 -1
  46. package/lib/module/components/MSelect.js.map +1 -1
  47. package/lib/module/components/select/index.js +1 -1
  48. package/lib/module/components/select/index.js.map +1 -1
  49. package/lib/module/navigation/primary-navigator.js +1 -1
  50. package/lib/module/navigation/primary-navigator.js.map +1 -1
  51. package/lib/module/screens/home/ItemMotoBikeLoan.js +2 -0
  52. package/lib/module/screens/home/ItemMotoBikeLoan.js.map +1 -0
  53. package/lib/module/screens/home/index.js +1 -1
  54. package/lib/module/screens/home/index.js.map +1 -1
  55. package/lib/module/screens/motobike/InfoLoanMotobike.js +2 -0
  56. package/lib/module/screens/motobike/InfoLoanMotobike.js.map +1 -0
  57. package/lib/module/screens/motobike/PolicyF88.js +2 -0
  58. package/lib/module/screens/motobike/PolicyF88.js.map +1 -0
  59. package/lib/module/screens/motobike/ReviewLoanMotobike.js +2 -0
  60. package/lib/module/screens/motobike/ReviewLoanMotobike.js.map +1 -0
  61. package/lib/module/screens/toan-trinh-so/TTSSelfie.js +1 -1
  62. package/lib/module/screens/toan-trinh-so/TTSSelfie.js.map +1 -1
  63. package/lib/module/screens/toan-trinh-so/VehicleRegistrationBack.js +1 -1
  64. package/lib/module/screens/toan-trinh-so/VehicleRegistrationBack.js.map +1 -1
  65. package/lib/module/services/api/api.js +1 -1
  66. package/lib/module/services/api/api.js.map +1 -1
  67. package/lib/typescript/assets/v3/index.d.ts +3 -1
  68. package/lib/typescript/assets/v3/index.d.ts.map +1 -1
  69. package/lib/typescript/components/MSelect.d.ts.map +1 -1
  70. package/lib/typescript/components/select/index.d.ts.map +1 -1
  71. package/lib/typescript/navigation/primary-navigator.d.ts +3 -0
  72. package/lib/typescript/navigation/primary-navigator.d.ts.map +1 -1
  73. package/lib/typescript/screens/home/ItemMotoBikeLoan.d.ts +8 -0
  74. package/lib/typescript/screens/home/ItemMotoBikeLoan.d.ts.map +1 -0
  75. package/lib/typescript/screens/home/index.d.ts.map +1 -1
  76. package/lib/typescript/screens/motobike/InfoLoanMotobike.d.ts +2 -0
  77. package/lib/typescript/screens/motobike/InfoLoanMotobike.d.ts.map +1 -0
  78. package/lib/typescript/screens/motobike/PolicyF88.d.ts +2 -0
  79. package/lib/typescript/screens/motobike/PolicyF88.d.ts.map +1 -0
  80. package/lib/typescript/screens/motobike/ReviewLoanMotobike.d.ts +2 -0
  81. package/lib/typescript/screens/motobike/ReviewLoanMotobike.d.ts.map +1 -0
  82. package/lib/typescript/screens/toan-trinh-so/TTSSelfie.d.ts.map +1 -1
  83. package/lib/typescript/screens/toan-trinh-so/VehicleRegistrationBack.d.ts.map +1 -1
  84. package/lib/typescript/services/api/api.d.ts +80 -0
  85. package/lib/typescript/services/api/api.d.ts.map +1 -1
  86. package/package.json +1 -1
  87. package/src/assets/tts/f88.png +0 -0
  88. package/src/assets/v3/11.svg +13 -0
  89. package/src/assets/v3/12.svg +21 -0
  90. package/src/assets/v3/index.tsx +4 -0
  91. package/src/components/MSelect.tsx +4 -2
  92. package/src/components/select/index.tsx +4 -2
  93. package/src/navigation/primary-navigator.tsx +15 -0
  94. package/src/screens/home/ItemMotoBikeLoan.tsx +845 -0
  95. package/src/screens/home/index.tsx +8 -1
  96. package/src/screens/motobike/InfoLoanMotobike.tsx +674 -0
  97. package/src/screens/motobike/PolicyF88.tsx +131 -0
  98. package/src/screens/motobike/ReviewLoanMotobike.tsx +453 -0
  99. package/src/screens/toan-trinh-so/TTSSelfie.tsx +4 -0
  100. package/src/screens/toan-trinh-so/VehicleRegistrationBack.tsx +28 -12
  101. package/src/services/api/api.ts +80 -0
  102. package/lib/commonjs/components/CommonSelect.js +0 -2
  103. package/lib/commonjs/components/CommonSelect.js.flow +0 -12
  104. package/lib/commonjs/components/CommonSelect.js.map +0 -1
  105. package/lib/module/components/CommonSelect.js +0 -2
  106. package/lib/module/components/CommonSelect.js.map +0 -1
  107. package/lib/typescript/components/CommonSelect.d.ts +0 -8
  108. package/lib/typescript/components/CommonSelect.d.ts.map +0 -1
  109. package/src/components/CommonSelect.tsx +0 -12
@@ -103,6 +103,7 @@ import AlertLoan from '../../components/AlertLoan';
103
103
  import DigitalTopupItem from './DigitalTopupItem';
104
104
  import ModalOptionLoanDigital from '../../components/ModalOptionLoanDigital';
105
105
  import { useSafeAreaInsets } from 'react-native-safe-area-context';
106
+ import ItemMotoBikeLoan from './ItemMotoBikeLoan';
106
107
 
107
108
  const listBanners = [
108
109
  require('../../assets/img/banner1.png'),
@@ -527,6 +528,13 @@ export const Home = observer(function Home() {
527
528
  navigation={navigation}
528
529
  callback={() => onRefresh()}
529
530
  />
531
+ ) : // vay mua xe máy
532
+ item?.typeLoan === 8 ? (
533
+ <ItemMotoBikeLoan
534
+ item={item}
535
+ navigation={navigation}
536
+ callback={onRefresh}
537
+ />
530
538
  ) : (
531
539
  <View>
532
540
  {/* // luồng CIMB */}
@@ -2142,7 +2150,6 @@ export const Home = observer(function Home() {
2142
2150
  </View>
2143
2151
  );
2144
2152
  })}
2145
-
2146
2153
  <Observer>
2147
2154
  {() => (
2148
2155
  <View>
@@ -0,0 +1,674 @@
1
+ //@ts-nocheck
2
+ import React, { useEffect, useMemo, useRef, useState } from 'react';
3
+ import {
4
+ Alert,
5
+ ScrollView,
6
+ TextInput,
7
+ TextStyle,
8
+ TouchableOpacity,
9
+ View,
10
+ ViewStyle,
11
+ } from 'react-native';
12
+ import MHeader from '../../components/MHeader';
13
+ import { Api } from '../../services/api';
14
+ import Loading from '../../components/Loading';
15
+ import { DropDown2, IconBack } from '../../assets/icons';
16
+ import { MText } from '../../components/MText';
17
+ import { Formik } from 'formik';
18
+ import { commonStyles } from '../CommonStyles';
19
+ import { CommonActions, useNavigation } from '@react-navigation/native';
20
+ import { ScreenNames } from '../../navigation';
21
+ import { EnumGender, formatDDMMYYY } from '../../utils';
22
+ import ttsStore from '../toan-trinh-so/store';
23
+ import MButton from '../../components/MButton';
24
+ import LinearGradient from 'react-native-linear-gradient';
25
+ import * as yup from 'yup';
26
+ import DatePicker from 'react-native-date-picker';
27
+ import moment from 'moment';
28
+ import KeyboardSpacer from '../../components/keyboardspace';
29
+
30
+ export default function InfoLoanMotobike(props: any) {
31
+ const navigation = useNavigation();
32
+ const loan = props?.route?.params?.loan;
33
+ const [isLoading, setIsLoading] = useState(false);
34
+ const [showDate, setShowDate] = useState(false);
35
+ const [typeDate, setTypeDate] = useState(1);
36
+ const formRef = useRef<any>();
37
+ const getData = async () => {
38
+ try {
39
+ setIsLoading(true);
40
+ const response = await Api.getInstance().getInfoMotobikeLoan(loan?.id);
41
+ setIsLoading(false);
42
+ if (response.kind === 'ok' && response.data?.meta?.errorCode === 200) {
43
+ formRef.current.setFieldValue(
44
+ 'loanBriefId',
45
+ response?.data?.data?.loanBriefId
46
+ );
47
+ formRef.current.setFieldValue(
48
+ 'customerId',
49
+ response?.data?.data?.customerId
50
+ );
51
+ formRef.current.setFieldValue(
52
+ 'fullName',
53
+ response?.data?.data?.fullName
54
+ );
55
+ formRef.current.setFieldValue(
56
+ 'dob',
57
+ response?.data?.data?.dob
58
+ ? formatDDMMYYY(response?.data?.data?.dob)
59
+ : ''
60
+ );
61
+ formRef.current.setFieldValue(
62
+ 'gender',
63
+ response?.data?.data?.gender ?? null
64
+ );
65
+ formRef.current.setFieldValue(
66
+ 'nationalCard',
67
+ response?.data?.data?.nationalCard
68
+ ? response?.data?.data?.nationalCard
69
+ : ''
70
+ );
71
+ formRef.current.setFieldValue(
72
+ 'dateNationalId',
73
+ response?.data?.data?.dateNationalId
74
+ ? formatDDMMYYY(response?.data?.data?.dateNationalId)
75
+ : ''
76
+ );
77
+
78
+ formRef.current.setFieldValue(
79
+ 'provinceId',
80
+ response?.data?.data?.provinceId
81
+ ? response?.data?.data?.provinceId
82
+ : null
83
+ );
84
+ formRef.current.setFieldValue(
85
+ 'provinceName',
86
+ response?.data?.data?.provinceName
87
+ ? response?.data?.data?.provinceName
88
+ : ''
89
+ );
90
+ if (response?.data?.data?.provinceId) {
91
+ ttsStore.getDistrict(response?.data?.data?.provinceId);
92
+ }
93
+
94
+ formRef.current.setFieldValue(
95
+ 'districtId',
96
+ response?.data?.data?.districtId
97
+ ? response?.data?.data?.districtId
98
+ : null
99
+ );
100
+ formRef.current.setFieldValue(
101
+ 'districtName',
102
+ response?.data?.data?.districtName
103
+ ? response?.data?.data?.districtName
104
+ : ''
105
+ );
106
+ if (response?.data?.data?.districtId) {
107
+ ttsStore.getWard(response?.data?.data?.districtId);
108
+ }
109
+
110
+ formRef.current.setFieldValue(
111
+ 'wardId',
112
+ response?.data?.data?.wardId ? response?.data?.data?.wardId : null
113
+ );
114
+ formRef.current.setFieldValue(
115
+ 'wardName',
116
+ response?.data?.data?.wardName ? response?.data?.data?.wardName : ''
117
+ );
118
+
119
+ formRef.current.setFieldValue(
120
+ 'address',
121
+ response?.data?.data?.address ? response?.data?.data?.address : ''
122
+ );
123
+ } else {
124
+ Alert.alert(
125
+ 'Thông báo',
126
+ response?.data?.meta?.errorMessage ||
127
+ 'Có lỗi xảy ra, vui lòng thử lại sau'
128
+ );
129
+ }
130
+ } catch (error) {
131
+ Alert.alert('Thông báo', 'Có lỗi xảy ra, vui lòng thử lại sau');
132
+ } finally {
133
+ setIsLoading(false);
134
+ }
135
+ };
136
+
137
+ useEffect(() => {
138
+ getData();
139
+ }, []);
140
+
141
+ const onSubmit = async (values) => {
142
+ const body = {
143
+ LoanBriefId: props?.route?.params?.loan?.id,
144
+ FullName: values.fullName,
145
+ Dob: moment(values.dob, 'DD/MM/YYYY').format('YYYY-MM-DD'),
146
+ Gender: values.gender,
147
+ NationalCard: values.nationalCard,
148
+ DateNationalId: moment(values.dateNationalId, 'DD/MM/YYYY').format(
149
+ 'YYYY-MM-DD'
150
+ ),
151
+ ProvinceId: values.provinceId,
152
+ DistrictId: values.districtId,
153
+ WardId: values.wardId,
154
+ Address: values.address,
155
+ };
156
+
157
+ try {
158
+ setIsLoading(true);
159
+ const response = await Api.getInstance().updateInfoMotobikeLoan(body);
160
+ setIsLoading(false);
161
+ if (response.kind === 'ok') {
162
+ if (response.data?.meta?.errorCode === 200) {
163
+ navigation.dispatch(
164
+ CommonActions.reset({
165
+ index: 1,
166
+ routes: [{ name: ScreenNames.Main }],
167
+ })
168
+ );
169
+ } else {
170
+ Alert.alert('Thông báo', response.data?.meta?.errorMessage);
171
+ }
172
+ } else {
173
+ Alert.alert('Thông báo', 'Có lỗi xảy ra. Vui lòng thử lại sau');
174
+ }
175
+ } catch (error) {
176
+ setIsLoading(false);
177
+ }
178
+ };
179
+
180
+ return (
181
+ <View style={{ flex: 1 }}>
182
+ <MHeader title="Vay Online 24/7" />
183
+ <View style={commonStyles.fill}>
184
+ <View style={$h} />
185
+ <View style={$bg}>
186
+ <View
187
+ style={{
188
+ paddingVertical: 10,
189
+ flexDirection: 'row',
190
+ alignItems: 'center',
191
+ paddingHorizontal: 16,
192
+ }}
193
+ >
194
+ <TouchableOpacity
195
+ style={{
196
+ zIndex: 1000,
197
+ }}
198
+ onPress={() => {
199
+ Alert.alert(
200
+ 'Thoát cập nhật thông tin',
201
+ 'Bạn có chắc chắn muốn thoát cập nhật thông tin không?',
202
+ [
203
+ {
204
+ text: 'Có',
205
+ onPress: () => {
206
+ navigation.dispatch(
207
+ CommonActions.reset({
208
+ index: 1,
209
+ routes: [{ name: ScreenNames.Main }],
210
+ })
211
+ );
212
+ },
213
+ },
214
+ {
215
+ text: 'Không',
216
+ },
217
+ ]
218
+ );
219
+ }}
220
+ >
221
+ <IconBack />
222
+ </TouchableOpacity>
223
+ <MText style={$title}>Thông tin cá nhân</MText>
224
+ </View>
225
+ <Formik
226
+ onSubmit={onSubmit}
227
+ innerRef={formRef}
228
+ initialValues={{
229
+ loanBriefId: 0,
230
+ customerId: 0,
231
+ fullName: '',
232
+ dob: '',
233
+ gender: null,
234
+ nationalCard: '',
235
+ dateNationalId: '',
236
+ provinceId: null,
237
+ provinceName: '',
238
+ districtId: null,
239
+ districtName: 'null',
240
+ wardId: null,
241
+ wardName: '',
242
+ address: '',
243
+ }}
244
+ validationSchema={yup.object().shape({
245
+ fullName: yup.string().required('Vui lòng nhập họ tên'),
246
+ dob: yup.string().required('Vui lòng nhập ngày sinh').nullable(),
247
+ gender: yup
248
+ .number()
249
+ .required('Vui lòng chọn giới tính')
250
+ .nullable(),
251
+ nationalCard: yup.string().required('Vui lòng nhập CCCD/CMND'),
252
+ dateNationalId: yup
253
+ .string()
254
+ .required('Vui lòng nhập ngày cấp')
255
+ .nullable(),
256
+
257
+ provinceName: yup.string().required('Thành phố là bắt buộc'),
258
+ districtName: yup.string().required('Quận huyện là bắt buộc'),
259
+ wardName: yup.string().required('Phường xã là bắt buộc'),
260
+ address: yup.string().required('Địa chỉ là bắt buộc'),
261
+ })}
262
+ >
263
+ {({
264
+ values,
265
+ errors,
266
+ handleChange,
267
+ handleSubmit,
268
+ setFieldValue,
269
+ }) => {
270
+ const renderView = useMemo(
271
+ () => (
272
+ <ScrollView
273
+ style={[commonStyles.fill, { paddingHorizontal: 16 }]}
274
+ >
275
+ <MText style={$title2}>1.1 Thông tin cá nhân</MText>
276
+ <MText style={$label}>Họ và tên</MText>
277
+ <TextInput
278
+ style={[
279
+ $textInput,
280
+ {
281
+ color: '#333333',
282
+ fontSize: 16,
283
+ fontWeight: '500',
284
+ fontFamily: 'BeVietnamPro-Medium',
285
+ },
286
+ ]}
287
+ value={values.fullName}
288
+ onChangeText={handleChange('fullName')}
289
+ />
290
+ {errors && errors.fullName && (
291
+ <MText style={$error}>{errors.fullName}</MText>
292
+ )}
293
+
294
+ <View style={[$row, { marginTop: 16 }]}>
295
+ <View style={[commonStyles.fill]}>
296
+ <MText style={$label}>Sinh ngày</MText>
297
+ <TouchableOpacity
298
+ style={$select}
299
+ onPress={() => {
300
+ setTypeDate(1);
301
+ setShowDate(true);
302
+ }}
303
+ >
304
+ <MText
305
+ style={{
306
+ color: '#333333',
307
+ fontSize: 16,
308
+ fontWeight: '500',
309
+ fontFamily: 'BeVietnamPro-Medium',
310
+ }}
311
+ >
312
+ {values.dob}
313
+ </MText>
314
+ </TouchableOpacity>
315
+ {errors && errors.dob && (
316
+ <MText style={$error}>{errors.dob}</MText>
317
+ )}
318
+ </View>
319
+ <View style={[commonStyles.fill]}>
320
+ <MText style={$label}>Giới tính</MText>
321
+ <TouchableOpacity
322
+ style={$select}
323
+ onPress={() => {
324
+ navigation.push(ScreenNames.MSelect, {
325
+ title: 'Chọn giới tính',
326
+ data: EnumGender,
327
+ callback: (item) => {
328
+ setFieldValue('gender', item.id);
329
+ },
330
+ });
331
+ }}
332
+ >
333
+ <MText
334
+ style={{
335
+ color: '#333333',
336
+ fontSize: 16,
337
+ fontWeight: '500',
338
+ flex: 1,
339
+ }}
340
+ >
341
+ {values.gender === 0
342
+ ? 'Nam'
343
+ : values.gender === 1
344
+ ? 'Nữ'
345
+ : ''}
346
+ </MText>
347
+ <DropDown2 />
348
+ </TouchableOpacity>
349
+ {errors && errors.gender && (
350
+ <MText style={$error}>{errors.gender}</MText>
351
+ )}
352
+ </View>
353
+ </View>
354
+
355
+ <View style={[$row]}>
356
+ <View style={[commonStyles.fill]}>
357
+ <MText style={$label}>Số CCCD/CMND</MText>
358
+ <TextInput
359
+ keyboardType="number-pad"
360
+ style={[
361
+ $textInput,
362
+ {
363
+ color: '#333333',
364
+ fontSize: 16,
365
+ fontWeight: '500',
366
+ },
367
+ ]}
368
+ value={values.nationalCard}
369
+ onChangeText={handleChange('nationalCard')}
370
+ />
371
+ {errors && errors.nationalCard && (
372
+ <MText style={$error}>{errors.nationalCard}</MText>
373
+ )}
374
+ </View>
375
+ <View style={[commonStyles.fill]}>
376
+ <MText style={$label}>Ngày cấp</MText>
377
+ <TouchableOpacity
378
+ style={$select}
379
+ onPress={() => {
380
+ setTypeDate(2);
381
+ setShowDate(true);
382
+ }}
383
+ >
384
+ <MText
385
+ numberOfLines={1}
386
+ style={{
387
+ color:
388
+ values.dateNationalId !== ''
389
+ ? '#333333'
390
+ : '#BDBDBD',
391
+ fontSize: 16,
392
+ fontWeight: '500',
393
+ flex: 1,
394
+ }}
395
+ >
396
+ {values.dateNationalId !== ''
397
+ ? values.dateNationalId
398
+ : 'DD/MM/YYYY'}
399
+ </MText>
400
+ </TouchableOpacity>
401
+ {errors && errors.dateNationalId && (
402
+ <MText style={$error}>{errors.dateNationalId}</MText>
403
+ )}
404
+ </View>
405
+ </View>
406
+
407
+ <MText style={[$title2, { marginTop: 16 }]}>
408
+ 1.2 Nơi ở hiện tại
409
+ </MText>
410
+
411
+ <View style={[$row, { marginTop: 16 }]}>
412
+ <View style={[commonStyles.fill]}>
413
+ <MText style={$label}>Tỉnh/ Thành phố</MText>
414
+ <TouchableOpacity
415
+ style={$select}
416
+ onPress={() => {
417
+ navigation.push(ScreenNames.CommonSelect, {
418
+ title: 'Tỉnh/ Thành phố',
419
+ data: ttsStore.listProvince,
420
+ callback: (item) => {
421
+ setFieldValue('provinceId', item.id);
422
+ setFieldValue('provinceName', item?.name);
423
+ setFieldValue('districtId', null);
424
+ setFieldValue('districtName', '');
425
+ setFieldValue('wardId', null);
426
+ setFieldValue('wardName', '');
427
+ ttsStore.getDistrict(item.id);
428
+ },
429
+ });
430
+ }}
431
+ >
432
+ <MText
433
+ numberOfLines={1}
434
+ style={{
435
+ color: '#333333',
436
+ fontSize: 16,
437
+ fontWeight: '500',
438
+ flex: 1,
439
+ fontFamily: 'BeVietnamPro-Medium',
440
+ }}
441
+ >
442
+ {values.provinceName}
443
+ </MText>
444
+ <DropDown2 />
445
+ </TouchableOpacity>
446
+ {errors && errors.provinceName && (
447
+ <MText style={$error}>{errors.provinceName}</MText>
448
+ )}
449
+ </View>
450
+ <View style={[commonStyles.fill]}>
451
+ <MText style={$label}>Quận/ Huyện</MText>
452
+ <TouchableOpacity
453
+ style={$select}
454
+ onPress={() => {
455
+ navigation.push(ScreenNames.CommonSelect, {
456
+ title: 'Quận/ Huyện',
457
+ data: ttsStore.listDistrict,
458
+ callback: (item) => {
459
+ setFieldValue('districtId', item?.id);
460
+ setFieldValue('districtName', item?.name);
461
+ setFieldValue('wardId', null);
462
+ setFieldValue('wardName', '');
463
+ ttsStore.getWard(item.id);
464
+ },
465
+ });
466
+ }}
467
+ >
468
+ <MText
469
+ numberOfLines={1}
470
+ style={{
471
+ color: '#333333',
472
+ fontSize: 16,
473
+ fontWeight: '500',
474
+ flex: 1,
475
+ }}
476
+ >
477
+ {values.districtName}
478
+ </MText>
479
+ <DropDown2 />
480
+ </TouchableOpacity>
481
+ {errors && errors.districtName && (
482
+ <MText style={$error}>{errors.districtName}</MText>
483
+ )}
484
+ </View>
485
+ </View>
486
+ <MText style={[$label]}>Phường/ Xã</MText>
487
+ <TouchableOpacity
488
+ style={$select}
489
+ onPress={() => {
490
+ navigation.push(ScreenNames.CommonSelect, {
491
+ title: 'Phường/ Xã',
492
+ data: ttsStore.listWard,
493
+ callback: (item) => {
494
+ setFieldValue('wardId', item.id);
495
+ setFieldValue('wardName', item?.name);
496
+ },
497
+ });
498
+ }}
499
+ >
500
+ <MText
501
+ numberOfLines={1}
502
+ style={{
503
+ color: '#333333',
504
+ fontSize: 16,
505
+ fontWeight: '500',
506
+ flex: 1,
507
+ fontFamily: 'BeVietnamPro-Medium',
508
+ }}
509
+ >
510
+ {values.wardName}
511
+ </MText>
512
+ <DropDown2 />
513
+ </TouchableOpacity>
514
+ {errors && errors.wardName && (
515
+ <MText style={$error}>{errors.wardName}</MText>
516
+ )}
517
+ <MText style={[$label, { marginTop: 16 }]}>
518
+ Địa chỉ chi tiết
519
+ </MText>
520
+ <TextInput
521
+ style={[
522
+ $textInput,
523
+ {
524
+ color: '#333333',
525
+ fontSize: 16,
526
+ fontWeight: '500',
527
+ },
528
+ ]}
529
+ value={values.address}
530
+ onChangeText={handleChange('address')}
531
+ />
532
+ {errors && errors.address && (
533
+ <MText style={$error}>{errors.address}</MText>
534
+ )}
535
+
536
+ <MButton
537
+ onPress={() => {
538
+ handleSubmit();
539
+ }}
540
+ style={{
541
+ marginVertical: 24,
542
+ }}
543
+ >
544
+ <LinearGradient
545
+ start={{ x: 1, y: 0 }}
546
+ end={{ x: 0, y: 1 }}
547
+ style={{
548
+ height: 40,
549
+ marginVertical: 16,
550
+ borderRadius: 30,
551
+ alignItems: 'center',
552
+ justifyContent: 'center',
553
+ }}
554
+ colors={['#FF7A00', '#EF4123']}
555
+ >
556
+ <MText
557
+ style={{
558
+ color: 'white',
559
+ fontSize: 16,
560
+ }}
561
+ >
562
+ Tiếp tục
563
+ </MText>
564
+ </LinearGradient>
565
+ </MButton>
566
+ </ScrollView>
567
+ ),
568
+ [values, errors]
569
+ );
570
+ return (
571
+ <>
572
+ {renderView}
573
+ <DatePicker
574
+ mode="date"
575
+ open={showDate}
576
+ modal
577
+ title="Chọn thời gian"
578
+ locale="vi"
579
+ date={new Date()}
580
+ onCancel={() => {
581
+ setShowDate(false);
582
+ }}
583
+ onConfirm={(date) => {
584
+ setShowDate(false);
585
+ if (typeDate === 1) {
586
+ setFieldValue('dob', formatDDMMYYY(date));
587
+ }
588
+ if (typeDate === 2) {
589
+ setFieldValue('dateNationalId', formatDDMMYYY(date));
590
+ }
591
+ }}
592
+ />
593
+ </>
594
+ );
595
+ }}
596
+ </Formik>
597
+ <KeyboardSpacer />
598
+ </View>
599
+ </View>
600
+ <Loading isLoading={isLoading} />
601
+ </View>
602
+ );
603
+ }
604
+ const $row: ViewStyle = {
605
+ flexDirection: 'row',
606
+ // alignItems: 'center',
607
+ marginBottom: 16,
608
+ gap: 16,
609
+ };
610
+
611
+ const $textInput: ViewStyle = {
612
+ borderWidth: 1,
613
+ borderRadius: 4,
614
+ borderColor: '#E0E0E0',
615
+ height: 40,
616
+ paddingHorizontal: 8,
617
+ fontFamily: 'BeVietnamPro-Medium',
618
+ };
619
+
620
+ const $label: TextStyle = {
621
+ fontSize: 14,
622
+ color: '#333333',
623
+ paddingBottom: 5,
624
+ };
625
+
626
+ const $title2: TextStyle = {
627
+ fontSize: 16,
628
+ fontWeight: 'bold',
629
+ color: '#333333',
630
+ paddingBottom: 10,
631
+ marginTop: 6,
632
+ };
633
+
634
+ const $title: TextStyle = {
635
+ fontSize: 16,
636
+ fontWeight: 'bold',
637
+ color: '#333333',
638
+ position: 'absolute',
639
+ left: 0,
640
+ right: 0,
641
+ textAlign: 'center',
642
+ };
643
+ const $h: ViewStyle = {
644
+ backgroundColor: '#EF592E',
645
+ position: 'absolute',
646
+ height: 30,
647
+ width: '100%',
648
+ };
649
+
650
+ const $bg: ViewStyle = {
651
+ borderTopLeftRadius: 30,
652
+ borderTopRightRadius: 30,
653
+ backgroundColor: 'white',
654
+ flex: 1,
655
+ };
656
+
657
+ const $select: ViewStyle = {
658
+ flexDirection: 'row',
659
+ height: 40,
660
+ alignItems: 'center',
661
+ paddingHorizontal: 8,
662
+ borderWidth: 1,
663
+ borderRadius: 4,
664
+ borderColor: '#E0E0E0',
665
+ };
666
+
667
+ const $error: TextStyle = {
668
+ color: '#EB5757',
669
+ fontSize: 14,
670
+ fontStyle: 'italic',
671
+ fontFamily: 'BeVietnamPro-Thin',
672
+ fontWeight: '300',
673
+ marginTop: 5,
674
+ };