@sanctum-key/react-native-sdk 1.0.8 → 1.0.10

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 (106) hide show
  1. package/README.md +4 -4
  2. package/android/build.gradle +2 -2
  3. package/android/src/main/AndroidManifest.xml +1 -1
  4. package/android/src/main/java/kyc/transfergratis/com/TransfergratisSdkModule.kt +6 -6
  5. package/android/src/main/java/kyc/transfergratis/com/TransfergratisSdkView.kt +2 -2
  6. package/build/package.json +5 -5
  7. package/build/src/App.d.ts +2 -2
  8. package/build/src/App.d.ts.map +1 -1
  9. package/build/src/App.js +2 -2
  10. package/build/src/App.js.map +1 -1
  11. package/build/src/{SanctumKeySdk.types.d.ts → TransfergratisSdk.types.d.ts} +3 -3
  12. package/build/src/TransfergratisSdk.types.d.ts.map +1 -0
  13. package/build/src/TransfergratisSdk.types.js +2 -0
  14. package/build/src/TransfergratisSdk.types.js.map +1 -0
  15. package/build/src/{SanctumKeySdkModule.d.ts → TransfergratisSdkModule.d.ts} +4 -4
  16. package/build/src/TransfergratisSdkModule.d.ts.map +1 -0
  17. package/build/src/{SanctumKeySdkModule.js → TransfergratisSdkModule.js} +2 -2
  18. package/build/src/TransfergratisSdkModule.js.map +1 -0
  19. package/build/src/{SanctumKeySdkModule.web.d.ts → TransfergratisSdkModule.web.d.ts} +4 -4
  20. package/build/src/TransfergratisSdkModule.web.d.ts.map +1 -0
  21. package/build/src/{SanctumKeySdkModule.web.js → TransfergratisSdkModule.web.js} +3 -3
  22. package/build/src/TransfergratisSdkModule.web.js.map +1 -0
  23. package/build/src/TransfergratisSdkView.d.ts +4 -0
  24. package/build/src/TransfergratisSdkView.d.ts.map +1 -0
  25. package/build/src/TransfergratisSdkView.js +7 -0
  26. package/build/src/TransfergratisSdkView.js.map +1 -0
  27. package/build/src/TransfergratisSdkView.web.d.ts +4 -0
  28. package/build/src/TransfergratisSdkView.web.d.ts.map +1 -0
  29. package/build/src/{SanctumKeySdkView.web.js → TransfergratisSdkView.web.js} +2 -2
  30. package/build/src/TransfergratisSdkView.web.js.map +1 -0
  31. package/build/src/api/axios.js +2 -2
  32. package/build/src/api/axios.js.map +1 -1
  33. package/build/src/components/EnhancedCameraView.d.ts.map +1 -1
  34. package/build/src/components/EnhancedCameraView.js +12 -61
  35. package/build/src/components/EnhancedCameraView.js.map +1 -1
  36. package/build/src/components/KYCElements/CountrySelection.d.ts.map +1 -1
  37. package/build/src/components/KYCElements/CountrySelection.js +259 -63
  38. package/build/src/components/KYCElements/CountrySelection.js.map +1 -1
  39. package/build/src/components/KYCElements/EmailVerificationTemplate.d.ts.map +1 -1
  40. package/build/src/components/KYCElements/EmailVerificationTemplate.js +11 -32
  41. package/build/src/components/KYCElements/EmailVerificationTemplate.js.map +1 -1
  42. package/build/src/components/KYCElements/IDCardCapture.d.ts.map +1 -1
  43. package/build/src/components/KYCElements/IDCardCapture.js +222 -68
  44. package/build/src/components/KYCElements/IDCardCapture.js.map +1 -1
  45. package/build/src/components/KYCElements/PhoneVerificationTemplate.d.ts.map +1 -1
  46. package/build/src/components/KYCElements/PhoneVerificationTemplate.js +9 -11
  47. package/build/src/components/KYCElements/PhoneVerificationTemplate.js.map +1 -1
  48. package/build/src/components/NativeCameraView.js +1 -1
  49. package/build/src/components/NativeCameraView.js.map +1 -1
  50. package/build/src/config/KYCConfig.js +1 -1
  51. package/build/src/config/KYCConfig.js.map +1 -1
  52. package/build/src/config/allowedDomains.js +6 -6
  53. package/build/src/config/allowedDomains.js.map +1 -1
  54. package/build/src/config/region_mapping.json +727 -0
  55. package/build/src/index.d.ts +3 -3
  56. package/build/src/index.d.ts.map +1 -1
  57. package/build/src/index.js +3 -3
  58. package/build/src/index.js.map +1 -1
  59. package/build/src/modules/api/CardAuthentification.d.ts.map +1 -1
  60. package/build/src/modules/api/CardAuthentification.js +3 -7
  61. package/build/src/modules/api/CardAuthentification.js.map +1 -1
  62. package/build/src/modules/api/KYCService.d.ts +1 -2
  63. package/build/src/modules/api/KYCService.d.ts.map +1 -1
  64. package/build/src/modules/api/KYCService.js +103 -63
  65. package/build/src/modules/api/KYCService.js.map +1 -1
  66. package/build/src/modules/camera/NativeCameraModule.js +17 -17
  67. package/build/src/modules/camera/NativeCameraModule.js.map +1 -1
  68. package/expo-module.config.json +2 -2
  69. package/ios/TransfergratisSdk.podspec +2 -2
  70. package/ios/TransfergratisSdkModule.swift +12 -12
  71. package/package.json +5 -5
  72. package/src/App.tsx +2 -2
  73. package/src/{SanctumKeySdk.types.ts → TransfergratisSdk.types.ts} +2 -2
  74. package/src/{SanctumKeySdkModule.ts → TransfergratisSdkModule.ts} +3 -3
  75. package/src/{SanctumKeySdkModule.web.ts → TransfergratisSdkModule.web.ts} +3 -3
  76. package/src/TransfergratisSdkView.tsx +11 -0
  77. package/src/{SanctumKeySdkView.web.tsx → TransfergratisSdkView.web.tsx} +2 -2
  78. package/src/api/axios.ts +2 -2
  79. package/src/components/EnhancedCameraView.tsx +34 -99
  80. package/src/components/KYCElements/CountrySelection.tsx +300 -74
  81. package/src/components/KYCElements/EmailVerificationTemplate.tsx +10 -36
  82. package/src/components/KYCElements/IDCardCapture.tsx +310 -156
  83. package/src/components/KYCElements/PhoneVerificationTemplate.tsx +9 -11
  84. package/src/components/NativeCameraView.tsx +1 -1
  85. package/src/config/KYCConfig.ts +1 -1
  86. package/src/config/allowedDomains.ts +6 -6
  87. package/src/i18n/README.md +1 -1
  88. package/src/index.ts +3 -3
  89. package/src/modules/api/CardAuthentification.ts +5 -8
  90. package/src/modules/api/KYCService.ts +167 -116
  91. package/src/modules/camera/NativeCameraModule.ts +17 -17
  92. package/build/src/SanctumKeySdk.types.d.ts.map +0 -1
  93. package/build/src/SanctumKeySdk.types.js +0 -2
  94. package/build/src/SanctumKeySdk.types.js.map +0 -1
  95. package/build/src/SanctumKeySdkModule.d.ts.map +0 -1
  96. package/build/src/SanctumKeySdkModule.js.map +0 -1
  97. package/build/src/SanctumKeySdkModule.web.d.ts.map +0 -1
  98. package/build/src/SanctumKeySdkModule.web.js.map +0 -1
  99. package/build/src/SanctumKeySdkView.d.ts +0 -4
  100. package/build/src/SanctumKeySdkView.d.ts.map +0 -1
  101. package/build/src/SanctumKeySdkView.js +0 -7
  102. package/build/src/SanctumKeySdkView.js.map +0 -1
  103. package/build/src/SanctumKeySdkView.web.d.ts +0 -4
  104. package/build/src/SanctumKeySdkView.web.d.ts.map +0 -1
  105. package/build/src/SanctumKeySdkView.web.js.map +0 -1
  106. package/src/SanctumKeySdkView.tsx +0 -11
