react-native-timacare 3.3.20 → 3.3.22

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 (116) 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/ModalOptionLoanDigital.js +1 -1
  11. package/lib/commonjs/components/ModalOptionLoanDigital.js.flow +7 -15
  12. package/lib/commonjs/components/ModalOptionLoanDigital.js.map +1 -1
  13. package/lib/commonjs/components/select/index.js +1 -1
  14. package/lib/commonjs/components/select/index.js.flow +4 -2
  15. package/lib/commonjs/components/select/index.js.map +1 -1
  16. package/lib/commonjs/navigation/primary-navigator.js +1 -1
  17. package/lib/commonjs/navigation/primary-navigator.js.flow +15 -0
  18. package/lib/commonjs/navigation/primary-navigator.js.map +1 -1
  19. package/lib/commonjs/screens/home/ItemMotoBikeLoan.js +2 -0
  20. package/lib/commonjs/screens/home/ItemMotoBikeLoan.js.flow +845 -0
  21. package/lib/commonjs/screens/home/ItemMotoBikeLoan.js.map +1 -0
  22. package/lib/commonjs/screens/home/index.js +1 -1
  23. package/lib/commonjs/screens/home/index.js.flow +8 -3
  24. package/lib/commonjs/screens/home/index.js.map +1 -1
  25. package/lib/commonjs/screens/motobike/InfoLoanMotobike.js +2 -0
  26. package/lib/commonjs/screens/motobike/InfoLoanMotobike.js.flow +674 -0
  27. package/lib/commonjs/screens/motobike/InfoLoanMotobike.js.map +1 -0
  28. package/lib/commonjs/screens/motobike/PolicyF88.js +2 -0
  29. package/lib/commonjs/screens/motobike/PolicyF88.js.flow +131 -0
  30. package/lib/commonjs/screens/motobike/PolicyF88.js.map +1 -0
  31. package/lib/commonjs/screens/motobike/ReviewLoanMotobike.js +2 -0
  32. package/lib/commonjs/screens/motobike/ReviewLoanMotobike.js.flow +453 -0
  33. package/lib/commonjs/screens/motobike/ReviewLoanMotobike.js.map +1 -0
  34. package/lib/commonjs/screens/toan-trinh-so/TTSSelfie.js +1 -1
  35. package/lib/commonjs/screens/toan-trinh-so/TTSSelfie.js.flow +4 -0
  36. package/lib/commonjs/screens/toan-trinh-so/TTSSelfie.js.map +1 -1
  37. package/lib/commonjs/screens/toan-trinh-so/VehicleRegistrationBack.js +1 -1
  38. package/lib/commonjs/screens/toan-trinh-so/VehicleRegistrationBack.js.flow +28 -12
  39. package/lib/commonjs/screens/toan-trinh-so/VehicleRegistrationBack.js.map +1 -1
  40. package/lib/commonjs/services/api/api.js +1 -1
  41. package/lib/commonjs/services/api/api.js.flow +80 -0
  42. package/lib/commonjs/services/api/api.js.map +1 -1
  43. package/lib/module/assets/tts/f88.png +0 -0
  44. package/lib/module/assets/v3/11.svg +13 -0
  45. package/lib/module/assets/v3/12.svg +21 -0
  46. package/lib/module/assets/v3/index.js +1 -1
  47. package/lib/module/assets/v3/index.js.map +1 -1
  48. package/lib/module/components/MSelect.js +1 -1
  49. package/lib/module/components/MSelect.js.map +1 -1
  50. package/lib/module/components/ModalOptionLoanDigital.js +1 -1
  51. package/lib/module/components/ModalOptionLoanDigital.js.map +1 -1
  52. package/lib/module/components/select/index.js +1 -1
  53. package/lib/module/components/select/index.js.map +1 -1
  54. package/lib/module/navigation/primary-navigator.js +1 -1
  55. package/lib/module/navigation/primary-navigator.js.map +1 -1
  56. package/lib/module/screens/home/ItemMotoBikeLoan.js +2 -0
  57. package/lib/module/screens/home/ItemMotoBikeLoan.js.map +1 -0
  58. package/lib/module/screens/home/index.js +1 -1
  59. package/lib/module/screens/home/index.js.map +1 -1
  60. package/lib/module/screens/motobike/InfoLoanMotobike.js +2 -0
  61. package/lib/module/screens/motobike/InfoLoanMotobike.js.map +1 -0
  62. package/lib/module/screens/motobike/PolicyF88.js +2 -0
  63. package/lib/module/screens/motobike/PolicyF88.js.map +1 -0
  64. package/lib/module/screens/motobike/ReviewLoanMotobike.js +2 -0
  65. package/lib/module/screens/motobike/ReviewLoanMotobike.js.map +1 -0
  66. package/lib/module/screens/toan-trinh-so/TTSSelfie.js +1 -1
  67. package/lib/module/screens/toan-trinh-so/TTSSelfie.js.map +1 -1
  68. package/lib/module/screens/toan-trinh-so/VehicleRegistrationBack.js +1 -1
  69. package/lib/module/screens/toan-trinh-so/VehicleRegistrationBack.js.map +1 -1
  70. package/lib/module/services/api/api.js +1 -1
  71. package/lib/module/services/api/api.js.map +1 -1
  72. package/lib/typescript/assets/v3/index.d.ts +3 -1
  73. package/lib/typescript/assets/v3/index.d.ts.map +1 -1
  74. package/lib/typescript/components/MSelect.d.ts.map +1 -1
  75. package/lib/typescript/components/ModalOptionLoanDigital.d.ts.map +1 -1
  76. package/lib/typescript/components/select/index.d.ts.map +1 -1
  77. package/lib/typescript/navigation/primary-navigator.d.ts +3 -0
  78. package/lib/typescript/navigation/primary-navigator.d.ts.map +1 -1
  79. package/lib/typescript/screens/home/ItemMotoBikeLoan.d.ts +8 -0
  80. package/lib/typescript/screens/home/ItemMotoBikeLoan.d.ts.map +1 -0
  81. package/lib/typescript/screens/home/index.d.ts.map +1 -1
  82. package/lib/typescript/screens/motobike/InfoLoanMotobike.d.ts +2 -0
  83. package/lib/typescript/screens/motobike/InfoLoanMotobike.d.ts.map +1 -0
  84. package/lib/typescript/screens/motobike/PolicyF88.d.ts +2 -0
  85. package/lib/typescript/screens/motobike/PolicyF88.d.ts.map +1 -0
  86. package/lib/typescript/screens/motobike/ReviewLoanMotobike.d.ts +2 -0
  87. package/lib/typescript/screens/motobike/ReviewLoanMotobike.d.ts.map +1 -0
  88. package/lib/typescript/screens/toan-trinh-so/TTSSelfie.d.ts.map +1 -1
  89. package/lib/typescript/screens/toan-trinh-so/VehicleRegistrationBack.d.ts.map +1 -1
  90. package/lib/typescript/services/api/api.d.ts +80 -0
  91. package/lib/typescript/services/api/api.d.ts.map +1 -1
  92. package/package.json +1 -1
  93. package/src/assets/tts/f88.png +0 -0
  94. package/src/assets/v3/11.svg +13 -0
  95. package/src/assets/v3/12.svg +21 -0
  96. package/src/assets/v3/index.tsx +4 -0
  97. package/src/components/MSelect.tsx +4 -2
  98. package/src/components/ModalOptionLoanDigital.tsx +7 -15
  99. package/src/components/select/index.tsx +4 -2
  100. package/src/navigation/primary-navigator.tsx +15 -0
  101. package/src/screens/home/ItemMotoBikeLoan.tsx +845 -0
  102. package/src/screens/home/index.tsx +8 -3
  103. package/src/screens/motobike/InfoLoanMotobike.tsx +674 -0
  104. package/src/screens/motobike/PolicyF88.tsx +131 -0
  105. package/src/screens/motobike/ReviewLoanMotobike.tsx +453 -0
  106. package/src/screens/toan-trinh-so/TTSSelfie.tsx +4 -0
  107. package/src/screens/toan-trinh-so/VehicleRegistrationBack.tsx +28 -12
  108. package/src/services/api/api.ts +80 -0
  109. package/lib/commonjs/components/CommonSelect.js +0 -2
  110. package/lib/commonjs/components/CommonSelect.js.flow +0 -12
  111. package/lib/commonjs/components/CommonSelect.js.map +0 -1
  112. package/lib/module/components/CommonSelect.js +0 -2
  113. package/lib/module/components/CommonSelect.js.map +0 -1
  114. package/lib/typescript/components/CommonSelect.d.ts +0 -8
  115. package/lib/typescript/components/CommonSelect.d.ts.map +0 -1
  116. package/src/components/CommonSelect.tsx +0 -12
@@ -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
+ };