@transfergratis/react-native-sdk 0.1.4 → 0.1.6

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 (216) hide show
  1. package/build/api/axios.d.ts +30 -0
  2. package/build/api/axios.d.ts.map +1 -0
  3. package/build/api/axios.js +92 -0
  4. package/build/api/axios.js.map +1 -0
  5. package/build/components/EnhancedCameraView.d.ts +1 -41
  6. package/build/components/EnhancedCameraView.d.ts.map +1 -1
  7. package/build/components/EnhancedCameraView.js +75 -34
  8. package/build/components/EnhancedCameraView.js.map +1 -1
  9. package/build/components/EnhancedCameraView.web.d.ts +1 -41
  10. package/build/components/EnhancedCameraView.web.d.ts.map +1 -1
  11. package/build/components/EnhancedCameraView.web.js +28 -4
  12. package/build/components/EnhancedCameraView.web.js.map +1 -1
  13. package/build/components/KYCElements/CountrySelectionTemplate.d.ts +2 -2
  14. package/build/components/KYCElements/CountrySelectionTemplate.d.ts.map +1 -1
  15. package/build/components/KYCElements/CountrySelectionTemplate.js +77 -114
  16. package/build/components/KYCElements/CountrySelectionTemplate.js.map +1 -1
  17. package/build/components/KYCElements/FileUploadTemplate.d.ts.map +1 -1
  18. package/build/components/KYCElements/FileUploadTemplate.js +7 -3
  19. package/build/components/KYCElements/FileUploadTemplate.js.map +1 -1
  20. package/build/components/KYCElements/IDCardCapture.d.ts +7 -2
  21. package/build/components/KYCElements/IDCardCapture.d.ts.map +1 -1
  22. package/build/components/KYCElements/IDCardCapture.js +253 -104
  23. package/build/components/KYCElements/IDCardCapture.js.map +1 -1
  24. package/build/components/KYCElements/InitializationStep.d.ts +5 -0
  25. package/build/components/KYCElements/InitializationStep.d.ts.map +1 -0
  26. package/build/components/KYCElements/InitializationStep.js +41 -0
  27. package/build/components/KYCElements/InitializationStep.js.map +1 -0
  28. package/build/components/KYCElements/LocationCaptureTemplate.d.ts.map +1 -1
  29. package/build/components/KYCElements/LocationCaptureTemplate.js +15 -13
  30. package/build/components/KYCElements/LocationCaptureTemplate.js.map +1 -1
  31. package/build/components/KYCElements/OrientationVideoCapture.d.ts +2 -2
  32. package/build/components/KYCElements/OrientationVideoCapture.d.ts.map +1 -1
  33. package/build/components/KYCElements/OrientationVideoCapture.js.map +1 -1
  34. package/build/components/KYCElements/OrientationVideoCaptureEnhanced.d.ts +2 -2
  35. package/build/components/KYCElements/OrientationVideoCaptureEnhanced.d.ts.map +1 -1
  36. package/build/components/KYCElements/OrientationVideoCaptureEnhanced.js.map +1 -1
  37. package/build/components/KYCElements/OrientationVideoCaptureFinal.d.ts +2 -2
  38. package/build/components/KYCElements/OrientationVideoCaptureFinal.d.ts.map +1 -1
  39. package/build/components/KYCElements/OrientationVideoCaptureFinal.js.map +1 -1
  40. package/build/components/KYCElements/ReviewSubmitTemplate.d.ts +12 -0
  41. package/build/components/KYCElements/ReviewSubmitTemplate.d.ts.map +1 -0
  42. package/build/components/KYCElements/ReviewSubmitTemplate.js +171 -0
  43. package/build/components/KYCElements/ReviewSubmitTemplate.js.map +1 -0
  44. package/build/components/KYCElements/SelfieCaptureTemplate.d.ts +6 -2
  45. package/build/components/KYCElements/SelfieCaptureTemplate.d.ts.map +1 -1
  46. package/build/components/KYCElements/SelfieCaptureTemplate.js +137 -38
  47. package/build/components/KYCElements/SelfieCaptureTemplate.js.map +1 -1
  48. package/build/components/KYCElements/VerificationProgressTemplate.d.ts +12 -0
  49. package/build/components/KYCElements/VerificationProgressTemplate.d.ts.map +1 -0
  50. package/build/components/KYCElements/VerificationProgressTemplate.js +194 -0
  51. package/build/components/KYCElements/VerificationProgressTemplate.js.map +1 -0
  52. package/build/components/OverLay/IdCard.d.ts +1 -1
  53. package/build/components/OverLay/IdCard.d.ts.map +1 -1
  54. package/build/components/OverLay/IdCard.js +10 -6
  55. package/build/components/OverLay/IdCard.js.map +1 -1
  56. package/build/components/OverLay/SelfieOverlay.d.ts +1 -1
  57. package/build/components/OverLay/SelfieOverlay.d.ts.map +1 -1
  58. package/build/components/OverLay/SelfieOverlay.js +5 -4
  59. package/build/components/OverLay/SelfieOverlay.js.map +1 -1
  60. package/build/components/OverLay/type.d.ts +71 -1
  61. package/build/components/OverLay/type.d.ts.map +1 -1
  62. package/build/components/OverLay/type.js.map +1 -1
  63. package/build/components/TemplateKYCExample.d.ts +4 -1
  64. package/build/components/TemplateKYCExample.d.ts.map +1 -1
  65. package/build/components/TemplateKYCExample.js +74 -199
  66. package/build/components/TemplateKYCExample.js.map +1 -1
  67. package/build/components/TemplateKYCFlowRefactored.d.ts +3 -2
  68. package/build/components/TemplateKYCFlowRefactored.d.ts.map +1 -1
  69. package/build/components/TemplateKYCFlowRefactored.js +64 -40
  70. package/build/components/TemplateKYCFlowRefactored.js.map +1 -1
  71. package/build/components/example/OrientationVideoExample.d.ts.map +1 -1
  72. package/build/components/example/OrientationVideoExample.js +1 -5
  73. package/build/components/example/OrientationVideoExample.js.map +1 -1
  74. package/build/config/countriesData.d.ts +3 -0
  75. package/build/config/countriesData.d.ts.map +1 -0
  76. package/build/config/countriesData.js +79 -0
  77. package/build/config/countriesData.js.map +1 -0
  78. package/build/config/region_mapping.d.ts +3 -0
  79. package/build/config/region_mapping.d.ts.map +1 -0
  80. package/build/config/region_mapping.js +687 -0
  81. package/build/config/region_mapping.js.map +1 -0
  82. package/build/hooks/useI18n.d.ts +11 -0
  83. package/build/hooks/useI18n.d.ts.map +1 -0
  84. package/build/hooks/useI18n.js +37 -0
  85. package/build/hooks/useI18n.js.map +1 -0
  86. package/build/hooks/useOrientationVideo.d.ts +1 -2
  87. package/build/hooks/useOrientationVideo.d.ts.map +1 -1
  88. package/build/hooks/useOrientationVideo.js +2 -1
  89. package/build/hooks/useOrientationVideo.js.map +1 -1
  90. package/build/hooks/useRealtimeVerifier.d.ts +28 -0
  91. package/build/hooks/useRealtimeVerifier.d.ts.map +1 -0
  92. package/build/hooks/useRealtimeVerifier.js +91 -0
  93. package/build/hooks/useRealtimeVerifier.js.map +1 -0
  94. package/build/hooks/useTemplateKYCFlow.d.ts +6 -3
  95. package/build/hooks/useTemplateKYCFlow.d.ts.map +1 -1
  96. package/build/hooks/useTemplateKYCFlow.js +356 -42
  97. package/build/hooks/useTemplateKYCFlow.js.map +1 -1
  98. package/build/i18n/en/index.d.ts +168 -0
  99. package/build/i18n/en/index.d.ts.map +1 -0
  100. package/build/i18n/en/index.js +195 -0
  101. package/build/i18n/en/index.js.map +1 -0
  102. package/build/i18n/fr/index.d.ts +168 -0
  103. package/build/i18n/fr/index.d.ts.map +1 -0
  104. package/build/i18n/fr/index.js +194 -0
  105. package/build/i18n/fr/index.js.map +1 -0
  106. package/build/i18n/index.d.ts +10 -0
  107. package/build/i18n/index.d.ts.map +1 -0
  108. package/build/i18n/index.js +56 -0
  109. package/build/i18n/index.js.map +1 -0
  110. package/build/i18n/types.d.ts +153 -0
  111. package/build/i18n/types.d.ts.map +1 -0
  112. package/build/i18n/types.js +3 -0
  113. package/build/i18n/types.js.map +1 -0
  114. package/build/i18n/usage-example.d.ts +4 -0
  115. package/build/i18n/usage-example.d.ts.map +1 -0
  116. package/build/i18n/usage-example.js +189 -0
  117. package/build/i18n/usage-example.js.map +1 -0
  118. package/build/index.d.ts +1 -0
  119. package/build/index.d.ts.map +1 -1
  120. package/build/index.js +2 -0
  121. package/build/index.js.map +1 -1
  122. package/build/modules/api/CardAuthentification.d.ts +22 -0
  123. package/build/modules/api/CardAuthentification.d.ts.map +1 -0
  124. package/build/modules/api/CardAuthentification.js +107 -0
  125. package/build/modules/api/CardAuthentification.js.map +1 -0
  126. package/build/modules/api/KYCService.d.ts +58 -1
  127. package/build/modules/api/KYCService.d.ts.map +1 -1
  128. package/build/modules/api/KYCService.js +304 -27
  129. package/build/modules/api/KYCService.js.map +1 -1
  130. package/build/modules/api/SelfieVerification.d.ts +3 -0
  131. package/build/modules/api/SelfieVerification.d.ts.map +1 -0
  132. package/build/modules/api/SelfieVerification.js +9 -0
  133. package/build/modules/api/SelfieVerification.js.map +1 -0
  134. package/build/modules/api/backendApi.d.ts +2 -0
  135. package/build/modules/api/backendApi.d.ts.map +1 -0
  136. package/build/modules/api/backendApi.js +6 -0
  137. package/build/modules/api/backendApi.js.map +1 -0
  138. package/build/modules/api/types.d.ts +45 -0
  139. package/build/modules/api/types.d.ts.map +1 -0
  140. package/build/modules/api/types.js +2 -0
  141. package/build/modules/api/types.js.map +1 -0
  142. package/build/types/KYC.types.d.ts +56 -7
  143. package/build/types/KYC.types.d.ts.map +1 -1
  144. package/build/types/KYC.types.js +9 -1
  145. package/build/types/KYC.types.js.map +1 -1
  146. package/build/utils/cropByObb.d.ts +11 -0
  147. package/build/utils/cropByObb.d.ts.map +1 -0
  148. package/build/utils/cropByObb.js +78 -0
  149. package/build/utils/cropByObb.js.map +1 -0
  150. package/build/utils/get-document-type-info.d.ts +13 -0
  151. package/build/utils/get-document-type-info.d.ts.map +1 -0
  152. package/build/utils/get-document-type-info.js +59 -0
  153. package/build/utils/get-document-type-info.js.map +1 -0
  154. package/build/utils/pathToBase64.d.ts +3 -0
  155. package/build/utils/pathToBase64.d.ts.map +1 -0
  156. package/build/utils/pathToBase64.js +47 -0
  157. package/build/utils/pathToBase64.js.map +1 -0
  158. package/build/utils/remove-duplicate.d.ts +2 -0
  159. package/build/utils/remove-duplicate.d.ts.map +1 -0
  160. package/build/utils/remove-duplicate.js +4 -0
  161. package/build/utils/remove-duplicate.js.map +1 -0
  162. package/build/web/WebKYCEntry.d.ts +9 -0
  163. package/build/web/WebKYCEntry.d.ts.map +1 -0
  164. package/build/web/WebKYCEntry.js +156 -0
  165. package/build/web/WebKYCEntry.js.map +1 -0
  166. package/build/web/index.d.ts +2 -0
  167. package/build/web/index.d.ts.map +1 -0
  168. package/build/web/index.js +2 -0
  169. package/build/web/index.js.map +1 -0
  170. package/package.json +3 -1
  171. package/src/api/axios.ts +144 -0
  172. package/src/components/EnhancedCameraView.tsx +96 -78
  173. package/src/components/EnhancedCameraView.web.tsx +41 -40
  174. package/src/components/KYCElements/CountrySelectionTemplate.tsx +111 -136
  175. package/src/components/KYCElements/FileUploadTemplate.tsx +14 -8
  176. package/src/components/KYCElements/IDCardCapture.tsx +311 -115
  177. package/src/components/KYCElements/InitializationStep.tsx +53 -0
  178. package/src/components/KYCElements/LocationCaptureTemplate.tsx +17 -15
  179. package/src/components/KYCElements/OrientationVideoCapture.tsx +2 -2
  180. package/src/components/KYCElements/OrientationVideoCaptureEnhanced.tsx +2 -2
  181. package/src/components/KYCElements/OrientationVideoCaptureFinal.tsx +2 -2
  182. package/src/components/KYCElements/ReviewSubmitTemplate.tsx +201 -0
  183. package/src/components/KYCElements/SelfieCaptureTemplate.tsx +174 -57
  184. package/src/components/KYCElements/VerificationProgressTemplate.tsx +246 -0
  185. package/src/components/OverLay/IdCard.tsx +17 -9
  186. package/src/components/OverLay/SelfieOverlay.tsx +6 -5
  187. package/src/components/OverLay/type.ts +64 -2
  188. package/src/components/TemplateKYCExample.tsx +80 -200
  189. package/src/components/TemplateKYCFlowRefactored.tsx +80 -48
  190. package/src/components/example/OrientationVideoExample.tsx +3 -7
  191. package/src/config/countriesData.ts +84 -0
  192. package/src/config/region_mapping.ts +688 -0
  193. package/src/hooks/useI18n.ts +53 -0
  194. package/src/hooks/useOrientationVideo.ts +2 -2
  195. package/src/hooks/useRealtimeVerifier.ts +128 -0
  196. package/src/hooks/useTemplateKYCFlow.tsx +407 -57
  197. package/src/i18n/README.md +288 -0
  198. package/src/i18n/en/index.ts +206 -0
  199. package/src/i18n/fr/index.ts +205 -0
  200. package/src/i18n/index.ts +65 -0
  201. package/src/i18n/types.ts +172 -0
  202. package/src/i18n/usage-example.tsx +202 -0
  203. package/src/index.ts +3 -0
  204. package/src/modules/api/CardAuthentification.ts +114 -0
  205. package/src/modules/api/KYCService.ts +350 -30
  206. package/src/modules/api/SelfieVerification.ts +11 -0
  207. package/src/modules/api/backendApi.ts +8 -0
  208. package/src/modules/api/types.ts +51 -0
  209. package/src/types/KYC.types.ts +82 -14
  210. package/src/utils/cropByObb.ts +99 -0
  211. package/src/utils/get-document-type-info.ts +62 -0
  212. package/src/utils/pathToBase64.ts +47 -0
  213. package/src/utils/remove-duplicate.ts +3 -0
  214. package/src/web/WebKYCEntry.tsx +215 -0
  215. package/src/web/index.ts +1 -0
  216. package/src/types/nativewind.d.ts +0 -2
