@transfergratis/react-native-sdk 0.1.4 → 0.1.5

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 (199) 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 +71 -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 +105 -35
  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 +93 -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.map +1 -1
  64. package/build/components/TemplateKYCExample.js +72 -197
  65. package/build/components/TemplateKYCExample.js.map +1 -1
  66. package/build/components/TemplateKYCFlowRefactored.d.ts.map +1 -1
  67. package/build/components/TemplateKYCFlowRefactored.js +63 -39
  68. package/build/components/TemplateKYCFlowRefactored.js.map +1 -1
  69. package/build/components/example/OrientationVideoExample.d.ts.map +1 -1
  70. package/build/components/example/OrientationVideoExample.js +1 -5
  71. package/build/components/example/OrientationVideoExample.js.map +1 -1
  72. package/build/config/countriesData.d.ts +3 -0
  73. package/build/config/countriesData.d.ts.map +1 -0
  74. package/build/config/countriesData.js +79 -0
  75. package/build/config/countriesData.js.map +1 -0
  76. package/build/config/region_mapping.d.ts +3 -0
  77. package/build/config/region_mapping.d.ts.map +1 -0
  78. package/build/config/region_mapping.js +687 -0
  79. package/build/config/region_mapping.js.map +1 -0
  80. package/build/hooks/useI18n.d.ts +11 -0
  81. package/build/hooks/useI18n.d.ts.map +1 -0
  82. package/build/hooks/useI18n.js +37 -0
  83. package/build/hooks/useI18n.js.map +1 -0
  84. package/build/hooks/useOrientationVideo.d.ts +1 -2
  85. package/build/hooks/useOrientationVideo.d.ts.map +1 -1
  86. package/build/hooks/useOrientationVideo.js +2 -1
  87. package/build/hooks/useOrientationVideo.js.map +1 -1
  88. package/build/hooks/useRealtimeVerifier.d.ts +28 -0
  89. package/build/hooks/useRealtimeVerifier.d.ts.map +1 -0
  90. package/build/hooks/useRealtimeVerifier.js +91 -0
  91. package/build/hooks/useRealtimeVerifier.js.map +1 -0
  92. package/build/hooks/useTemplateKYCFlow.d.ts +1 -0
  93. package/build/hooks/useTemplateKYCFlow.d.ts.map +1 -1
  94. package/build/hooks/useTemplateKYCFlow.js +337 -38
  95. package/build/hooks/useTemplateKYCFlow.js.map +1 -1
  96. package/build/i18n/en/index.d.ts +168 -0
  97. package/build/i18n/en/index.d.ts.map +1 -0
  98. package/build/i18n/en/index.js +195 -0
  99. package/build/i18n/en/index.js.map +1 -0
  100. package/build/i18n/fr/index.d.ts +168 -0
  101. package/build/i18n/fr/index.d.ts.map +1 -0
  102. package/build/i18n/fr/index.js +194 -0
  103. package/build/i18n/fr/index.js.map +1 -0
  104. package/build/i18n/index.d.ts +10 -0
  105. package/build/i18n/index.d.ts.map +1 -0
  106. package/build/i18n/index.js +56 -0
  107. package/build/i18n/index.js.map +1 -0
  108. package/build/i18n/types.d.ts +153 -0
  109. package/build/i18n/types.d.ts.map +1 -0
  110. package/build/i18n/types.js +3 -0
  111. package/build/i18n/types.js.map +1 -0
  112. package/build/i18n/usage-example.d.ts +4 -0
  113. package/build/i18n/usage-example.d.ts.map +1 -0
  114. package/build/i18n/usage-example.js +189 -0
  115. package/build/i18n/usage-example.js.map +1 -0
  116. package/build/modules/api/CardAuthentification.d.ts +22 -0
  117. package/build/modules/api/CardAuthentification.d.ts.map +1 -0
  118. package/build/modules/api/CardAuthentification.js +107 -0
  119. package/build/modules/api/CardAuthentification.js.map +1 -0
  120. package/build/modules/api/KYCService.d.ts +57 -1
  121. package/build/modules/api/KYCService.d.ts.map +1 -1
  122. package/build/modules/api/KYCService.js +348 -27
  123. package/build/modules/api/KYCService.js.map +1 -1
  124. package/build/modules/api/SelfieVerification.d.ts +3 -0
  125. package/build/modules/api/SelfieVerification.d.ts.map +1 -0
  126. package/build/modules/api/SelfieVerification.js +9 -0
  127. package/build/modules/api/SelfieVerification.js.map +1 -0
  128. package/build/modules/api/backendApi.d.ts +2 -0
  129. package/build/modules/api/backendApi.d.ts.map +1 -0
  130. package/build/modules/api/backendApi.js +6 -0
  131. package/build/modules/api/backendApi.js.map +1 -0
  132. package/build/modules/api/types.d.ts +20 -0
  133. package/build/modules/api/types.d.ts.map +1 -0
  134. package/build/modules/api/types.js +2 -0
  135. package/build/modules/api/types.js.map +1 -0
  136. package/build/types/KYC.types.d.ts +59 -7
  137. package/build/types/KYC.types.d.ts.map +1 -1
  138. package/build/types/KYC.types.js +9 -1
  139. package/build/types/KYC.types.js.map +1 -1
  140. package/build/utils/cropByObb.d.ts +11 -0
  141. package/build/utils/cropByObb.d.ts.map +1 -0
  142. package/build/utils/cropByObb.js +78 -0
  143. package/build/utils/cropByObb.js.map +1 -0
  144. package/build/utils/get-document-type-info.d.ts +13 -0
  145. package/build/utils/get-document-type-info.d.ts.map +1 -0
  146. package/build/utils/get-document-type-info.js +59 -0
  147. package/build/utils/get-document-type-info.js.map +1 -0
  148. package/build/utils/pathToBase64.d.ts +3 -0
  149. package/build/utils/pathToBase64.d.ts.map +1 -0
  150. package/build/utils/pathToBase64.js +47 -0
  151. package/build/utils/pathToBase64.js.map +1 -0
  152. package/build/utils/remove-duplicate.d.ts +2 -0
  153. package/build/utils/remove-duplicate.d.ts.map +1 -0
  154. package/build/utils/remove-duplicate.js +4 -0
  155. package/build/utils/remove-duplicate.js.map +1 -0
  156. package/package.json +3 -1
  157. package/src/api/axios.ts +144 -0
  158. package/src/components/EnhancedCameraView.tsx +96 -78
  159. package/src/components/EnhancedCameraView.web.tsx +41 -40
  160. package/src/components/KYCElements/CountrySelectionTemplate.tsx +104 -136
  161. package/src/components/KYCElements/FileUploadTemplate.tsx +14 -8
  162. package/src/components/KYCElements/IDCardCapture.tsx +311 -115
  163. package/src/components/KYCElements/InitializationStep.tsx +53 -0
  164. package/src/components/KYCElements/LocationCaptureTemplate.tsx +17 -15
  165. package/src/components/KYCElements/OrientationVideoCapture.tsx +2 -2
  166. package/src/components/KYCElements/OrientationVideoCaptureEnhanced.tsx +2 -2
  167. package/src/components/KYCElements/OrientationVideoCaptureFinal.tsx +2 -2
  168. package/src/components/KYCElements/ReviewSubmitTemplate.tsx +201 -0
  169. package/src/components/KYCElements/SelfieCaptureTemplate.tsx +140 -53
  170. package/src/components/KYCElements/VerificationProgressTemplate.tsx +123 -0
  171. package/src/components/OverLay/IdCard.tsx +17 -9
  172. package/src/components/OverLay/SelfieOverlay.tsx +6 -5
  173. package/src/components/OverLay/type.ts +64 -2
  174. package/src/components/TemplateKYCExample.tsx +76 -197
  175. package/src/components/TemplateKYCFlowRefactored.tsx +74 -46
  176. package/src/components/example/OrientationVideoExample.tsx +3 -7
  177. package/src/config/countriesData.ts +84 -0
  178. package/src/config/region_mapping.ts +688 -0
  179. package/src/hooks/useI18n.ts +53 -0
  180. package/src/hooks/useOrientationVideo.ts +2 -2
  181. package/src/hooks/useRealtimeVerifier.ts +128 -0
  182. package/src/hooks/useTemplateKYCFlow.tsx +375 -53
  183. package/src/i18n/README.md +288 -0
  184. package/src/i18n/en/index.ts +206 -0
  185. package/src/i18n/fr/index.ts +205 -0
  186. package/src/i18n/index.ts +65 -0
  187. package/src/i18n/types.ts +172 -0
  188. package/src/i18n/usage-example.tsx +202 -0
  189. package/src/modules/api/CardAuthentification.ts +114 -0
  190. package/src/modules/api/KYCService.ts +403 -30
  191. package/src/modules/api/SelfieVerification.ts +11 -0
  192. package/src/modules/api/backendApi.ts +8 -0
  193. package/src/modules/api/types.ts +24 -0
  194. package/src/types/KYC.types.ts +83 -14
  195. package/src/utils/cropByObb.ts +99 -0
  196. package/src/utils/get-document-type-info.ts +62 -0
  197. package/src/utils/pathToBase64.ts +47 -0
  198. package/src/utils/remove-duplicate.ts +3 -0
  199. package/src/types/nativewind.d.ts +0 -2