@@ -1,44 +1,238 @@
1
- import React from 'react';
2
- import { View, Text, TouchableOpacity, StyleSheet, ScrollView } from 'react-native';
3
- const defaultCountries = [
1
+ import React, { useState, useMemo } from 'react';
2
+ import { View, Text, TouchableOpacity, StyleSheet, FlatList, TextInput } from 'react-native';
3
+ // 🌍 Comprehensive Global Country List
4
+ const ALL_COUNTRIES = [
5
+ { value: 'AF', label: 'Afghanistan', icon: '🇦🇫' },
6
+ { value: 'AL', label: 'Albania', icon: '🇦🇱' },
7
+ { value: 'DZ', label: 'Algeria', icon: '🇩🇿' },
8
+ { value: 'AD', label: 'Andorra', icon: '🇦🇩' },
9
+ { value: 'AO', label: 'Angola', icon: '🇦🇴' },
10
+ { value: 'AR', label: 'Argentina', icon: '🇦🇷' },
11
+ { value: 'AM', label: 'Armenia', icon: '🇦🇲' },
12
+ { value: 'AU', label: 'Australia', icon: '🇦🇺' },
13
+ { value: 'AT', label: 'Austria', icon: '🇦🇹' },
14
+ { value: 'AZ', label: 'Azerbaijan', icon: '🇦🇿' },
15
+ { value: 'BS', label: 'Bahamas', icon: '🇧🇸' },
16
+ { value: 'BH', label: 'Bahrain', icon: '🇧🇭' },
17
+ { value: 'BD', label: 'Bangladesh', icon: '🇧🇩' },
18
+ { value: 'BB', label: 'Barbados', icon: '🇧🇧' },
19
+ { value: 'BY', label: 'Belarus', icon: '🇧🇾' },
20
+ { value: 'BE', label: 'Belgium', icon: '🇧🇪' },
21
+ { value: 'BZ', label: 'Belize', icon: '🇧🇿' },
22
+ { value: 'BJ', label: 'Benin', icon: '🇧🇯' },
23
+ { value: 'BT', label: 'Bhutan', icon: '🇧🇹' },
24
+ { value: 'BO', label: 'Bolivia', icon: '🇧🇴' },
25
+ { value: 'BA', label: 'Bosnia and Herzegovina', icon: '🇧🇦' },
26
+ { value: 'BW', label: 'Botswana', icon: '🇧🇼' },
27
+ { value: 'BR', label: 'Brazil', icon: '🇧🇷' },
28
+ { value: 'BN', label: 'Brunei', icon: '🇧🇳' },
29
+ { value: 'BG', label: 'Bulgaria', icon: '🇧🇬' },
30
+ { value: 'BF', label: 'Burkina Faso', icon: '🇧🇫' },
31
+ { value: 'BI', label: 'Burundi', icon: '🇧🇮' },
32
+ { value: 'CV', label: 'Cabo Verde', icon: '🇨🇻' },
33
+ { value: 'KH', label: 'Cambodia', icon: '🇰🇭' },
34
+ { value: 'CM', label: 'Cameroon', icon: '🇨🇲' },
35
+ { value: 'CA', label: 'Canada', icon: '🇨🇦' },
36
+ { value: 'CF', label: 'Central African Republic', icon: '🇨🇫' },
37
+ { value: 'TD', label: 'Chad', icon: '🇹🇩' },
38
+ { value: 'CL', label: 'Chile', icon: '🇨🇱' },
39
+ { value: 'CN', label: 'China', icon: '🇨🇳' },
40
+ { value: 'CO', label: 'Colombia', icon: '🇨🇴' },
41
+ { value: 'KM', label: 'Comoros', icon: '🇰🇲' },
42
+ { value: 'CG', label: 'Congo', icon: '🇨🇬' },
43
+ { value: 'CD', label: 'Congo (DRC)', icon: '🇨🇩' },
44
+ { value: 'CR', label: 'Costa Rica', icon: '🇨🇷' },
45
+ { value: 'HR', label: 'Croatia', icon: '🇭🇷' },
46
+ { value: 'CU', label: 'Cuba', icon: '🇨🇺' },
47
+ { value: 'CY', label: 'Croatia', icon: '🇨🇾' },
48
+ { value: 'CZ', label: 'Czechia', icon: '🇨🇿' },
49
+ { value: 'DK', label: 'Denmark', icon: '🇩🇰' },
50
+ { value: 'DJ', label: 'Djibouti', icon: '🇩🇯' },
51
+ { value: 'DM', label: 'Dominica', icon: '🇩🇲' },
52
+ { value: 'DO', label: 'Dominican Republic', icon: '🇩🇴' },
53
+ { value: 'EC', label: 'Ecuador', icon: '🇪🇨' },
54
+ { value: 'EG', label: 'Egypt', icon: '🇪🇬' },
55
+ { value: 'SV', label: 'El Salvador', icon: '🇸🇻' },
56
+ { value: 'GQ', label: 'Equatorial Guinea', icon: '🇬🇶' },
57
+ { value: 'ER', label: 'Eritrea', icon: '🇪🇷' },
58
+ { value: 'EE', label: 'Estonia', icon: '🇪🇪' },
59
+ { value: 'SZ', label: 'Eswatini', icon: '🇸🇿' },
60
+ { value: 'ET', label: 'Ethiopia', icon: '🇪🇹' },
61
+ { value: 'FJ', label: 'Fiji', icon: '🇫🇯' },
62
+ { value: 'FI', label: 'Finland', icon: '🇫🇮' },
4
63
  { value: 'FR', label: 'France', icon: '🇫🇷' },
5
- { value: 'BE', label: 'Belgique', icon: '🇧🇪' },
64
+ { value: 'GA', label: 'Gabon', icon: '🇬🇦' },
65
+ { value: 'GM', label: 'Gambia', icon: '🇬🇲' },
66
+ { value: 'GE', label: 'Georgia', icon: '🇬🇪' },
67
+ { value: 'DE', label: 'Germany', icon: '🇩🇪' },
68
+ { value: 'GH', label: 'Ghana', icon: '🇬🇭' },
69
+ { value: 'GR', label: 'Greece', icon: '🇬🇷' },
70
+ { value: 'GD', label: 'Grenada', icon: '🇬🇩' },
71
+ { value: 'GT', label: 'Guatemala', icon: '🇬🇹' },
72
+ { value: 'GN', label: 'Guinea', icon: '🇬🇳' },
73
+ { value: 'GW', label: 'Guinea-Bissau', icon: '🇬🇼' },
74
+ { value: 'GY', label: 'Guyana', icon: '🇬🇾' },
75
+ { value: 'HT', label: 'Haiti', icon: '🇭🇹' },
76
+ { value: 'HN', label: 'Honduras', icon: '🇭🇳' },
77
+ { value: 'HU', label: 'Hungary', icon: '🇭🇺' },
78
+ { value: 'IS', label: 'Iceland', icon: '🇮🇸' },
79
+ { value: 'IN', label: 'India', icon: '🇮🇳' },
80
+ { value: 'ID', label: 'Indonesia', icon: '🇮🇩' },
81
+ { value: 'IR', label: 'Iran', icon: '🇮🇷' },
82
+ { value: 'IQ', label: 'Iraq', icon: '🇮🇶' },
83
+ { value: 'IE', label: 'Ireland', icon: '🇮🇪' },
84
+ { value: 'IL', label: 'Ireland', icon: '🇮🇪' },
85
+ { value: 'IT', label: 'Italy', icon: '🇮🇹' },
86
+ { value: 'JM', label: 'Jamaica', icon: '🇯🇲' },
87
+ { value: 'JP', label: 'Japan', icon: '🇯🇵' },
88
+ { value: 'JO', label: 'Jordan', icon: '🇯🇴' },
89
+ { value: 'KZ', label: 'Kazakhstan', icon: '🇰🇿' },
90
+ { value: 'KE', label: 'Kenya', icon: '🇰🇪' },
91
+ { value: 'KI', label: 'Kiribati', icon: '🇰🇮' },
92
+ { value: 'KP', label: 'Korea (North)', icon: '🇰🇵' },
93
+ { value: 'KR', label: 'Korea (South)', icon: '🇰🇷' },
94
+ { value: 'KW', label: 'Kuwait', icon: '🇰🇼' },
95
+ { value: 'KG', label: 'Kyrgyzstan', icon: '🇰🇬' },
96
+ { value: 'LA', label: 'Laos', icon: '🇱🇦' },
97
+ { value: 'LV', label: 'Latvia', icon: '🇱🇻' },
98
+ { value: 'LB', label: 'Lebanon', icon: '🇱🇧' },
99
+ { value: 'LS', label: 'Lesotho', icon: '🇱🇸' },
100
+ { value: 'LR', label: 'Liberia', icon: '🇱🇷' },
101
+ { value: 'LY', label: 'Libya', icon: '🇱🇾' },
102
+ { value: 'LI', label: 'Liechtenstein', icon: '🇱🇮' },
103
+ { value: 'LT', label: 'Lithuania', icon: '🇱🇹' },
6
104
  { value: 'LU', label: 'Luxembourg', icon: '🇱🇺' },
7
- { value: 'DE', label: 'Allemagne', icon: '🇩🇪' },
8
- { value: 'IT', label: 'Italie', icon: '🇮🇹' },
9
- { value: 'ES', label: 'Espagne', icon: '🇪🇸' },
105
+ { value: 'MG', label: 'Madagascar', icon: '🇲🇬' },
106
+ { value: 'MW', label: 'Malawi', icon: '🇲🇼' },
107
+ { value: 'MY', label: 'Malaysia', icon: '🇲🇾' },
108
+ { value: 'MV', label: 'Maldives', icon: '🇲🇻' },
109
+ { value: 'ML', label: 'Mali', icon: '🇲🇱' },
110
+ { value: 'MT', label: 'Malta', icon: '🇲🇹' },
111
+ { value: 'MH', label: 'Marshall Islands', icon: '🇲🇭' },
112
+ { value: 'MR', label: 'Mauritania', icon: '🇲🇷' },
113
+ { value: 'MU', label: 'Mauritius', icon: '🇲🇺' },
114
+ { value: 'MX', label: 'Mexico', icon: '🇲🇽' },
115
+ { value: 'FM', label: 'Micronesia', icon: '🇫🇲' },
116
+ { value: 'MD', label: 'Moldova', icon: '🇲🇩' },
117
+ { value: 'MC', label: 'Monaco', icon: '🇲🇨' },
118
+ { value: 'MN', label: 'Mongolia', icon: '🇲🇳' },
119
+ { value: 'ME', label: 'Montenegro', icon: '🇲🇪' },
120
+ { value: 'MA', label: 'Morocco', icon: '🇲🇦' },
121
+ { value: 'MZ', label: 'Mozambique', icon: '🇲🇿' },
122
+ { value: 'MM', label: 'Myanmar', icon: '🇲🇲' },
123
+ { value: 'NA', label: 'Namibia', icon: '🇳🇦' },
124
+ { value: 'NR', label: 'Nauru', icon: '🇳🇷' },
125
+ { value: 'NP', label: 'Nepal', icon: '🇳🇵' },
126
+ { value: 'NL', label: 'Netherlands', icon: '🇳🇱' },
127
+ { value: 'NZ', label: 'New Zealand', icon: '🇳🇿' },
128
+ { value: 'NI', label: 'Nicaragua', icon: '🇳🇮' },
129
+ { value: 'NE', label: 'Niger', icon: '🇳🇪' },
130
+ { value: 'NG', label: 'Nigeria', icon: '🇳🇬' },
131
+ { value: 'MK', label: 'North Macedonia', icon: '🇲🇰' },
132
+ { value: 'NO', label: 'Norway', icon: '🇳🇴' },
133
+ { value: 'OM', label: 'Oman', icon: '🇴🇲' },
134
+ { value: 'PK', label: 'Pakistan', icon: '🇵🇰' },
135
+ { value: 'PW', label: 'Palau', icon: '🇵🇼' },
136
+ { value: 'PA', label: 'Panama', icon: '🇵🇦' },
137
+ { value: 'PG', label: 'Papua New Guinea', icon: '🇵🇬' },
138
+ { value: 'PY', label: 'Paraguay', icon: '🇵🇾' },
139
+ { value: 'PE', label: 'Peru', icon: '🇵🇪' },
140
+ { value: 'PH', label: 'Philippines', icon: '🇵🇭' },
141
+ { value: 'PL', label: 'Poland', icon: '🇵🇱' },
10
142
  { value: 'PT', label: 'Portugal', icon: '🇵🇹' },
11
- { value: 'AT', label: 'Autriche', icon: '🇦🇹' },
12
- { value: 'CH', label: 'Suisse', icon: '🇨🇭' },
13
- { value: 'NL', label: 'Pays-Bas', icon: '🇳🇱' },
14
- { value: 'OTHER', label: 'Autre', icon: '🌍' },
143
+ { value: 'QA', label: 'Qatar', icon: '🇶🇦' },
144
+ { value: 'RO', label: 'Romania', icon: '🇷🇴' },
145
+ { value: 'RU', label: 'Russia', icon: '🇷🇺' },
146
+ { value: 'RW', label: 'Rwanda', icon: '🇷🇼' },
147
+ { value: 'WS', label: 'Samoa', icon: '🇼🇸' },
148
+ { value: 'SM', label: 'San Marino', icon: '🇸🇲' },
149
+ { value: 'ST', label: 'Sao Tome and Principe', icon: '🇸🇹' },
150
+ { value: 'SA', label: 'Saudi Arabia', icon: '🇸🇦' },
151
+ { value: 'SN', label: 'Senegal', icon: '🇸🇳' },
152
+ { value: 'RS', label: 'Serbia', icon: '🇷🇸' },
153
+ { value: 'SC', label: 'Seychelles', icon: '🇸🇨' },
154
+ { value: 'SL', label: 'Sierra Leone', icon: '🇸🇱' },
155
+ { value: 'SG', label: 'Singapore', icon: '🇸🇬' },
156
+ { value: 'SK', label: 'Slovakia', icon: '🇸🇰' },
157
+ { value: 'SI', label: 'Slovenia', icon: '🇸🇮' },
158
+ { value: 'SB', label: 'Solomon Islands', icon: '🇸🇧' },
159
+ { value: 'SO', label: 'Somalia', icon: '🇸🇴' },
160
+ { value: 'ZA', label: 'South Africa', icon: '🇿🇦' },
161
+ { value: 'ES', label: 'Spain', icon: '🇪🇸' },
162
+ { value: 'LK', label: 'Sri Lanka', icon: '🇱🇰' },
163
+ { value: 'SD', label: 'Sudan', icon: '🇸🇩' },
164
+ { value: 'SR', label: 'Suriname', icon: '🇸🇷' },
165
+ { value: 'SE', label: 'Sweden', icon: '🇸🇪' },
166
+ { value: 'CH', label: 'Switzerland', icon: '🇨🇭' },
167
+ { value: 'SY', label: 'Syria', icon: '🇸🇾' },
168
+ { value: 'TW', label: 'Taiwan', icon: '🇹🇼' },
169
+ { value: 'TJ', label: 'Tajikistan', icon: '🇹🇯' },
170
+ { value: 'TZ', label: 'Tanzania', icon: '🇹🇿' },
171
+ { value: 'TH', label: 'Thailand', icon: '🇹🇭' },
172
+ { value: 'TL', label: 'Timor-Leste', icon: '🇹🇱' },
173
+ { value: 'TG', label: 'Togo', icon: '🇹🇬' },
174
+ { value: 'TO', label: 'Tonga', icon: '🇹🇴' },
175
+ { value: 'TT', label: 'Trinidad and Tobago', icon: '🇹🇹' },
176
+ { value: 'TN', label: 'Tunisia', icon: '🇹🇳' },
177
+ { value: 'TR', label: 'Turkey', icon: '🇹🇷' },
178
+ { value: 'TM', label: 'Turkmenistan', icon: '🇹🇲' },
179
+ { value: 'TV', label: 'Tuvalu', icon: '🇹🇻' },
180
+ { value: 'UG', label: 'Uganda', icon: '🇺🇬' },
181
+ { value: 'UA', label: 'Ukraine', icon: '🇺🇦' },
182
+ { value: 'AE', label: 'United Arab Emirates', icon: '🇦🇪' },
183
+ { value: 'GB', label: 'United Kingdom', icon: '🇬🇧' },
184
+ { value: 'US', label: 'United States', icon: '🇺🇸' },
185
+ { value: 'UY', label: 'Uruguay', icon: '🇺🇾' },
186
+ { value: 'UZ', label: 'Uzbekistan', icon: '🇺🇿' },
187
+ { value: 'VU', label: 'Vanuatu', icon: '🇻🇺' },
188
+ { value: 'VA', label: 'Vatican City', icon: '🇻🇦' },
189
+ { value: 'VE', label: 'Venezuela', icon: '🇻🇪' },
190
+ { value: 'VN', label: 'Vietnam', icon: '🇻🇳' },
191
+ { value: 'YE', label: 'Yemen', icon: '🇾🇪' },
192
+ { value: 'ZM', label: 'Zambia', icon: '🇿🇲' },
193
+ { value: 'ZW', label: 'Zimbabwe', icon: '🇿🇼' },
194
+ { value: 'OTHER', label: 'Other', icon: '🌍' },
15
195
  ];
16
196
  export const CountrySelection = ({ element, value, onValueChange, error, }) => {
17
- const countries = element.options || defaultCountries;
197
+ // Use the massive list if the backend didn't supply specific options
198
+ const countries = element.options && element.options.length > 0 ? element.options : ALL_COUNTRIES;
199
+ const [searchQuery, setSearchQuery] = useState('');
200
+ // Filter countries based on user input
201
+ const filteredCountries = useMemo(() => {
202
+ if (!searchQuery.trim())
203
+ return countries;
204
+ return countries.filter(country => country.label.toLowerCase().includes(searchQuery.toLowerCase()));
205
+ }, [countries, searchQuery]);
206
+ // Extract the render logic into a separate function for FlatList performance
207
+ const renderCountry = ({ item: country }) => (<TouchableOpacity style={[
208
+ styles.option,
209
+ value === country.value && styles.selectedOption
210
+ ]} onPress={() => onValueChange(country.value)} activeOpacity={0.7}>
211
+ <Text style={styles.optionIcon}>{country.icon}</Text>
212
+ <View style={styles.optionContent}>
213
+ <Text style={[
214
+ styles.optionLabel,
215
+ value === country.value && styles.selectedOptionLabel
216
+ ]}>
217
+ {country.label}
218
+ </Text>
219
+ {country.description && (<Text style={styles.optionDescription}>{country.description}</Text>)}
220
+ </View>
221
+ {value === country.value && (<View style={styles.checkmark}>
222
+ <Text style={styles.checkmarkText}>✓</Text>
223
+ </View>)}
224
+ </TouchableOpacity>);
18
225
  return (<View style={styles.container}>
19
- <Text style={styles.title}>{element.title}</Text>
20
- <Text style={styles.description}>{element.description}</Text>
21
-
22
- <ScrollView style={styles.optionsContainer} showsVerticalScrollIndicator={false}>
23
- {countries.map((country) => (<TouchableOpacity key={country.value} style={[
24
- styles.option,
25
- value === country.value && styles.selectedOption
26
- ]} onPress={() => onValueChange(country.value)}>
27
- <Text style={styles.optionIcon}>{country.icon}</Text>
28
- <View style={styles.optionContent}>
29
- <Text style={[
30
- styles.optionLabel,
31
- value === country.value && styles.selectedOptionLabel
32
- ]}>
33
- {country.label}
34
- </Text>
35
- {country.description && (<Text style={styles.optionDescription}>{country.description}</Text>)}
36
- </View>
37
- {value === country.value && (<View style={styles.checkmark}>
38
- <Text style={styles.checkmarkText}>✓</Text>
39
- </View>)}
40
- </TouchableOpacity>))}
41
- </ScrollView>
226
+ <View style={styles.headerContainer}>
227
+ <Text style={styles.title}>{element.title}</Text>
228
+ <Text style={styles.description}>{element.description}</Text>
229
+
230
+ {/* Search Bar for better UX */}
231
+ <TextInput style={styles.searchInput} placeholder="Rechercher un pays..." placeholderTextColor="#999" value={searchQuery} onChangeText={setSearchQuery} clearButtonMode="while-editing" // Adds a clear 'x' on iOS
232
+ />
233
+ </View>
234
+
235
+ <FlatList data={filteredCountries} keyExtractor={(item) => item.value} renderItem={renderCountry} showsVerticalScrollIndicator={false} contentContainerStyle={styles.listContent} keyboardShouldPersistTaps="handled" initialNumToRender={15} maxToRenderPerBatch={20} windowSize={5} removeClippedSubviews={true} ListEmptyComponent={<Text style={styles.emptyText}>Aucun pays trouvé</Text>}/>
42
236
 
43
237
  {error && (<Text style={styles.errorText}>{error}</Text>)}
44
238
  </View>);
@@ -46,7 +240,12 @@ export const CountrySelection = ({ element, value, onValueChange, error, }) => {
46
240
  const styles = StyleSheet.create({
47
241
  container: {
48
242
  flex: 1,
49
- padding: 16,
243
+ backgroundColor: '#fff',
244
+ },
245
+ headerContainer: {
246
+ paddingHorizontal: 16,
247
+ paddingTop: 16,
248
+ paddingBottom: 8,
50
249
  },
51
250
  title: {
52
251
  fontSize: 24,
@@ -59,11 +258,28 @@ const styles = StyleSheet.create({
59
258
  fontSize: 16,
60
259
  color: '#666',
61
260
  textAlign: 'center',
62
- marginBottom: 24,
261
+ marginBottom: 16,
63
262
  lineHeight: 22,
64
263
  },
65
- optionsContainer: {
66
- flex: 1,
264
+ searchInput: {
265
+ backgroundColor: '#f5f5f5',
266
+ borderRadius: 10,
267
+ padding: 12,
268
+ fontSize: 16,
269
+ color: '#333',
270
+ borderWidth: 1,
271
+ borderColor: '#e5e5e5',
272
+ marginBottom: 8,
273
+ },
274
+ listContent: {
275
+ paddingHorizontal: 16,
276
+ paddingBottom: 24,
277
+ },
278
+ emptyText: {
279
+ textAlign: 'center',
280
+ color: '#999',
281
+ marginTop: 20,
282
+ fontSize: 16,
67
283
  },
68
284
  option: {
69
285
  flexDirection: 'row',
@@ -75,13 +291,10 @@ const styles = StyleSheet.create({
75
291
  borderWidth: 2,
76
292
  borderColor: '#e5e5e5',
77
293
  shadowColor: '#000',
78
- shadowOffset: {
79
- width: 0,
80
- height: 2,
81
- },
82
- shadowOpacity: 0.1,
294
+ shadowOffset: { width: 0, height: 2 },
295
+ shadowOpacity: 0.05,
83
296
  shadowRadius: 3.84,
84
- elevation: 5,
297
+ elevation: 3,
85
298
  },
86
299
  selectedOption: {
87
300
  borderColor: '#4CAF50',
@@ -123,24 +336,7 @@ const styles = StyleSheet.create({
123
336
  errorText: {
124
337
  color: '#dc2626',
125
338
  fontSize: 14,
126
- marginTop: 8,
127
- },
128
- buttonContainer: {
129
- flexDirection: 'row',
130
- justifyContent: 'space-between',
131
- marginTop: 24,
132
- gap: 10,
133
- },
134
- button: {
135
- flex: 1,
136
- padding: 12,
137
- backgroundColor: '#4CAF50',
138
- textAlign: 'center',
139
- },
140
- buttonText: {
141
- color: 'white',
142
- fontSize: 16,
143
- fontWeight: 'bold',
339
+ margin: 16,
144
340
  textAlign: 'center',
145
341
  },
146
342
  });
@@ -1 +1 @@
1
- {"version":3,"file":"CountrySelection.js","sourceRoot":"","sources":["../../../../src/components/KYCElements/CountrySelection.tsx"],"names":[],"mappings":"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","sourcesContent":["import React from 'react';\nimport { View, Text, TouchableOpacity, StyleSheet, ScrollView } from 'react-native';\nimport { KYCElement, KYCElementOption } from '../../types/KYC.types';\n\ninterface CountrySelectionProps {\n element: KYCElement;\n value?: string;\n onValueChange: (value: string) => void;\n error?: string;\n}\n\nconst defaultCountries: KYCElementOption[] = [\n { value: 'FR', label: 'France', icon: '🇫🇷' },\n { value: 'BE', label: 'Belgique', icon: '🇧🇪' },\n { value: 'LU', label: 'Luxembourg', icon: '🇱🇺' },\n { value: 'DE', label: 'Allemagne', icon: '🇩🇪' },\n { value: 'IT', label: 'Italie', icon: '🇮🇹' },\n { value: 'ES', label: 'Espagne', icon: '🇪🇸' },\n { value: 'PT', label: 'Portugal', icon: '🇵🇹' },\n { value: 'AT', label: 'Autriche', icon: '🇦🇹' },\n { value: 'CH', label: 'Suisse', icon: '🇨🇭' },\n { value: 'NL', label: 'Pays-Bas', icon: '🇳🇱' },\n { value: 'OTHER', label: 'Autre', icon: '🌍' },\n];\n\nexport const CountrySelection: React.FC<CountrySelectionProps> = ({\n element,\n value,\n onValueChange,\n error,\n}) => {\n const countries = element.options || defaultCountries;\n\n return (\n <View style={styles.container}>\n <Text style={styles.title}>{element.title}</Text>\n <Text style={styles.description}>{element.description}</Text>\n \n <ScrollView style={styles.optionsContainer} showsVerticalScrollIndicator={false}>\n {countries.map((country) => (\n <TouchableOpacity\n key={country.value}\n style={[\n styles.option,\n value === country.value && styles.selectedOption\n ]}\n onPress={() => onValueChange(country.value)}\n >\n <Text style={styles.optionIcon}>{country.icon}</Text>\n <View style={styles.optionContent}>\n <Text style={[\n styles.optionLabel,\n value === country.value && styles.selectedOptionLabel\n ]}>\n {country.label}\n </Text>\n {country.description && (\n <Text style={styles.optionDescription}>{country.description}</Text>\n )}\n </View>\n {value === country.value && (\n <View style={styles.checkmark}>\n <Text style={styles.checkmarkText}>✓</Text>\n </View>\n )}\n </TouchableOpacity>\n ))}\n </ScrollView>\n\n {error && (\n <Text style={styles.errorText}>{error}</Text>\n )}\n </View>\n );\n};\n\nconst styles = StyleSheet.create({\n container: {\n flex: 1,\n padding: 16,\n },\n title: {\n fontSize: 24,\n fontWeight: 'bold',\n color: '#333',\n marginBottom: 8,\n textAlign: 'center',\n },\n description: {\n fontSize: 16,\n color: '#666',\n textAlign: 'center',\n marginBottom: 24,\n lineHeight: 22,\n },\n optionsContainer: {\n flex: 1,\n },\n option: {\n flexDirection: 'row',\n alignItems: 'center',\n padding: 16,\n backgroundColor: 'white',\n borderRadius: 12,\n marginBottom: 12,\n borderWidth: 2,\n borderColor: '#e5e5e5',\n shadowColor: '#000',\n shadowOffset: {\n width: 0,\n height: 2,\n },\n shadowOpacity: 0.1,\n shadowRadius: 3.84,\n elevation: 5,\n },\n selectedOption: {\n borderColor: '#4CAF50',\n backgroundColor: '#f0f9f0',\n },\n optionIcon: {\n fontSize: 32,\n marginRight: 16,\n },\n optionContent: {\n flex: 1,\n },\n optionLabel: {\n fontSize: 18,\n fontWeight: '600',\n color: '#333',\n },\n selectedOptionLabel: {\n color: '#4CAF50',\n },\n optionDescription: {\n fontSize: 14,\n color: '#666',\n marginTop: 4,\n },\n checkmark: {\n width: 24,\n height: 24,\n borderRadius: 12,\n backgroundColor: '#4CAF50',\n justifyContent: 'center',\n alignItems: 'center',\n },\n checkmarkText: {\n color: 'white',\n fontSize: 16,\n fontWeight: 'bold',\n },\n errorText: {\n color: '#dc2626',\n fontSize: 14,\n marginTop: 8,},\n buttonContainer: {\n flexDirection: 'row',\n justifyContent: 'space-between',\n marginTop: 24,\n gap: 10,\n },\n button: {\n flex: 1,\n padding: 12,\n backgroundColor: '#4CAF50',\n textAlign: 'center',\n },\n buttonText: {\n color: 'white',\n fontSize: 16,\n fontWeight: 'bold',\n textAlign: 'center',\n },\n\n}); "]}
1
+ {"version":3,"file":"CountrySelection.js","sourceRoot":"","sources":["../../../../src/components/KYCElements/CountrySelection.tsx"],"names":[],"mappings":"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","sourcesContent":["import React, { useState, useMemo } from 'react';\nimport { \n View, \n Text, \n TouchableOpacity, \n StyleSheet, \n FlatList, \n TextInput \n} from 'react-native';\nimport { KYCElement, KYCElementOption } from '../../types/KYC.types';\n\ninterface CountrySelectionProps {\n element: KYCElement;\n value?: string;\n onValueChange: (value: string) => void;\n error?: string;\n}\n\n// 🌍 Comprehensive Global Country List\nconst ALL_COUNTRIES: KYCElementOption[] = [\n { value: 'AF', label: 'Afghanistan', icon: '🇦🇫' },\n { value: 'AL', label: 'Albania', icon: '🇦🇱' },\n { value: 'DZ', label: 'Algeria', icon: '🇩🇿' },\n { value: 'AD', label: 'Andorra', icon: '🇦🇩' },\n { value: 'AO', label: 'Angola', icon: '🇦🇴' },\n { value: 'AR', label: 'Argentina', icon: '🇦🇷' },\n { value: 'AM', label: 'Armenia', icon: '🇦🇲' },\n { value: 'AU', label: 'Australia', icon: '🇦🇺' },\n { value: 'AT', label: 'Austria', icon: '🇦🇹' },\n { value: 'AZ', label: 'Azerbaijan', icon: '🇦🇿' },\n { value: 'BS', label: 'Bahamas', icon: '🇧🇸' },\n { value: 'BH', label: 'Bahrain', icon: '🇧🇭' },\n { value: 'BD', label: 'Bangladesh', icon: '🇧🇩' },\n { value: 'BB', label: 'Barbados', icon: '🇧🇧' },\n { value: 'BY', label: 'Belarus', icon: '🇧🇾' },\n { value: 'BE', label: 'Belgium', icon: '🇧🇪' },\n { value: 'BZ', label: 'Belize', icon: '🇧🇿' },\n { value: 'BJ', label: 'Benin', icon: '🇧🇯' },\n { value: 'BT', label: 'Bhutan', icon: '🇧🇹' },\n { value: 'BO', label: 'Bolivia', icon: '🇧🇴' },\n { value: 'BA', label: 'Bosnia and Herzegovina', icon: '🇧🇦' },\n { value: 'BW', label: 'Botswana', icon: '🇧🇼' },\n { value: 'BR', label: 'Brazil', icon: '🇧🇷' },\n { value: 'BN', label: 'Brunei', icon: '🇧🇳' },\n { value: 'BG', label: 'Bulgaria', icon: '🇧🇬' },\n { value: 'BF', label: 'Burkina Faso', icon: '🇧🇫' },\n { value: 'BI', label: 'Burundi', icon: '🇧🇮' },\n { value: 'CV', label: 'Cabo Verde', icon: '🇨🇻' },\n { value: 'KH', label: 'Cambodia', icon: '🇰🇭' },\n { value: 'CM', label: 'Cameroon', icon: '🇨🇲' },\n { value: 'CA', label: 'Canada', icon: '🇨🇦' },\n { value: 'CF', label: 'Central African Republic', icon: '🇨🇫' },\n { value: 'TD', label: 'Chad', icon: '🇹🇩' },\n { value: 'CL', label: 'Chile', icon: '🇨🇱' },\n { value: 'CN', label: 'China', icon: '🇨🇳' },\n { value: 'CO', label: 'Colombia', icon: '🇨🇴' },\n { value: 'KM', label: 'Comoros', icon: '🇰🇲' },\n { value: 'CG', label: 'Congo', icon: '🇨🇬' },\n { value: 'CD', label: 'Congo (DRC)', icon: '🇨🇩' },\n { value: 'CR', label: 'Costa Rica', icon: '🇨🇷' },\n { value: 'HR', label: 'Croatia', icon: '🇭🇷' },\n { value: 'CU', label: 'Cuba', icon: '🇨🇺' },\n { value: 'CY', label: 'Croatia', icon: '🇨🇾' },\n { value: 'CZ', label: 'Czechia', icon: '🇨🇿' },\n { value: 'DK', label: 'Denmark', icon: '🇩🇰' },\n { value: 'DJ', label: 'Djibouti', icon: '🇩🇯' },\n { value: 'DM', label: 'Dominica', icon: '🇩🇲' },\n { value: 'DO', label: 'Dominican Republic', icon: '🇩🇴' },\n { value: 'EC', label: 'Ecuador', icon: '🇪🇨' },\n { value: 'EG', label: 'Egypt', icon: '🇪🇬' },\n { value: 'SV', label: 'El Salvador', icon: '🇸🇻' },\n { value: 'GQ', label: 'Equatorial Guinea', icon: '🇬🇶' },\n { value: 'ER', label: 'Eritrea', icon: '🇪🇷' },\n { value: 'EE', label: 'Estonia', icon: '🇪🇪' },\n { value: 'SZ', label: 'Eswatini', icon: '🇸🇿' },\n { value: 'ET', label: 'Ethiopia', icon: '🇪🇹' },\n { value: 'FJ', label: 'Fiji', icon: '🇫🇯' },\n { value: 'FI', label: 'Finland', icon: '🇫🇮' },\n { value: 'FR', label: 'France', icon: '🇫🇷' },\n { value: 'GA', label: 'Gabon', icon: '🇬🇦' },\n { value: 'GM', label: 'Gambia', icon: '🇬🇲' },\n { value: 'GE', label: 'Georgia', icon: '🇬🇪' },\n { value: 'DE', label: 'Germany', icon: '🇩🇪' },\n { value: 'GH', label: 'Ghana', icon: '🇬🇭' },\n { value: 'GR', label: 'Greece', icon: '🇬🇷' },\n { value: 'GD', label: 'Grenada', icon: '🇬🇩' },\n { value: 'GT', label: 'Guatemala', icon: '🇬🇹' },\n { value: 'GN', label: 'Guinea', icon: '🇬🇳' },\n { value: 'GW', label: 'Guinea-Bissau', icon: '🇬🇼' },\n { value: 'GY', label: 'Guyana', icon: '🇬🇾' },\n { value: 'HT', label: 'Haiti', icon: '🇭🇹' },\n { value: 'HN', label: 'Honduras', icon: '🇭🇳' },\n { value: 'HU', label: 'Hungary', icon: '🇭🇺' },\n { value: 'IS', label: 'Iceland', icon: '🇮🇸' },\n { value: 'IN', label: 'India', icon: '🇮🇳' },\n { value: 'ID', label: 'Indonesia', icon: '🇮🇩' },\n { value: 'IR', label: 'Iran', icon: '🇮🇷' },\n { value: 'IQ', label: 'Iraq', icon: '🇮🇶' },\n { value: 'IE', label: 'Ireland', icon: '🇮🇪' },\n { value: 'IL', label: 'Ireland', icon: '🇮🇪' },\n { value: 'IT', label: 'Italy', icon: '🇮🇹' },\n { value: 'JM', label: 'Jamaica', icon: '🇯🇲' },\n { value: 'JP', label: 'Japan', icon: '🇯🇵' },\n { value: 'JO', label: 'Jordan', icon: '🇯🇴' },\n { value: 'KZ', label: 'Kazakhstan', icon: '🇰🇿' },\n { value: 'KE', label: 'Kenya', icon: '🇰🇪' },\n { value: 'KI', label: 'Kiribati', icon: '🇰🇮' },\n { value: 'KP', label: 'Korea (North)', icon: '🇰🇵' },\n { value: 'KR', label: 'Korea (South)', icon: '🇰🇷' },\n { value: 'KW', label: 'Kuwait', icon: '🇰🇼' },\n { value: 'KG', label: 'Kyrgyzstan', icon: '🇰🇬' },\n { value: 'LA', label: 'Laos', icon: '🇱🇦' },\n { value: 'LV', label: 'Latvia', icon: '🇱🇻' },\n { value: 'LB', label: 'Lebanon', icon: '🇱🇧' },\n { value: 'LS', label: 'Lesotho', icon: '🇱🇸' },\n { value: 'LR', label: 'Liberia', icon: '🇱🇷' },\n { value: 'LY', label: 'Libya', icon: '🇱🇾' },\n { value: 'LI', label: 'Liechtenstein', icon: '🇱🇮' },\n { value: 'LT', label: 'Lithuania', icon: '🇱🇹' },\n { value: 'LU', label: 'Luxembourg', icon: '🇱🇺' },\n { value: 'MG', label: 'Madagascar', icon: '🇲🇬' },\n { value: 'MW', label: 'Malawi', icon: '🇲🇼' },\n { value: 'MY', label: 'Malaysia', icon: '🇲🇾' },\n { value: 'MV', label: 'Maldives', icon: '🇲🇻' },\n { value: 'ML', label: 'Mali', icon: '🇲🇱' },\n { value: 'MT', label: 'Malta', icon: '🇲🇹' },\n { value: 'MH', label: 'Marshall Islands', icon: '🇲🇭' },\n { value: 'MR', label: 'Mauritania', icon: '🇲🇷' },\n { value: 'MU', label: 'Mauritius', icon: '🇲🇺' },\n { value: 'MX', label: 'Mexico', icon: '🇲🇽' },\n { value: 'FM', label: 'Micronesia', icon: '🇫🇲' },\n { value: 'MD', label: 'Moldova', icon: '🇲🇩' },\n { value: 'MC', label: 'Monaco', icon: '🇲🇨' },\n { value: 'MN', label: 'Mongolia', icon: '🇲🇳' },\n { value: 'ME', label: 'Montenegro', icon: '🇲🇪' },\n { value: 'MA', label: 'Morocco', icon: '🇲🇦' },\n { value: 'MZ', label: 'Mozambique', icon: '🇲🇿' },\n { value: 'MM', label: 'Myanmar', icon: '🇲🇲' },\n { value: 'NA', label: 'Namibia', icon: '🇳🇦' },\n { value: 'NR', label: 'Nauru', icon: '🇳🇷' },\n { value: 'NP', label: 'Nepal', icon: '🇳🇵' },\n { value: 'NL', label: 'Netherlands', icon: '🇳🇱' },\n { value: 'NZ', label: 'New Zealand', icon: '🇳🇿' },\n { value: 'NI', label: 'Nicaragua', icon: '🇳🇮' },\n { value: 'NE', label: 'Niger', icon: '🇳🇪' },\n { value: 'NG', label: 'Nigeria', icon: '🇳🇬' },\n { value: 'MK', label: 'North Macedonia', icon: '🇲🇰' },\n { value: 'NO', label: 'Norway', icon: '🇳🇴' },\n { value: 'OM', label: 'Oman', icon: '🇴🇲' },\n { value: 'PK', label: 'Pakistan', icon: '🇵🇰' },\n { value: 'PW', label: 'Palau', icon: '🇵🇼' },\n { value: 'PA', label: 'Panama', icon: '🇵🇦' },\n { value: 'PG', label: 'Papua New Guinea', icon: '🇵🇬' },\n { value: 'PY', label: 'Paraguay', icon: '🇵🇾' },\n { value: 'PE', label: 'Peru', icon: '🇵🇪' },\n { value: 'PH', label: 'Philippines', icon: '🇵🇭' },\n { value: 'PL', label: 'Poland', icon: '🇵🇱' },\n { value: 'PT', label: 'Portugal', icon: '🇵🇹' },\n { value: 'QA', label: 'Qatar', icon: '🇶🇦' },\n { value: 'RO', label: 'Romania', icon: '🇷🇴' },\n { value: 'RU', label: 'Russia', icon: '🇷🇺' },\n { value: 'RW', label: 'Rwanda', icon: '🇷🇼' },\n { value: 'WS', label: 'Samoa', icon: '🇼🇸' },\n { value: 'SM', label: 'San Marino', icon: '🇸🇲' },\n { value: 'ST', label: 'Sao Tome and Principe', icon: '🇸🇹' },\n { value: 'SA', label: 'Saudi Arabia', icon: '🇸🇦' },\n { value: 'SN', label: 'Senegal', icon: '🇸🇳' },\n { value: 'RS', label: 'Serbia', icon: '🇷🇸' },\n { value: 'SC', label: 'Seychelles', icon: '🇸🇨' },\n { value: 'SL', label: 'Sierra Leone', icon: '🇸🇱' },\n { value: 'SG', label: 'Singapore', icon: '🇸🇬' },\n { value: 'SK', label: 'Slovakia', icon: '🇸🇰' },\n { value: 'SI', label: 'Slovenia', icon: '🇸🇮' },\n { value: 'SB', label: 'Solomon Islands', icon: '🇸🇧' },\n { value: 'SO', label: 'Somalia', icon: '🇸🇴' },\n { value: 'ZA', label: 'South Africa', icon: '🇿🇦' },\n { value: 'ES', label: 'Spain', icon: '🇪🇸' },\n { value: 'LK', label: 'Sri Lanka', icon: '🇱🇰' },\n { value: 'SD', label: 'Sudan', icon: '🇸🇩' },\n { value: 'SR', label: 'Suriname', icon: '🇸🇷' },\n { value: 'SE', label: 'Sweden', icon: '🇸🇪' },\n { value: 'CH', label: 'Switzerland', icon: '🇨🇭' },\n { value: 'SY', label: 'Syria', icon: '🇸🇾' },\n { value: 'TW', label: 'Taiwan', icon: '🇹🇼' },\n { value: 'TJ', label: 'Tajikistan', icon: '🇹🇯' },\n { value: 'TZ', label: 'Tanzania', icon: '🇹🇿' },\n { value: 'TH', label: 'Thailand', icon: '🇹🇭' },\n { value: 'TL', label: 'Timor-Leste', icon: '🇹🇱' },\n { value: 'TG', label: 'Togo', icon: '🇹🇬' },\n { value: 'TO', label: 'Tonga', icon: '🇹🇴' },\n { value: 'TT', label: 'Trinidad and Tobago', icon: '🇹🇹' },\n { value: 'TN', label: 'Tunisia', icon: '🇹🇳' },\n { value: 'TR', label: 'Turkey', icon: '🇹🇷' },\n { value: 'TM', label: 'Turkmenistan', icon: '🇹🇲' },\n { value: 'TV', label: 'Tuvalu', icon: '🇹🇻' },\n { value: 'UG', label: 'Uganda', icon: '🇺🇬' },\n { value: 'UA', label: 'Ukraine', icon: '🇺🇦' },\n { value: 'AE', label: 'United Arab Emirates', icon: '🇦🇪' },\n { value: 'GB', label: 'United Kingdom', icon: '🇬🇧' },\n { value: 'US', label: 'United States', icon: '🇺🇸' },\n { value: 'UY', label: 'Uruguay', icon: '🇺🇾' },\n { value: 'UZ', label: 'Uzbekistan', icon: '🇺🇿' },\n { value: 'VU', label: 'Vanuatu', icon: '🇻🇺' },\n { value: 'VA', label: 'Vatican City', icon: '🇻🇦' },\n { value: 'VE', label: 'Venezuela', icon: '🇻🇪' },\n { value: 'VN', label: 'Vietnam', icon: '🇻🇳' },\n { value: 'YE', label: 'Yemen', icon: '🇾🇪' },\n { value: 'ZM', label: 'Zambia', icon: '🇿🇲' },\n { value: 'ZW', label: 'Zimbabwe', icon: '🇿🇼' },\n { value: 'OTHER', label: 'Other', icon: '🌍' },\n];\n\nexport const CountrySelection: React.FC<CountrySelectionProps> = ({\n element,\n value,\n onValueChange,\n error,\n}) => {\n // Use the massive list if the backend didn't supply specific options\n const countries = element.options && element.options.length > 0 ? element.options : ALL_COUNTRIES;\n const [searchQuery, setSearchQuery] = useState('');\n\n // Filter countries based on user input\n const filteredCountries = useMemo(() => {\n if (!searchQuery.trim()) return countries;\n return countries.filter(country =>\n country.label.toLowerCase().includes(searchQuery.toLowerCase())\n );\n }, [countries, searchQuery]);\n\n // Extract the render logic into a separate function for FlatList performance\n const renderCountry = ({ item: country }: { item: KYCElementOption }) => (\n <TouchableOpacity\n style={[\n styles.option,\n value === country.value && styles.selectedOption\n ]}\n onPress={() => onValueChange(country.value)}\n activeOpacity={0.7}\n >\n <Text style={styles.optionIcon}>{country.icon}</Text>\n <View style={styles.optionContent}>\n <Text style={[\n styles.optionLabel,\n value === country.value && styles.selectedOptionLabel\n ]}>\n {country.label}\n </Text>\n {country.description && (\n <Text style={styles.optionDescription}>{country.description}</Text>\n )}\n </View>\n {value === country.value && (\n <View style={styles.checkmark}>\n <Text style={styles.checkmarkText}>✓</Text>\n </View>\n )}\n </TouchableOpacity>\n );\n\n return (\n <View style={styles.container}>\n <View style={styles.headerContainer}>\n <Text style={styles.title}>{element.title}</Text>\n <Text style={styles.description}>{element.description}</Text>\n \n {/* Search Bar for better UX */}\n <TextInput\n style={styles.searchInput}\n placeholder=\"Rechercher un pays...\"\n placeholderTextColor=\"#999\"\n value={searchQuery}\n onChangeText={setSearchQuery}\n clearButtonMode=\"while-editing\" // Adds a clear 'x' on iOS\n />\n </View>\n\n <FlatList\n data={filteredCountries}\n keyExtractor={(item) => item.value}\n renderItem={renderCountry}\n showsVerticalScrollIndicator={false}\n contentContainerStyle={styles.listContent}\n keyboardShouldPersistTaps=\"handled\"\n initialNumToRender={15}\n maxToRenderPerBatch={20}\n windowSize={5}\n removeClippedSubviews={true}\n ListEmptyComponent={\n <Text style={styles.emptyText}>Aucun pays trouvé</Text>\n }\n />\n\n {error && (\n <Text style={styles.errorText}>{error}</Text>\n )}\n </View>\n );\n};\n\nconst styles = StyleSheet.create({\n container: {\n flex: 1,\n backgroundColor: '#fff', \n },\n headerContainer: {\n paddingHorizontal: 16,\n paddingTop: 16,\n paddingBottom: 8,\n },\n title: {\n fontSize: 24,\n fontWeight: 'bold',\n color: '#333',\n marginBottom: 8,\n textAlign: 'center',\n },\n description: {\n fontSize: 16,\n color: '#666',\n textAlign: 'center',\n marginBottom: 16,\n lineHeight: 22,\n },\n searchInput: {\n backgroundColor: '#f5f5f5',\n borderRadius: 10,\n padding: 12,\n fontSize: 16,\n color: '#333',\n borderWidth: 1,\n borderColor: '#e5e5e5',\n marginBottom: 8,\n },\n listContent: {\n paddingHorizontal: 16,\n paddingBottom: 24, \n },\n emptyText: {\n textAlign: 'center',\n color: '#999',\n marginTop: 20,\n fontSize: 16,\n },\n option: {\n flexDirection: 'row',\n alignItems: 'center',\n padding: 16,\n backgroundColor: 'white',\n borderRadius: 12,\n marginBottom: 12,\n borderWidth: 2,\n borderColor: '#e5e5e5',\n shadowColor: '#000',\n shadowOffset: { width: 0, height: 2 },\n shadowOpacity: 0.05, \n shadowRadius: 3.84,\n elevation: 3,\n },\n selectedOption: {\n borderColor: '#4CAF50',\n backgroundColor: '#f0f9f0',\n },\n optionIcon: {\n fontSize: 32,\n marginRight: 16,\n },\n optionContent: {\n flex: 1,\n },\n optionLabel: {\n fontSize: 18,\n fontWeight: '600',\n color: '#333',\n },\n selectedOptionLabel: {\n color: '#4CAF50',\n },\n optionDescription: {\n fontSize: 14,\n color: '#666',\n marginTop: 4,\n },\n checkmark: {\n width: 24,\n height: 24,\n borderRadius: 12,\n backgroundColor: '#4CAF50',\n justifyContent: 'center',\n alignItems: 'center',\n },\n checkmarkText: {\n color: 'white',\n fontSize: 16,\n fontWeight: 'bold',\n },\n errorText: {\n color: '#dc2626',\n fontSize: 14,\n margin: 16,\n textAlign: 'center',\n },\n});"]}
@@ -1 +1 @@
1
- {"version":3,"file":"EmailVerificationTemplate.d.ts","sourceRoot":"","sources":["../../../../src/components/KYCElements/EmailVerificationTemplate.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAsC,MAAM,OAAO,CAAC;AAE3D,OAAO,EAAE,iBAAiB,EAAiB,MAAM,uBAAuB,CAAC;AAMzE,UAAU,8BAA8B;IACpC,SAAS,EAAE,iBAAiB,CAAC;IAC7B,KAAK,CAAC,EAAE,GAAG,CAAC;IACZ,aAAa,EAAE,CAAC,IAAI,EAAE,GAAG,KAAK,IAAI,CAAC;IACnC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC;CACrB;AASD,eAAO,MAAM,yBAAyB,EAAE,KAAK,CAAC,EAAE,CAAC,8BAA8B,CAkP9E,CAAC"}
1
+ {"version":3,"file":"EmailVerificationTemplate.d.ts","sourceRoot":"","sources":["../../../../src/components/KYCElements/EmailVerificationTemplate.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAsC,MAAM,OAAO,CAAC;AAE3D,OAAO,EAAE,iBAAiB,EAAiB,MAAM,uBAAuB,CAAC;AAMzE,UAAU,8BAA8B;IACpC,SAAS,EAAE,iBAAiB,CAAC;IAC7B,KAAK,CAAC,EAAE,GAAG,CAAC;IACZ,aAAa,EAAE,CAAC,IAAI,EAAE,GAAG,KAAK,IAAI,CAAC;IACnC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC;CACrB;AASD,eAAO,MAAM,yBAAyB,EAAE,KAAK,CAAC,EAAE,CAAC,8BAA8B,CAwN9E,CAAC"}
@@ -18,8 +18,6 @@ export const EmailVerificationTemplate = ({ component, value, onValueChange, err
18
18
  const [otp, setOtp] = useState('');
19
19
  const [localError, setLocalError] = useState(null);
20
20
  const [isSimulating, setIsSimulating] = useState(false);
21
- // 🚨 NEW: Track actual focus state for visual feedback
22
- const [isInputFocused, setIsInputFocused] = useState(false);
23
21
  const inputRef = useRef(null);
24
22
  const title = getLocalizedText(component.labels);
25
23
  const instructions = getLocalizedText(component.instructions);
@@ -33,20 +31,6 @@ export const EmailVerificationTemplate = ({ component, value, onValueChange, err
33
31
  handleVerifyCode();
34
32
  }
35
33
  }, [otp]);
36
- // --- AUTO FOCUS LOGIC ---
37
- useEffect(() => {
38
- let focusTimer;
39
- // Only attempt focus when we are on the OTP step AND the loading state is completely finished
40
- if (step === 'otp' && !isSimulating) {
41
- focusTimer = setTimeout(() => {
42
- inputRef.current?.focus();
43
- }, 100);
44
- }
45
- return () => {
46
- if (focusTimer)
47
- clearTimeout(focusTimer);
48
- };
49
- }, [step, isSimulating]);
50
34
  const handleSendCode = async () => {
51
35
  const trimmed = email.trim();
52
36
  if (!trimmed || !isValidEmail(trimmed)) {
@@ -58,7 +42,8 @@ export const EmailVerificationTemplate = ({ component, value, onValueChange, err
58
42
  try {
59
43
  await kycService.sendEmailVerificationCode(trimmed, auth);
60
44
  setStep('otp');
61
- // Note: Removed the buggy setTimeout from here. The useEffect handles it now!
45
+ // Auto-focus the OTP input shortly after switching steps
46
+ setTimeout(() => inputRef.current?.focus(), 100);
62
47
  }
63
48
  catch (err) {
64
49
  const msg = errorMessage(err) ?? err?.message ?? (t('errors.sendCodeFailed') || 'Failed to send verification code');
@@ -84,8 +69,8 @@ export const EmailVerificationTemplate = ({ component, value, onValueChange, err
84
69
  catch (err) {
85
70
  const msg = errorMessage(err) ?? err?.message ?? (t('errors.wrongCode') || 'Invalid verification code');
86
71
  setLocalError(typeof msg === 'string' ? msg : JSON.stringify(msg));
87
- setOtp('');
88
- inputRef.current?.focus(); // Refocus on error
72
+ setOtp(''); // Clear the boxes on error so they can type again
73
+ inputRef.current?.focus();
89
74
  }
90
75
  finally {
91
76
  setIsSimulating(false);
@@ -113,14 +98,12 @@ export const EmailVerificationTemplate = ({ component, value, onValueChange, err
113
98
  return (<Pressable style={styles.otpBoxesContainer} onPress={() => inputRef.current?.focus()}>
114
99
  {boxes.map((_, index) => {
115
100
  const digit = otp[index] || '';
101
+ const isCurrent = index === otp.length;
116
102
  const isFilled = index < otp.length;
117
- // 🚨 NEW: Only highlight if the input is ACTUALLY focused.
118
- const isActiveIndex = index === otp.length || (index === CODE_LENGTH - 1 && otp.length === CODE_LENGTH);
119
- const isCurrent = isInputFocused && isActiveIndex;
120
103
  return (<View key={index} style={[
121
104
  styles.otpBox,
122
- isFilled && styles.otpBoxFilled,
123
- isCurrent && styles.otpBoxActive // Active overrides filled
105
+ isCurrent && styles.otpBoxActive,
106
+ isFilled && styles.otpBoxFilled
124
107
  ]}>
125
108
  <Text style={styles.otpBoxText}>{digit}</Text>
126
109
  </View>);
@@ -142,10 +125,8 @@ export const EmailVerificationTemplate = ({ component, value, onValueChange, err
142
125
 
143
126
  <View style={styles.otpWrapper}>
144
127
  {renderOtpBoxes()}
145
-
146
- <TextInput ref={inputRef} style={styles.hiddenInput} value={otp} onChangeText={onChangeOtp} keyboardType="number-pad" maxLength={CODE_LENGTH} editable={!isSimulating} textContentType="oneTimeCode" caretHidden={true}
147
- // 🚨 NEW: Track focus state
148
- onFocus={() => setIsInputFocused(true)} onBlur={() => setIsInputFocused(false)}/>
128
+ {/* Hidden TextInput overlaid to handle native keyboard & pasting seamlessly */}
129
+ <TextInput ref={inputRef} style={styles.hiddenInput} value={otp} onChangeText={onChangeOtp} keyboardType="number-pad" maxLength={CODE_LENGTH} editable={!isSimulating} textContentType="oneTimeCode" caretHidden={true}/>
149
130
  </View>
150
131
 
151
132
  <TouchableOpacity onPress={handleBackToEmail} style={styles.changeEmailLink} disabled={isSimulating}>
@@ -166,8 +147,6 @@ export const EmailVerificationTemplate = ({ component, value, onValueChange, err
166
147
  try {
167
148
  await kycService.sendEmailVerificationCode(email.trim(), auth);
168
149
  Alert.alert(t('common.codeResent') || 'Code Resent', t('common.codeResentMessage', { email }) || 'Code resent to ' + email);
169
- // Refocus after resending
170
- inputRef.current?.focus();
171
150
  }
172
151
  catch (err) {
173
152
  const msg = errorMessage(err) ?? err?.message ?? (t('errors.sendCodeFailed') || 'Failed to send code');
@@ -243,7 +222,7 @@ const styles = StyleSheet.create({
243
222
  },
244
223
  otpBox: {
245
224
  width: '14%',
246
- aspectRatio: 1, // keeps it perfectly square
225
+ aspectRatio: 1,
247
226
  borderWidth: 1,
248
227
  borderColor: '#e0e0e0',
249
228
  borderRadius: 12,
@@ -271,7 +250,7 @@ const styles = StyleSheet.create({
271
250
  left: 0,
272
251
  width: '100%',
273
252
  height: '100%',
274
- opacity: 0, // completely invisible but handles native keyboard interactions perfectly
253
+ opacity: 0,
275
254
  },
276
255
  errorText: {
277
256
  color: '#dc2626',