@@ -1,94 +1,20 @@
1
- import React from 'react';
1
+ import React, { useEffect, useState } from 'react';
2
2
  import { View, Text, TouchableOpacity, StyleSheet, ScrollView } from 'react-native';
3
- import { TemplateComponent, CountrySelectionConfig, LocalizedText } from '../../types/KYC.types';
3
+ import { TemplateComponent, CountrySelectionConfig, LocalizedText, Country } from '../../types/KYC.types';
4
+ import { countryMapping } from '../../config/region_mapping';
5
+ import { useTemplateKYCFlowContext } from '../../hooks/useTemplateKYCFlow';
6
+ import { useI18n } from '../../hooks/useI18n';
7
+ import { Button } from '../ui/Button';
8
+ import { countryData } from '../../config/countriesData';
4
9
 
5
10
  interface CountrySelectionTemplateProps {
6
11
  component: TemplateComponent;
7
12
  value?: string;
8
- onValueChange: (value: string) => void;
13
+ onValueChange: (value: Country) => void;
9
14
  error?: string;
10
15
  language?: string;
11
16
  }
12
17
 
13
- const countryData: Record<string, { name: string; flag: string }> = {
14
- FR: { name: 'France', flag: '🇫🇷' },
15
- CM: { name: 'Cameroun', flag: '🇨🇲' },
16
- US: { name: 'États-Unis', flag: '🇺🇸' },
17
- DE: { name: 'Allemagne', flag: '🇩🇪' },
18
- BE: { name: 'Belgique', flag: '🇧🇪' },
19
- LU: { name: 'Luxembourg', flag: '🇱🇺' },
20
- IT: { name: 'Italie', flag: '🇮🇹' },
21
- ES: { name: 'Espagne', flag: '🇪🇸' },
22
- PT: { name: 'Portugal', flag: '🇵🇹' },
23
- AT: { name: 'Autriche', flag: '🇦🇹' },
24
- CH: { name: 'Suisse', flag: '🇨🇭' },
25
- NL: { name: 'Pays-Bas', flag: '🇳🇱' },
26
- CA: { name: 'Canada', flag: '🇨🇦' },
27
- GB: { name: 'Royaume-Uni', flag: '🇬🇧' },
28
- AU: { name: 'Australie', flag: '🇦🇺' },
29
- JP: { name: 'Japon', flag: '🇯🇵' },
30
- KR: { name: 'Corée du Sud', flag: '🇰🇷' },
31
- SG: { name: 'Singapour', flag: '🇸🇬' },
32
- HK: { name: 'Hong Kong', flag: '🇭🇰' },
33
- AE: { name: 'Émirats Arabes Unis', flag: '🇦🇪' },
34
- SA: { name: 'Arabie Saoudite', flag: '🇸🇦' },
35
- QA: { name: 'Qatar', flag: '🇶🇦' },
36
- KW: { name: 'Koweït', flag: '🇰🇼' },
37
- BH: { name: 'Bahreïn', flag: '🇧🇭' },
38
- OM: { name: 'Oman', flag: '🇴🇲' },
39
- JO: { name: 'Jordanie', flag: '🇯🇴' },
40
- LB: { name: 'Liban', flag: '🇱🇧' },
41
- EG: { name: 'Égypte', flag: '🇪🇬' },
42
- MA: { name: 'Maroc', flag: '🇲🇦' },
43
- TN: { name: 'Tunisie', flag: '🇹🇳' },
44
- DZ: { name: 'Algérie', flag: '🇩🇿' },
45
- SN: { name: 'Sénégal', flag: '🇸🇳' },
46
- CI: { name: 'Côte d\'Ivoire', flag: '🇨🇮' },
47
- NG: { name: 'Nigeria', flag: '🇳🇬' },
48
- KE: { name: 'Kenya', flag: '🇰🇪' },
49
- ZA: { name: 'Afrique du Sud', flag: '🇿🇦' },
50
- BR: { name: 'Brésil', flag: '🇧🇷' },
51
- MX: { name: 'Mexique', flag: '🇲🇽' },
52
- AR: { name: 'Argentine', flag: '🇦🇷' },
53
- CL: { name: 'Chili', flag: '🇨🇱' },
54
- PE: { name: 'Pérou', flag: '🇵🇪' },
55
- CO: { name: 'Colombie', flag: '🇨🇴' },
56
- VE: { name: 'Venezuela', flag: '🇻🇪' },
57
- EC: { name: 'Équateur', flag: '🇪🇨' },
58
- UY: { name: 'Uruguay', flag: '🇺🇾' },
59
- PY: { name: 'Paraguay', flag: '🇵🇾' },
60
- BO: { name: 'Bolivie', flag: '🇧🇴' },
61
- IN: { name: 'Inde', flag: '🇮🇳' },
62
- CN: { name: 'Chine', flag: '🇨🇳' },
63
- TH: { name: 'Thaïlande', flag: '🇹🇭' },
64
- VN: { name: 'Vietnam', flag: '🇻🇳' },
65
- ID: { name: 'Indonésie', flag: '🇮🇩' },
66
- MY: { name: 'Malaisie', flag: '🇲🇾' },
67
- PH: { name: 'Philippines', flag: '🇵🇭' },
68
- TR: { name: 'Turquie', flag: '🇹🇷' },
69
- IL: { name: 'Israël', flag: '🇮🇱' },
70
- RU: { name: 'Russie', flag: '🇷🇺' },
71
- UA: { name: 'Ukraine', flag: '🇺🇦' },
72
- PL: { name: 'Pologne', flag: '🇵🇱' },
73
- CZ: { name: 'République Tchèque', flag: '🇨🇿' },
74
- HU: { name: 'Hongrie', flag: '🇭🇺' },
75
- RO: { name: 'Roumanie', flag: '🇷🇴' },
76
- BG: { name: 'Bulgarie', flag: '🇧🇬' },
77
- HR: { name: 'Croatie', flag: '🇭🇷' },
78
- SI: { name: 'Slovénie', flag: '🇸🇮' },
79
- SK: { name: 'Slovaquie', flag: '🇸🇰' },
80
- LT: { name: 'Lituanie', flag: '🇱🇹' },
81
- LV: { name: 'Lettonie', flag: '🇱🇻' },
82
- EE: { name: 'Estonie', flag: '🇪🇪' },
83
- FI: { name: 'Finlande', flag: '🇫🇮' },
84
- SE: { name: 'Suède', flag: '🇸🇪' },
85
- NO: { name: 'Norvège', flag: '🇳🇴' },
86
- DK: { name: 'Danemark', flag: '🇩🇰' },
87
- IS: { name: 'Islande', flag: '🇮🇸' },
88
- IE: { name: 'Irlande', flag: '🇮🇪' },
89
- NZ: { name: 'Nouvelle-Zélande', flag: '🇳🇿' },
90
- };
91
-
92
18
  export const CountrySelectionTemplate: React.FC<CountrySelectionTemplateProps> = ({
93
19
  component,
94
20
  value,
@@ -96,9 +22,15 @@ export const CountrySelectionTemplate: React.FC<CountrySelectionTemplateProps> =
96
22
  error,
97
23
  language = 'en',
98
24
  }) => {
25
+ const { t } = useI18n();
99
26
  const config = component.config as CountrySelectionConfig;
100
- const allowedCountries = config.allowed_countries || Object.keys(countryData);
101
- const defaultCountry = config.default_country || 'FR';
27
+ const allowedCountries = (config.allowed_countries || Object.keys(countryData));
28
+ const defaultCountry = config.default_country || 'CM';
29
+ const { actions, state} = useTemplateKYCFlowContext();
30
+
31
+ console.log({ language }, state.currentLanguage);
32
+
33
+ const [selectedCountry, setSelectedCountry] = useState<Country>({ code: defaultCountry, ...countryData[defaultCountry] });
102
34
 
103
35
  const getLocalizedText = (text: LocalizedText): string => {
104
36
  return text[language] || text.en || '';
@@ -114,68 +46,110 @@ export const CountrySelectionTemplate: React.FC<CountrySelectionTemplateProps> =
114
46
  }))