@@ -1,94 +1,20 @@
1
- import React from 'react';
1
+ import React, { 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 || '';
@@ -115,67 +47,102 @@ export const CountrySelectionTemplate: React.FC<CountrySelectionTemplateProps> =
115
47
  .sort((a, b) => a.name.localeCompare(b.name));
116
48
 
117
49
  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>
50
+ <View style={styles.root}>
51
+ <View style={styles.container}>
52
+ <Text style={styles.title}>{getLocalizedText(component.labels as LocalizedText)}</Text>
53
+ <Text style={styles.description}>{getLocalizedText(component.instructions as LocalizedText)}</Text>
54
+
55
+ <ScrollView style={styles.countriesContainer} showsVerticalScrollIndicator={false}>
56
+ {filteredCountries.map((country) => (
57
+ <TouchableOpacity
58
+ key={country.code}
59
+ style={[
60
+ styles.countryOption,
61
+ selectedCountry.code === country.code && styles.selectedCountryOption
62
+ ]}
63
+ onPress={() => {
64
+ console.log({
65
+ country, language
66
+ });
67
+
68
+ setSelectedCountry(country);
69
+ }}
70
+ >
71
+ <Text style={styles.countryFlag}>{country.flag}</Text>
72
+ <View style={styles.countryContent}>
73
+ <Text style={[
74
+ styles.countryName,
75
+ selectedCountry.code === country.code && styles.selectedCountryName
76
+ ]}>
77
+ {state.currentLanguage === "en"? country.name_en: country.name}
78
+ </Text>
79
+ <Text style={styles.countryCode}>{country.code}</Text>
148
80
  </View>
149
- )}
150
- </TouchableOpacity>
151
- ))}
152
- </ScrollView>
81
+ {selectedCountry.code === country.code && (
82
+ <View style={[
83
+ styles.checkmark,
84
+ { backgroundColor: component.ui.themeColor as string || '#2DBD60' }
85
+ ]}>
86
+ <Text style={styles.checkmarkText}>✓</Text>
87
+ </View>
88
+ )}
89
+ </TouchableOpacity>
90
+ ))}
91
+ </ScrollView>
92
+
93
+ {selectedCountry.code && (
94
+ <Button title={t('common.next')} onPress={() => {
95
+
96
+
97
+ const mapping = selectedCountry.code ? countryMapping[selectedCountry.code as keyof typeof countryMapping] : undefined;
98
+ onValueChange({ ...selectedCountry, regionMapping: mapping });
99
+ setTimeout(() => {
100
+ actions.nextComponent();
101
+ }, 500);
102
+ }}
103
+ variant="primary"
104
+ size="large"
105
+ fullWidth
106
+ />
107
+ )}
153
108
 
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
- )}
109
+ {config.required && !selectedValue && (
110
+ <View style={styles.requiredContainer}>
161
111
 
162
- {config.required && !selectedValue && (
163
- <View style={styles.requiredContainer}>
164
- <Text style={styles.requiredText}>⚠️ Veuillez sélectionner un pays</Text>
165
- </View>
166
- )}
167
112
 
168
- {error && (
169
- <Text style={styles.errorText}>{error}</Text>
170
- )}
113
+ <Text style={styles.requiredText}>{
114
+ state.currentLanguage === "en" ? "⚠️ Please Select your country" : "⚠️ Veuillez sélectionner un pays"
115
+ }</Text>
116
+ </View>
117
+ )}
118
+
119
+ {error && (
120
+ <Text style={styles.errorText}>{error}</Text>
121
+ )}
122
+ </View>
171
123
  </View>
172
124
  );
173
125
  };
174
126
 
175
127
  const styles = StyleSheet.create({
176
- container: {
128
+ root: {
177
129
  flex: 1,
178
- padding: 16,
130
+ maxWidth: 760,
131
+ width: '100%',
132
+ },
133
+ container: {
134
+ backgroundColor: 'white',
135
+ margin: 10,
136
+ borderRadius: 10,
137
+ paddingVertical: 16,
138
+ paddingHorizontal: 16,
139
+ // shadow
140
+ shadowColor: '#000',
141
+ shadowOffset: { width: 0, height: 2 },
142
+ shadowOpacity: 0.35,
143
+ shadowRadius: 4.84,
144
+ elevation: 10,
145
+
179
146
  },
180
147
  title: {
181
148
  fontSize: 24,
@@ -192,7 +159,8 @@ const styles = StyleSheet.create({
192
159
  lineHeight: 22,
193
160
  },
194
161
  countriesContainer: {
195
- flex: 1,
162
+ height: "80%",
163
+ maxHeight: 600,
196
164
  },
197
165
  countryOption: {
198
166
  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>