115
47
  .sort((a, b) => a.name.localeCompare(b.name));
116
48
 
49
+ useEffect(() => {
50
+ if (selectedCountry) {
51
+ const mapping = selectedCountry.code ? countryMapping[selectedCountry.code as keyof typeof countryMapping] : undefined;
52
+ onValueChange({ ...selectedCountry, regionMapping: mapping });
53
+ }
54
+ }, [selectedCountry]);
55
+
117
56
  return (
118
- <View style={styles.container}>
119
- <Text style={styles.title}>{getLocalizedText(component.labels)}</Text>
120
- <Text style={styles.description}>{getLocalizedText(component.instructions)}</Text>
121
-
122
- <ScrollView style={styles.countriesContainer} showsVerticalScrollIndicator={false}>
123
- {filteredCountries.map((country) => (
124
- <TouchableOpacity
125
- key={country.code}
126
- style={[
127
- styles.countryOption,
128
- selectedValue === country.code && styles.selectedCountryOption
129
- ]}
130
- onPress={() => onValueChange(country.code)}
131
- >
132
- <Text style={styles.countryFlag}>{country.flag}</Text>
133
- <View style={styles.countryContent}>
134
- <Text style={[
135
- styles.countryName,
136
- selectedValue === country.code && styles.selectedCountryName
137
- ]}>
138
- {country.name}
139
- </Text>
140
- <Text style={styles.countryCode}>{country.code}</Text>
141
- </View>
142
- {selectedValue === country.code && (
143
- <View style={[
144
- styles.checkmark,
145
- { backgroundColor: component.ui.themeColor || '#2DBD60' }
146
- ]}>
147
- <Text style={styles.checkmarkText}>✓</Text>
57
+ <View style={styles.root}>
58
+ <View style={styles.container}>
59
+ <Text style={styles.title}>{getLocalizedText(component.labels as LocalizedText)}</Text>
60
+ <Text style={styles.description}>{getLocalizedText(component.instructions as LocalizedText)}</Text>
61
+
62
+ <ScrollView style={styles.countriesContainer} showsVerticalScrollIndicator={false}>
63
+ {filteredCountries.map((country) => (
64
+ <TouchableOpacity
65
+ key={country.code}
66
+ style={[
67
+ styles.countryOption,
68
+ selectedCountry.code === country.code && styles.selectedCountryOption
69
+ ]}
70
+ onPress={() => {
71
+ console.log({
72
+ country, language
73
+ });
74
+
75
+ setSelectedCountry(country);
76
+ }}
77
+ >
78
+ <Text style={styles.countryFlag}>{country.flag}</Text>
79
+ <View style={styles.countryContent}>
80
+ <Text style={[
81
+ styles.countryName,
82
+ selectedCountry.code === country.code && styles.selectedCountryName
83
+ ]}>
84
+ {state.currentLanguage === "en"? country.name_en: country.name}
85
+ </Text>
86
+ <Text style={styles.countryCode}>{country.code}</Text>
148
87
  </View>
149
- )}
150
- </TouchableOpacity>
151
- ))}
152
- </ScrollView>
88
+ {selectedCountry.code === country.code && (
89
+ <View style={[
90
+ styles.checkmark,
91
+ { backgroundColor: component.ui.themeColor as string || '#2DBD60' }
92
+ ]}>
93
+ <Text style={styles.checkmarkText}>✓</Text>
94
+ </View>
95
+ )}
96
+ </TouchableOpacity>
97
+ ))}
98
+ </ScrollView>
99
+
100
+ {selectedCountry.code && (
101
+ <Button title={t('common.next')} onPress={() => {
102
+
103
+
104
+ const mapping = selectedCountry.code ? countryMapping[selectedCountry.code as keyof typeof countryMapping] : undefined;
105
+ onValueChange({ ...selectedCountry, regionMapping: mapping });
106
+ setTimeout(() => {
107
+ actions.nextComponent();
108
+ }, 500);
109
+ }}
110
+ variant="primary"
111
+ size="large"
112
+ fullWidth
113
+ />
114
+ )}
153
115
 
154
- {selectedValue && (
155
- <View style={styles.selectionInfo}>
156
- <Text style={styles.selectionText}>
157
- Pays sélectionné: {countryData[selectedValue]?.flag} {countryData[selectedValue]?.name}
158
- </Text>
159
- </View>
160
- )}
116
+ {config.required && !selectedValue && (
117
+ <View style={styles.requiredContainer}>
161
118
 
162
- {config.required && !selectedValue && (
163
- <View style={styles.requiredContainer}>
164
- <Text style={styles.requiredText}>⚠️ Veuillez sélectionner un pays</Text>
165
- </View>
166
- )}
167
119
 
168
- {error && (
169
- <Text style={styles.errorText}>{error}</Text>
170
- )}
120
+ <Text style={styles.requiredText}>{
121
+ state.currentLanguage === "en" ? "⚠️ Please Select your country" : "⚠️ Veuillez sélectionner un pays"
122
+ }</Text>
123
+ </View>
124
+ )}
125
+
126
+ {error && (
127
+ <Text style={styles.errorText}>{error}</Text>
128
+ )}
129
+ </View>
171
130
  </View>
172
131
  );
173
132
  };
174
133
 
175
134
  const styles = StyleSheet.create({
176
- container: {
135
+ root: {
177
136
  flex: 1,
178
- padding: 16,
137
+ maxWidth: 760,
138
+ width: '100%',
139
+ },
140
+ container: {
141
+ backgroundColor: 'white',
142
+ margin: 10,
143
+ borderRadius: 10,
144
+ paddingVertical: 16,
145
+ paddingHorizontal: 16,
146
+ // shadow
147
+ shadowColor: '#000',
148
+ shadowOffset: { width: 0, height: 2 },
149
+ shadowOpacity: 0.35,
150
+ shadowRadius: 4.84,
151
+ elevation: 10,
152
+
179
153
  },
180
154
  title: {
181
155
  fontSize: 24,
@@ -192,7 +166,8 @@ const styles = StyleSheet.create({
192
166
  lineHeight: 22,
193
167
  },
194
168
  countriesContainer: {
195
- flex: 1,
169
+ height: "80%",
170
+ maxHeight: 600,
196
171
  },
197
172
  countryOption: {
198
173
  flexDirection: 'row',
@@ -2,6 +2,7 @@ import React, { useState } from 'react';
2
2
  import { View, Text, TouchableOpacity, StyleSheet, ScrollView, Image, Alert } from 'react-native';
3
3
  import { useKYCStore } from '../../stores/kycStore';
4
4
  import NativeCameraModule from '../../modules/camera/NativeCameraModule';
5
+ import { useI18n } from '../../hooks/useI18n';
5
6
  import { TemplateComponent, FileUploadConfig, LocalizedText } from '../../types/KYC.types';
6
7
 
7
8
  interface FileUploadTemplateProps {
@@ -26,6 +27,7 @@ export const FileUploadTemplate: React.FC<FileUploadTemplateProps> = ({
26
27
  error,
27
28
  language = 'en',
28
29
  }) => {
30
+ const { t } = useI18n();
29
31
  const [uploadedFiles, setUploadedFiles] = useState<UploadedFile[]>([]);
30
32
  const [isUploading, setIsUploading] = useState(false);
31
33
  const { setProcessing } = useKYCStore();
@@ -100,6 +102,7 @@ export const FileUploadTemplate: React.FC<FileUploadTemplateProps> = ({
100
102
  onValueChange(updatedFiles.map(file => file.uri));
101
103
  };
102
104
 
105
+
103
106
  const getFileIcon = (fileName: string) => {
104
107
  const extension = fileName.split('.').pop()?.toLowerCase();
105
108
  switch (extension) {
@@ -136,15 +139,15 @@ export const FileUploadTemplate: React.FC<FileUploadTemplateProps> = ({
136
139
 
137
140
  return (
138
141
  <View style={styles.container}>
139
- <Text style={styles.title}>{getLocalizedText(component.labels)}</Text>
140
- <Text style={styles.description}>{getLocalizedText(component.instructions)}</Text>
142
+ <Text style={styles.title}>{getLocalizedText(component.labels as LocalizedText)}</Text>
143
+ <Text style={styles.description}>{getLocalizedText(component.instructions as LocalizedText)}</Text>
141
144
 
142
145
  <View style={styles.uploadArea}>
143
146
  <TouchableOpacity
144
147
  style={[
145
148
  styles.uploadButton,
146
149
  isUploading && styles.uploadButtonDisabled,
147
- { borderColor: component.ui.themeColor || '#2DBD60' }
150
+ { borderColor: component.ui.themeColor as string || '#2DBD60' }
148
151
  ]}
149
152
  onPress={pickDocument}
150
153
  disabled={isUploading}
@@ -152,7 +155,7 @@ export const FileUploadTemplate: React.FC<FileUploadTemplateProps> = ({
152
155
  <Text style={styles.uploadIcon}>📁</Text>
153
156
  <Text style={[
154
157
  styles.uploadText,
155
- { color: component.ui.themeColor || '#2DBD60' }
158
+ { color: component.ui.themeColor as string || '#2DBD60' }
156
159
  ]}>
157
160
  {isUploading ? 'Sélection en cours...' : 'Sélectionner des fichiers'}
158
161
  </Text>
@@ -198,9 +201,9 @@ export const FileUploadTemplate: React.FC<FileUploadTemplateProps> = ({
198
201
 
199
202
  {!hasFiles && (
200
203
  <View style={styles.emptyState}>
201
- <Text style={styles.emptyStateText}>Aucun fichier sélectionné</Text>
204
+ <Text style={styles.emptyStateText}>{t('kyc.fileUpload.selectFile')}</Text>
202
205
  <Text style={styles.emptyStateSubtext}>
203
- {isRequired ? 'Ce document est obligatoire' : 'Ce document est optionnel'}
206
+ {isRequired ? t('validation.required') : t('common.info')}
204
207
  </Text>
205
208
  </View>
206
209
  )}
@@ -210,11 +213,14 @@ export const FileUploadTemplate: React.FC<FileUploadTemplateProps> = ({
210
213
  <TouchableOpacity
211
214
  style={[
212
215
  styles.primaryButton,
213
- { backgroundColor: component.ui.themeColor || '#2DBD60' }
216
+ { backgroundColor: component.ui.themeColor as string || '#2DBD60' }
214
217
  ]}
218
+ onPress={() => {
219
+ onValueChange(uploadedFiles.map(file => file.uri));
220
+ }}
215
221
  >
216
222
  <Text style={styles.primaryButtonText}>
217
- {getLocalizedText(component.ui.buttonText)}
223
+ {getLocalizedText(component.ui.buttonText as LocalizedText)}
218
224
  </Text>
219
225
  </TouchableOpacity>
220
226
  </View>