@zengenti/contensis-react-base 3.0.2-beta.2 → 3.0.2-beta.21

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (110) hide show
  1. package/cjs/{App-ee485b92.js → App-21a7d836.js} +120 -432
  2. package/cjs/App-21a7d836.js.map +1 -0
  3. package/cjs/ContensisDeliveryApi-c079b03a.js +231 -0
  4. package/cjs/ContensisDeliveryApi-c079b03a.js.map +1 -0
  5. package/cjs/{RouteLoader-3aa6456e.js → RouteLoader-7f0d107a.js} +23 -37
  6. package/{esm/RouteLoader-5171c63f.js.map → cjs/RouteLoader-7f0d107a.js.map} +1 -1
  7. package/cjs/{ToJs-a9a8522b.js → ToJs-6e9cfa69.js} +3 -4
  8. package/cjs/{ToJs-a9a8522b.js.map → ToJs-6e9cfa69.js.map} +1 -1
  9. package/cjs/client.js +20 -27
  10. package/cjs/client.js.map +1 -1
  11. package/cjs/contensis-react-base.js +124 -188
  12. package/cjs/contensis-react-base.js.map +1 -1
  13. package/cjs/forms.js +1488 -272
  14. package/cjs/forms.js.map +1 -1
  15. package/cjs/{fromJSLeaveImmer-e74c673c.js → fromJSLeaveImmer-7c363211.js} +1 -4
  16. package/cjs/{fromJSLeaveImmer-e74c673c.js.map → fromJSLeaveImmer-7c363211.js.map} +1 -1
  17. package/cjs/{login-840860bc.js → login-2a6b5be0.js} +64 -113
  18. package/cjs/login-2a6b5be0.js.map +1 -0
  19. package/cjs/{reducers-3a4f8971.js → reducers-9afb5f89.js} +14 -31
  20. package/cjs/reducers-9afb5f89.js.map +1 -0
  21. package/cjs/redux.js +17 -17
  22. package/cjs/redux.js.map +1 -1
  23. package/cjs/routing.js +6 -7
  24. package/cjs/routing.js.map +1 -1
  25. package/cjs/{sagas-8a20e424.js → sagas-e04b94c1.js} +225 -301
  26. package/cjs/sagas-e04b94c1.js.map +1 -0
  27. package/cjs/search.js +68 -94
  28. package/cjs/search.js.map +1 -1
  29. package/cjs/{selectors-656da4b7.js → selectors-bcca60f4.js} +89 -8
  30. package/cjs/selectors-bcca60f4.js.map +1 -0
  31. package/cjs/urls-6fcaf4c6.js.map +1 -1
  32. package/cjs/user.js +4 -13
  33. package/cjs/user.js.map +1 -1
  34. package/cjs/util.js +45 -53
  35. package/cjs/util.js.map +1 -1
  36. package/cjs/{version-78dfc3bd.js → version-4077e706.js} +50 -159
  37. package/cjs/version-4077e706.js.map +1 -0
  38. package/cjs/version-fe28099e.js +98 -0
  39. package/cjs/version-fe28099e.js.map +1 -0
  40. package/esm/{App-640239d2.js → App-2af18a99.js} +102 -412
  41. package/esm/App-2af18a99.js.map +1 -0
  42. package/esm/ContensisDeliveryApi-5660ee0e.js +227 -0
  43. package/esm/ContensisDeliveryApi-5660ee0e.js.map +1 -0
  44. package/esm/{RouteLoader-5171c63f.js → RouteLoader-6eac364e.js} +22 -36
  45. package/{cjs/RouteLoader-3aa6456e.js.map → esm/RouteLoader-6eac364e.js.map} +1 -1
  46. package/esm/{ToJs-4e02a04d.js → ToJs-9b30636a.js} +3 -4
  47. package/esm/{ToJs-4e02a04d.js.map → ToJs-9b30636a.js.map} +1 -1
  48. package/esm/client.js +15 -22
  49. package/esm/client.js.map +1 -1
  50. package/esm/contensis-react-base.js +119 -183
  51. package/esm/contensis-react-base.js.map +1 -1
  52. package/esm/forms.js +1490 -274
  53. package/esm/forms.js.map +1 -1
  54. package/esm/{fromJSLeaveImmer-0114ffcf.js → fromJSLeaveImmer-e2dacd63.js} +1 -4
  55. package/esm/{fromJSLeaveImmer-0114ffcf.js.map → fromJSLeaveImmer-e2dacd63.js.map} +1 -1
  56. package/esm/{login-57395c9c.js → login-71ff3fcb.js} +63 -112
  57. package/esm/login-71ff3fcb.js.map +1 -0
  58. package/esm/{reducers-8e5d6232.js → reducers-3d5c37d1.js} +14 -31
  59. package/esm/reducers-3d5c37d1.js.map +1 -0
  60. package/esm/redux.js +9 -8
  61. package/esm/redux.js.map +1 -1
  62. package/esm/routing.js +3 -4
  63. package/esm/routing.js.map +1 -1
  64. package/esm/{sagas-e576b6f6.js → sagas-933a8fc8.js} +177 -254
  65. package/esm/sagas-933a8fc8.js.map +1 -0
  66. package/esm/search.js +69 -95
  67. package/esm/search.js.map +1 -1
  68. package/esm/{selectors-a5e5835b.js → selectors-74de49a3.js} +75 -8
  69. package/esm/selectors-74de49a3.js.map +1 -0
  70. package/esm/urls-eac9a747.js.map +1 -1
  71. package/esm/user.js +6 -15
  72. package/esm/user.js.map +1 -1
  73. package/esm/util.js +42 -53
  74. package/esm/util.js.map +1 -1
  75. package/esm/version-b15807c5.js +87 -0
  76. package/esm/version-b15807c5.js.map +1 -0
  77. package/esm/{version-e3a5ec66.js → version-ef107106.js} +37 -142
  78. package/esm/version-ef107106.js.map +1 -0
  79. package/models/redux/appstate.d.ts +1 -0
  80. package/models/routing/redux/selectors.d.ts +2 -1
  81. package/models/search/models/Queries.d.ts +2 -1
  82. package/models/search/models/Search.d.ts +2 -0
  83. package/models/search/models/SearchActions.d.ts +3 -3
  84. package/models/search/redux/actions.d.ts +6 -6
  85. package/models/search/redux/util.d.ts +1 -1
  86. package/models/search/search/expressions.d.ts +1 -1
  87. package/models/server/features/linkdepth-api/search.d.ts +1 -1
  88. package/models/util/ContensisDeliveryApi.d.ts +6 -0
  89. package/models/util/index.d.ts +1 -0
  90. package/package.json +1 -1
  91. package/cjs/App-ee485b92.js.map +0 -1
  92. package/cjs/actions-8dc9e8de.js +0 -87
  93. package/cjs/actions-8dc9e8de.js.map +0 -1
  94. package/cjs/login-840860bc.js.map +0 -1
  95. package/cjs/reducers-3a4f8971.js.map +0 -1
  96. package/cjs/sagas-8a20e424.js.map +0 -1
  97. package/cjs/selectors-656da4b7.js.map +0 -1
  98. package/cjs/version-78dfc3bd.js.map +0 -1
  99. package/cjs/version-eba6d09b.js +0 -20
  100. package/cjs/version-eba6d09b.js.map +0 -1
  101. package/esm/App-640239d2.js.map +0 -1
  102. package/esm/actions-180948dd.js +0 -72
  103. package/esm/actions-180948dd.js.map +0 -1
  104. package/esm/login-57395c9c.js.map +0 -1
  105. package/esm/reducers-8e5d6232.js.map +0 -1
  106. package/esm/sagas-e576b6f6.js.map +0 -1
  107. package/esm/selectors-a5e5835b.js.map +0 -1
  108. package/esm/version-2485e2fb.js +0 -15
  109. package/esm/version-2485e2fb.js.map +0 -1
  110. package/esm/version-e3a5ec66.js.map +0 -1
package/cjs/forms.js CHANGED
@@ -36,7 +36,8 @@ const SET_FIELD_ERROR = `${ACTION_PREFIX}SET_FIELD_ERROR`;
36
36
  const SET_DATE_RANGE_VALUES = `${ACTION_PREFIX}SET_DATE_RANGE_VALUES`;
37
37
  const SET_FORM_ENTRIES = `${ACTION_PREFIX}SET_FORM_ENTRIES`;
38
38
  const SET_SUCCESS_MESSAGE = `${ACTION_PREFIX}SET_SUCCESS_MESSAGE`;
39
- const SET_CHECKBOX_VALUE = `${ACTION_PREFIX}SET_CHECKBOX_VALUE`;
39
+ const SET_MULTIPLE_CHECKBOX_VALUE = `${ACTION_PREFIX}SET_MULTIPLE_CHECKBOX_VALUE`;
40
+ const SET_SINGLE_CHECKBOX_VALUE = `${ACTION_PREFIX}SET_SINGLE_CHECKBOX_VALUE`;
40
41
 
41
42
  const initialSettings = {
42
43
  recaptcha: {
@@ -85,7 +86,6 @@ var reducer = immer.produce((state, action) => {
85
86
  state[formId] = initialFormData;
86
87
  return;
87
88
  }
88
-
89
89
  case SET_FORM_DATA:
90
90
  {
91
91
  const {
@@ -106,7 +106,6 @@ var reducer = immer.produce((state, action) => {
106
106
  state[formId].settings = settings;
107
107
  return;
108
108
  }
109
-
110
109
  case SET_CURRENT_PAGE:
111
110
  {
112
111
  const {
@@ -120,7 +119,6 @@ var reducer = immer.produce((state, action) => {
120
119
  state[formId].pagingInfo.pageCount = pageCount;
121
120
  return;
122
121
  }
123
-
124
122
  case SET_FIELD_VALUE:
125
123
  {
126
124
  const {
@@ -131,32 +129,40 @@ var reducer = immer.produce((state, action) => {
131
129
  state[formId].data[id] = value;
132
130
  return;
133
131
  }
134
-
135
132
  case SET_DEFAULT_FIELD_VALUE:
136
133
  {
137
134
  const {
138
135
  formId,
139
136
  value
140
137
  } = action || {};
141
- state[formId].data = value;
138
+ state[formId].data = {
139
+ ...state[formId].data,
140
+ ...value
141
+ };
142
142
  return;
143
143
  }
144
-
145
- case SET_CHECKBOX_VALUE:
144
+ case SET_SINGLE_CHECKBOX_VALUE:
146
145
  {
147
146
  const {
148
147
  formId,
149
148
  id,
150
- value,
151
- isChecked
149
+ value
152
150
  } = action || {};
153
- let values = state[formId].data[id] || [];
154
- if (isChecked) state[formId].data[id] = { ...values,
151
+ state[formId].data[id] = value;
152
+ return;
153
+ }
154
+ case SET_MULTIPLE_CHECKBOX_VALUE:
155
+ {
156
+ const {
157
+ formId,
158
+ id,
159
+ label,
155
160
  value
156
- };else state[formId].data[id] = values.filter(v => v !== value);
161
+ } = action || {};
162
+ const checked = state[formId].data[id] || [];
163
+ if (value) state[formId].data[id] = [...checked, label];else state[formId].data[id] = checked.filter(v => v !== label);
157
164
  return;
158
165
  }
159
-
160
166
  case SET_DATE_RANGE_VALUES:
161
167
  {
162
168
  const {
@@ -168,7 +174,6 @@ var reducer = immer.produce((state, action) => {
168
174
  state[formId].data[id][dateType] = value;
169
175
  return;
170
176
  }
171
-
172
177
  case SET_FIELD_ERROR:
173
178
  {
174
179
  const {
@@ -178,7 +183,6 @@ var reducer = immer.produce((state, action) => {
178
183
  state[formId].fieldErrors = value;
179
184
  return;
180
185
  }
181
-
182
186
  case SET_SUBMITTING_FORM:
183
187
  {
184
188
  const {
@@ -188,7 +192,6 @@ var reducer = immer.produce((state, action) => {
188
192
  state[formId].status.isSubmitting = isSubmitting;
189
193
  return;
190
194
  }
191
-
192
195
  case SUBMIT_FORM_SUCCESS:
193
196
  {
194
197
  const {
@@ -200,7 +203,6 @@ var reducer = immer.produce((state, action) => {
200
203
  state[formId].status.validation.sent = false;
201
204
  return;
202
205
  }
203
-
204
206
  case SUBMIT_FORM_FOR_VALIDATION:
205
207
  {
206
208
  const {
@@ -212,17 +214,15 @@ var reducer = immer.produce((state, action) => {
212
214
  state[formId].status.hasError = false;
213
215
  return;
214
216
  }
215
-
216
217
  case SET_SUCCESS_MESSAGE:
217
218
  {
218
219
  const {
219
220
  formId,
220
221
  message
221
222
  } = action || {};
222
- state[formId].status.message.success = message;
223
+ state[formId].status.messages.success = message;
223
224
  return;
224
225
  }
225
-
226
226
  case SUBMIT_FORM_ERROR:
227
227
  {
228
228
  const {
@@ -233,7 +233,6 @@ var reducer = immer.produce((state, action) => {
233
233
  state[formId].status.validation.sent = false;
234
234
  return;
235
235
  }
236
-
237
236
  case SET_FORM_ENTRIES:
238
237
  {
239
238
  const {
@@ -249,7 +248,6 @@ var reducer = immer.produce((state, action) => {
249
248
  state[formId].entries = entryObject;
250
249
  return;
251
250
  }
252
-
253
251
  case SET_ERROR:
254
252
  {
255
253
  const {
@@ -259,7 +257,6 @@ var reducer = immer.produce((state, action) => {
259
257
  state[formId].status.isSubmitting = false;
260
258
  return;
261
259
  }
262
-
263
260
  default:
264
261
  return state;
265
262
  }
@@ -269,7 +266,6 @@ const selectForms = state => state.forms;
269
266
  const makeSelectPagedFields = formId => reselect.createSelector(selectForms, forms => {
270
267
  if (forms !== null && forms !== void 0 && forms[formId]) {
271
268
  var _forms$formId, _forms$formId2;
272
-
273
269
  const pagingInfo = forms === null || forms === void 0 ? void 0 : (_forms$formId = forms[formId]) === null || _forms$formId === void 0 ? void 0 : _forms$formId.pagingInfo;
274
270
  const fields = forms === null || forms === void 0 ? void 0 : (_forms$formId2 = forms[formId]) === null || _forms$formId2 === void 0 ? void 0 : _forms$formId2.fields;
275
271
  if ((fields === null || fields === void 0 ? void 0 : fields.length) > 0 && pagingInfo.pageCount > 1) return fields.filter(f => f.groupId == pagingInfo.currentPageId);else return fields;
@@ -277,77 +273,62 @@ const makeSelectPagedFields = formId => reselect.createSelector(selectForms, for
277
273
  });
278
274
  const makeSelectFormStatus = formId => reselect.createSelector(selectForms, forms => {
279
275
  var _forms$formId3;
280
-
281
276
  return forms === null || forms === void 0 ? void 0 : (_forms$formId3 = forms[formId]) === null || _forms$formId3 === void 0 ? void 0 : _forms$formId3.status;
282
277
  });
283
278
  const makeSelectPagingInfo = formId => reselect.createSelector(selectForms, forms => {
284
279
  var _forms$formId4;
285
-
286
280
  return forms === null || forms === void 0 ? void 0 : (_forms$formId4 = forms[formId]) === null || _forms$formId4 === void 0 ? void 0 : _forms$formId4.pagingInfo;
287
281
  });
288
282
  const makeSelectFormSettings = formId => reselect.createSelector(selectForms, forms => {
289
283
  var _forms$formId5;
290
-
291
284
  return forms === null || forms === void 0 ? void 0 : (_forms$formId5 = forms[formId]) === null || _forms$formId5 === void 0 ? void 0 : _forms$formId5.settings;
292
285
  });
293
286
  const makeSelectFormFieldErrors = formId => reselect.createSelector(selectForms, forms => {
294
287
  var _forms$formId6;
295
-
296
288
  return forms === null || forms === void 0 ? void 0 : (_forms$formId6 = forms[formId]) === null || _forms$formId6 === void 0 ? void 0 : _forms$formId6.fieldErrors;
297
289
  });
298
290
  const makeSelectFormEntries = formId => reselect.createSelector(selectForms, forms => {
299
291
  var _forms$formId7;
300
-
301
292
  return forms === null || forms === void 0 ? void 0 : (_forms$formId7 = forms[formId]) === null || _forms$formId7 === void 0 ? void 0 : _forms$formId7.entries;
302
293
  });
303
294
  const makeSelectFormPostData = formId => reselect.createSelector(selectForms, forms => {
304
295
  var _forms$formId8;
305
-
306
296
  return forms === null || forms === void 0 ? void 0 : (_forms$formId8 = forms[formId]) === null || _forms$formId8 === void 0 ? void 0 : _forms$formId8.data;
307
297
  });
308
298
  const makeSelectIsLoading = formId => reselect.createSelector(selectForms, forms => {
309
299
  var _forms$formId9;
310
-
311
300
  return forms === null || forms === void 0 ? void 0 : (_forms$formId9 = forms[formId]) === null || _forms$formId9 === void 0 ? void 0 : _forms$formId9.status.isLoading;
312
301
  });
313
302
  const makeSelectIsSubmitting = formId => reselect.createSelector(selectForms, forms => {
314
303
  var _forms$formId10;
315
-
316
304
  return forms === null || forms === void 0 ? void 0 : (_forms$formId10 = forms[formId]) === null || _forms$formId10 === void 0 ? void 0 : _forms$formId10.status.isSubmitting;
317
305
  });
318
306
  const makeSelectHasSuccess = formId => reselect.createSelector(selectForms, forms => {
319
307
  var _forms$formId11;
320
-
321
308
  return forms === null || forms === void 0 ? void 0 : (_forms$formId11 = forms[formId]) === null || _forms$formId11 === void 0 ? void 0 : _forms$formId11.status.hasSuccess;
322
309
  });
323
310
  const makeSelectHasError = formId => reselect.createSelector(selectForms, forms => {
324
311
  var _forms$formId12;
325
-
326
312
  return forms === null || forms === void 0 ? void 0 : (_forms$formId12 = forms[formId]) === null || _forms$formId12 === void 0 ? void 0 : _forms$formId12.status.hasError;
327
313
  });
328
314
  const makeSelectFormFields = formId => reselect.createSelector(selectForms, forms => {
329
315
  var _forms$formId13;
330
-
331
316
  return forms === null || forms === void 0 ? void 0 : (_forms$formId13 = forms[formId]) === null || _forms$formId13 === void 0 ? void 0 : _forms$formId13.fields;
332
317
  });
333
318
  const makeSelectDefaultLang = formId => reselect.createSelector(selectForms, forms => {
334
319
  var _forms$formId14;
335
-
336
320
  return forms === null || forms === void 0 ? void 0 : (_forms$formId14 = forms[formId]) === null || _forms$formId14 === void 0 ? void 0 : _forms$formId14.defaultLanguage;
337
321
  });
338
322
  const makeSelectFormSuccessMessage = formId => reselect.createSelector(selectForms, forms => {
339
323
  var _forms$formId15;
340
-
341
324
  return forms === null || forms === void 0 ? void 0 : (_forms$formId15 = forms[formId]) === null || _forms$formId15 === void 0 ? void 0 : _forms$formId15.status.messages.success;
342
325
  });
343
326
  const makeSelectFormValidationSent = formId => reselect.createSelector(selectForms, forms => {
344
327
  var _forms$formId16;
345
-
346
328
  return forms === null || forms === void 0 ? void 0 : (_forms$formId16 = forms[formId]) === null || _forms$formId16 === void 0 ? void 0 : _forms$formId16.status.validation.sent;
347
329
  });
348
- const makeSelectFormGroup$1 = formId => reselect.createSelector(selectForms, forms => {
330
+ const makeSelectFormGroup = formId => reselect.createSelector(selectForms, forms => {
349
331
  var _forms$formId17;
350
-
351
332
  return forms === null || forms === void 0 ? void 0 : (_forms$formId17 = forms[formId]) === null || _forms$formId17 === void 0 ? void 0 : _forms$formId17.groups;
352
333
  });
353
334
  const selectors = {
@@ -366,7 +347,7 @@ const selectors = {
366
347
  makeSelectDefaultLang,
367
348
  makeSelectFormSuccessMessage,
368
349
  makeSelectFormValidationSent,
369
- makeSelectFormGroup: makeSelectFormGroup$1,
350
+ makeSelectFormGroup,
370
351
  makeSelectHasError
371
352
  };
372
353
 
@@ -410,11 +391,11 @@ const postForm = async formObj => {
410
391
  const submitted = await request(URI, options);
411
392
  return submitted;
412
393
  };
413
-
414
394
  const request = async (url, options) => {
415
395
  return fetch(url, options).then(response => response.json()).then(result => {
416
396
  return result;
417
- }) // eslint-disable-next-line no-console
397
+ })
398
+ // eslint-disable-next-line no-console
418
399
  .catch(error => console.log('error', error));
419
400
  };
420
401
 
@@ -422,14 +403,12 @@ const domains = ['1033edge.com', '11mail.com', '123.com', '123box.net', '123indi
422
403
 
423
404
  const doA11yValidation = (v, field, formValidationSent) => {
424
405
  const error = doValidateField(field, v);
425
-
426
406
  if (JSON.stringify(field.validations) !== '{}') {
427
407
  if (((v === null || v === void 0 ? void 0 : v.length) >= 1 || formValidationSent) && (error === null || error === void 0 ? void 0 : error.fieldId) === field.id) return 'true';else if ((v === null || v === void 0 ? void 0 : v.length) >= 1) return 'false';else return '';
428
408
  }
429
409
  };
430
410
  const doValidateField = (field, value) => {
431
411
  var _field$validations, _field$validations$re;
432
-
433
412
  const isRequired = field.validations && field.validations.required;
434
413
  const minLength = field.validations && field.validations.minLength;
435
414
  const maxLength = field.validations && field.validations.maxLength;
@@ -437,10 +416,8 @@ const doValidateField = (field, value) => {
437
416
  const integer = field.dataType === 'integer';
438
417
  const decimal = field.dataType === 'decimal';
439
418
  const isBusinessEmail = field.id === 'businessEmail';
440
-
441
419
  if (isRequired && (value === null || value === void 0 ? void 0 : value.length) <= 0) {
442
420
  var _isRequired$message, _field$name;
443
-
444
421
  const errorMessage = (isRequired === null || isRequired === void 0 ? void 0 : (_isRequired$message = isRequired.message) === null || _isRequired$message === void 0 ? void 0 : _isRequired$message['en-GB']) || `${(_field$name = field.name) === null || _field$name === void 0 ? void 0 : _field$name['en-GB']} is required`;
445
422
  return {
446
423
  fieldId: field.id,
@@ -448,7 +425,6 @@ const doValidateField = (field, value) => {
448
425
  message: errorMessage
449
426
  };
450
427
  }
451
-
452
428
  if (minLength && minLength.value > value.length) {
453
429
  const errorMessage = minLength.message ? minLength.message['en-GB'] : `Minimum characters ${minLength.value}`;
454
430
  return {
@@ -457,7 +433,6 @@ const doValidateField = (field, value) => {
457
433
  message: errorMessage
458
434
  };
459
435
  }
460
-
461
436
  if (maxLength && maxLength.value < value.length) {
462
437
  const errorMessage = maxLength.message && maxLength.message['en-GB'] ? maxLength.message['en-GB'] : `Maximum characters ${maxLength.value}`;
463
438
  return {
@@ -467,14 +442,10 @@ const doValidateField = (field, value) => {
467
442
  };
468
443
  }
469
444
  /** Check Regex and Business Emails */
470
-
471
-
472
445
  if (hasRegex && value.length >= 1) {
473
446
  var _r$message;
474
-
475
447
  const r = field.validations.regex;
476
448
  const msg = (r === null || r === void 0 ? void 0 : (_r$message = r.message) === null || _r$message === void 0 ? void 0 : _r$message['en-GB']) || `${field.name['en-GB']} is invalid`;
477
-
478
449
  if (isValidRegex(field, value) && isBusinessEmail) {
479
450
  if (!isBusinessEmailValid(field, value)) {
480
451
  return {
@@ -491,10 +462,8 @@ const doValidateField = (field, value) => {
491
462
  };
492
463
  }
493
464
  }
494
-
495
465
  if (integer) {
496
466
  const isInteger = value % 1 === 0;
497
-
498
467
  if (!isInteger) {
499
468
  const errorMessage = `${value} is not an ${field.dataType}`;
500
469
  return {
@@ -504,10 +473,8 @@ const doValidateField = (field, value) => {
504
473
  };
505
474
  }
506
475
  }
507
-
508
476
  if (decimal) {
509
477
  const isDecimal = value % 1 !== 0;
510
-
511
478
  if (!isDecimal) {
512
479
  const errorMessage = `${value} is not an ${field.dataType}`;
513
480
  return {
@@ -518,13 +485,11 @@ const doValidateField = (field, value) => {
518
485
  }
519
486
  }
520
487
  };
521
-
522
488
  const isValidRegex = (field, value) => {
523
489
  const regex = field.validations.regex.pattern;
524
490
  const regexPattern = RegExp(regex);
525
491
  if (!regexPattern.test(value)) return false;else return true;
526
492
  };
527
-
528
493
  const isBusinessEmailValid = (field, value) => {
529
494
  const domain = value.split('@').pop();
530
495
  if (!domains.includes(domain)) return true;else return false;
@@ -532,7 +497,6 @@ const isBusinessEmailValid = (field, value) => {
532
497
 
533
498
  const doCreateMessage = (type, minLength, maxLength, currentLength, defaultLanguage) => {
534
499
  if (!type) return null;
535
-
536
500
  switch (type) {
537
501
  case 'min':
538
502
  {
@@ -540,28 +504,24 @@ const doCreateMessage = (type, minLength, maxLength, currentLength, defaultLangu
540
504
  const minLengthVal = minLength && minLength.value;
541
505
  const errorMessage = minLength && minLength.message && minLength.message[defaultLanguage];
542
506
  const minText = `Minimum of ${minLengthVal.toString()} characters`;
543
-
544
507
  if (errorMessage) {
545
508
  return errorMessage;
546
509
  } else {
547
510
  return minText;
548
511
  }
549
512
  }
550
-
551
513
  case 'max':
552
514
  {
553
515
  if (!maxLength) return;
554
516
  const maxLengthVal = maxLength && maxLength.value;
555
517
  const errorMessage = maxLength && maxLength.message && maxLength.message[defaultLanguage];
556
518
  const maxText = `Maximum of ${maxLengthVal.toString()} characters`;
557
-
558
519
  if (errorMessage) {
559
520
  return errorMessage;
560
521
  } else {
561
522
  return maxText;
562
523
  }
563
524
  }
564
-
565
525
  case 'between':
566
526
  {
567
527
  if (!maxLength || !minLength) return;
@@ -569,7 +529,6 @@ const doCreateMessage = (type, minLength, maxLength, currentLength, defaultLangu
569
529
  const maxLengthVal = maxLength && maxLength.value;
570
530
  const errorMessage = minLength && minLength.message && minLength.message[defaultLanguage];
571
531
  const rangeText = `Between ${minLengthVal.toString()}-${maxLengthVal.toString()} characters)`;
572
-
573
532
  if (errorMessage) {
574
533
  return errorMessage;
575
534
  } else if (currentLength < minLengthVal) {
@@ -582,16 +541,16 @@ const doCreateMessage = (type, minLength, maxLength, currentLength, defaultLangu
582
541
  return rangeText;
583
542
  }
584
543
  }
585
-
586
544
  default:
587
545
  return null;
588
546
  }
589
547
  };
590
548
  const getFieldType = field => {
591
549
  var _field$editor, _field$editor$propert;
592
-
593
550
  if (!field) return null;
594
-
551
+ if (field.id === 'country' && field.dataType === 'string') {
552
+ return 'country';
553
+ }
595
554
  if (field.dataType === 'string' && field.editor && field.editor.id === 'multiline') {
596
555
  return 'textarea';
597
556
  } else if (field.dataType === 'string' && field.editor && field.editor.id === 'list-dropdown') {
@@ -615,8 +574,9 @@ const getFieldType = field => {
615
574
  }
616
575
  };
617
576
 
618
- const sagas = [effects.takeEvery(SUBMIT_FORM_SUCCESS, onFormSuccess), effects.takeEvery(SUBMIT_FORM_FOR_VALIDATION, doValidateForm), effects.takeEvery(SUBMIT_FORM, onSubmitForm), effects.takeEvery(SET_FORM_ID, doFetchForm), effects.takeLatest(VALIDATE_FIELD, onValidateField$1), effects.takeEvery(PAGE_FORWARD, doTogglePage), effects.takeEvery(PAGE_BACK, doTogglePage), effects.takeEvery(SET_FORM_DATA, getEntryPickerData), effects.takeLatest(SET_FORM_DATA, setDefaultValueFields)];
619
-
577
+ const sagas = [effects.takeEvery(SUBMIT_FORM_SUCCESS, onFormSuccess), effects.takeEvery(SUBMIT_FORM_FOR_VALIDATION, doValidateForm), effects.takeEvery(SUBMIT_FORM, onSubmitForm), effects.takeEvery(SET_FORM_ID, doFetchForm),
578
+ // takeLatest(VALIDATE_FIELD, onValidateField),
579
+ effects.takeEvery(PAGE_FORWARD, doTogglePage), effects.takeEvery(PAGE_BACK, doTogglePage), effects.takeEvery(SET_FORM_DATA, getEntryPickerData), effects.takeLatest(SET_FORM_DATA, setDefaultValueFields)];
620
580
  function* doValidateForm(action) {
621
581
  const {
622
582
  formId
@@ -627,89 +587,51 @@ function* doValidateForm(action) {
627
587
  formId
628
588
  });
629
589
  }
590
+ // function* onValidateField(action) {
591
+ // const { formId, id, value } = action;
592
+ // if (value?.length >= 1) yield call(onValidateSingleField, formId, id, value);
593
+ // }
630
594
 
631
- function* onValidateField$1(action) {
632
- const {
633
- formId,
634
- id,
635
- value
636
- } = action;
637
- if ((value === null || value === void 0 ? void 0 : value.length) >= 1) yield effects.call(onValidateSingleField, formId, id, value);
638
- }
639
-
640
- function* validateGroupfields(formId, groupId) {
595
+ function* onValidateGroupFields(formId, groupId) {
641
596
  const state = yield effects.select();
642
597
  const selectPostData = makeSelectFormPostData(formId);
643
598
  const postData = selectPostData(state);
644
599
  const selectFormFields = makeSelectFormFields(formId);
645
600
  const fields = selectFormFields(state);
646
- const groupFields = fields.filter(f => f.groupid == groupId);
647
- let newErrors = [];
601
+ const groupFields = fields.filter(f => f.groupId == groupId);
602
+ let errors = [];
648
603
  groupFields.forEach(field => {
649
- let val = '';
650
-
651
- if (postData[field.id]) {
652
- val = postData[field.id];
653
- }
654
-
655
- const err = doValidateField(field, val);
656
- if (err) newErrors.push(err);
604
+ let value = '';
605
+ if (postData[field.id]) value = postData[field.id];
606
+ const error = doValidateField(field, value);
607
+ if (error) errors.push(error);
657
608
  });
658
609
  yield effects.put({
659
610
  type: SET_FIELD_ERROR,
660
611
  formId: formId,
661
- value: newErrors
612
+ value: errors
662
613
  });
614
+ return errors;
663
615
  }
664
-
665
616
  function* onValidateAllFields(formId) {
666
617
  const state = yield effects.select();
667
618
  const selectPostData = makeSelectFormPostData(formId);
668
619
  const postData = selectPostData(state);
669
620
  const selectFormFields = makeSelectFormFields(formId);
670
621
  const fields = selectFormFields(state);
671
- let newErrors = [];
622
+ const errors = [];
672
623
  fields.forEach(field => {
673
- let val = '';
674
-
675
- if (postData[field.id]) {
676
- val = postData[field.id];
677
- }
678
-
679
- const err = doValidateField(field, val);
680
- if (err) newErrors.push(err);
624
+ let value = '';
625
+ if (postData[field.id]) value = postData[field.id];
626
+ const error = doValidateField(field, value);
627
+ if (error) errors.push(error);
681
628
  });
682
629
  yield effects.put({
683
630
  type: SET_FIELD_ERROR,
684
631
  formId: formId,
685
- value: newErrors
632
+ value: errors
686
633
  });
687
634
  }
688
-
689
- function* onValidateSingleField(formId, fieldId, value) {
690
- const state = yield effects.select();
691
- const selectFormFields = makeSelectFormFields(formId);
692
- const fields = selectFormFields(state);
693
- const selectFormFieldErrors = makeSelectFormFieldErrors(formId);
694
- const errors = selectFormFieldErrors(state);
695
- const fieldData = fields.find(f => f.id == fieldId);
696
- const newErrors = []; //loop through current errors to remove any of the item we currently edit
697
-
698
- errors.forEach(error => {
699
- if (error.fieldId !== fieldId) {
700
- //push any existing errors to new array
701
- newErrors.push(error);
702
- }
703
- });
704
- const err = doValidateField(fieldData, value);
705
- if (err) newErrors.push(err);
706
- yield effects.put({
707
- type: SET_FIELD_ERROR,
708
- formId: formId,
709
- value: newErrors
710
- });
711
- }
712
-
713
635
  function* doTogglePage(action) {
714
636
  const {
715
637
  formId,
@@ -718,30 +640,34 @@ function* doTogglePage(action) {
718
640
  const state = yield effects.select();
719
641
  const selectFormGroups = makeSelectFormGroup(formId);
720
642
  const formGroups = selectFormGroups(state);
721
-
722
643
  if (action.type === PAGE_FORWARD) {
723
- yield validateGroupfields(formId, formGroups[pageIndex].id);
644
+ const errors = yield onValidateGroupFields(formId, formGroups[pageIndex - 1].id);
645
+ if (errors && errors.length <= 0) {
646
+ yield effects.put({
647
+ type: SET_CURRENT_PAGE,
648
+ formId: formId,
649
+ pageId: formGroups[pageIndex].id,
650
+ pageCount: formGroups.length,
651
+ pageIndex: pageIndex
652
+ });
653
+ }
654
+ } else if (action.type === PAGE_BACK) {
655
+ yield effects.put({
656
+ type: SET_CURRENT_PAGE,
657
+ formId: formId,
658
+ pageId: formGroups[pageIndex].id,
659
+ pageCount: formGroups.length,
660
+ pageIndex: pageIndex
661
+ });
724
662
  }
725
-
726
- yield effects.put({
727
- type: SET_CURRENT_PAGE,
728
- formId: formId,
729
- pageId: formGroups[pageIndex].id,
730
- pageCount: formGroups.length,
731
- pageIndex: pageIndex
732
- });
733
663
  }
734
-
735
664
  function* doFetchForm(action) {
736
665
  var _schema$groups;
737
-
738
666
  const formId = action.formId;
739
667
  const schema = yield getFormSchema(formId);
740
668
  const groups = schema === null || schema === void 0 ? void 0 : (_schema$groups = schema.groups) === null || _schema$groups === void 0 ? void 0 : _schema$groups.filter(group => group.id !== 'private' && group.id !== 'settings');
741
-
742
669
  if (formId && schema) {
743
670
  var _schema$groups2, _submitButtonText$def;
744
-
745
671
  if ((schema === null || schema === void 0 ? void 0 : (_schema$groups2 = schema.groups) === null || _schema$groups2 === void 0 ? void 0 : _schema$groups2.length) > 0) {
746
672
  yield effects.put({
747
673
  type: SET_CURRENT_PAGE,
@@ -751,10 +677,10 @@ function* doFetchForm(action) {
751
677
  pageCount: groups.length
752
678
  });
753
679
  }
754
-
755
680
  const submitButtonText = schema.fields.find(f => f.id === 'submitButtonText');
756
681
  const fields = schema === null || schema === void 0 ? void 0 : schema.fields.map(field => {
757
- return { ...field,
682
+ return {
683
+ ...field,
758
684
  type: getFieldType(field)
759
685
  };
760
686
  });
@@ -770,27 +696,26 @@ function* doFetchForm(action) {
770
696
  });
771
697
  }
772
698
  }
773
-
774
699
  function* onFormSuccess(action) {
775
700
  const state = yield effects.select();
776
701
  const selectFormFields = makeSelectFormFields(action.formId);
777
702
  const fields = selectFormFields(state);
778
703
  const redirect = fields.find(f => f.id === 'formSettingsRedirect');
779
704
  const message = fields.find(f => f.id === 'formSettingsMessage');
780
-
781
705
  if (redirect !== null && redirect !== void 0 && redirect.default) {
782
706
  window.location.href = redirect.default['en-GB'];
783
707
  }
784
-
785
708
  if (message !== null && message !== void 0 && message.default) {
786
- yield effects.put({
787
- type: SET_SUCCESS_MESSAGE,
788
- message: message.default['en-GB'],
789
- formId: action.formId
790
- });
709
+ const m = message.default['en-GB'];
710
+ if (m) {
711
+ yield effects.put({
712
+ type: SET_SUCCESS_MESSAGE,
713
+ message: m,
714
+ formId: action.formId
715
+ });
716
+ }
791
717
  }
792
718
  }
793
-
794
719
  function* onSubmitForm(action) {
795
720
  const {
796
721
  formId
@@ -799,10 +724,8 @@ function* onSubmitForm(action) {
799
724
  const selectFormFieldErrors = makeSelectFormFieldErrors(formId);
800
725
  const errors = selectFormFieldErrors(state);
801
726
  const canSubmit = (errors === null || errors === void 0 ? void 0 : errors.length) === 0;
802
-
803
727
  if (canSubmit) {
804
728
  var _formResObj$sys;
805
-
806
729
  yield effects.put({
807
730
  type: SET_SUBMITTING_FORM,
808
731
  isSubmitting: true,
@@ -815,7 +738,6 @@ function* onSubmitForm(action) {
815
738
  formPost: rawData.data
816
739
  };
817
740
  const formResObj = yield postForm(formObj);
818
-
819
741
  if (formResObj !== null && formResObj !== void 0 && (_formResObj$sys = formResObj.sys) !== null && _formResObj$sys !== void 0 && _formResObj$sys.id) {
820
742
  yield effects.put({
821
743
  type: SUBMIT_FORM_SUCCESS,
@@ -829,7 +751,6 @@ function* onSubmitForm(action) {
829
751
  }
830
752
  }
831
753
  }
832
-
833
754
  function* setDefaultValueFields(action) {
834
755
  const {
835
756
  formId,
@@ -841,15 +762,12 @@ function* setDefaultValueFields(action) {
841
762
  fields.forEach(field => {
842
763
  if (field.dataType == 'string' && field.default) {
843
764
  const val = field.default[defaultLanguage];
844
-
845
765
  if (val) {
846
766
  fieldObj[field.id] = val;
847
767
  }
848
768
  }
849
-
850
769
  if (field.id == 'sourceEntry') {
851
770
  const val = entryId;
852
-
853
771
  if (val) {
854
772
  fieldObj[field.id] = val;
855
773
  }
@@ -861,7 +779,6 @@ function* setDefaultValueFields(action) {
861
779
  value: fieldObj
862
780
  });
863
781
  }
864
-
865
782
  function* getEntryPickerData(action) {
866
783
  const {
867
784
  formId,
@@ -869,7 +786,6 @@ function* getEntryPickerData(action) {
869
786
  } = action;
870
787
  const entriesToGet = fields.filter(f => f.dataFormat == 'entry');
871
788
  let entriesList = [];
872
-
873
789
  if (entriesToGet) {
874
790
  entriesList = yield effects.all(entriesToGet.map(entry => {
875
791
  const entriesObj = {
@@ -892,7 +808,6 @@ const action = (type, payload = {}) => ({
892
808
  type,
893
809
  ...payload
894
810
  });
895
-
896
811
  const onSubmit = formId => action(SUBMIT_FORM_FOR_VALIDATION, {
897
812
  formId
898
813
  });
@@ -904,11 +819,16 @@ const setValue = (formId, id, value) => action(SET_FIELD_VALUE, {
904
819
  id,
905
820
  value
906
821
  });
907
- const setCheckboxValue = (formId, id, value, isChecked) => action(SET_CHECKBOX_VALUE, {
822
+ const setSingleCheckboxValue = (formId, id, value) => action(SET_SINGLE_CHECKBOX_VALUE, {
908
823
  formId,
909
824
  id,
910
- value,
911
- isChecked
825
+ value
826
+ });
827
+ const setMultipleCheckboxValue = (formId, id, label, value) => action(SET_MULTIPLE_CHECKBOX_VALUE, {
828
+ formId,
829
+ id,
830
+ label,
831
+ value
912
832
  });
913
833
  const setDateRangeValues = (formId, id, dateType, value) => action(SET_DATE_RANGE_VALUES, {
914
834
  formId,
@@ -933,15 +853,14 @@ const actions = {
933
853
  onSubmit,
934
854
  setFormId,
935
855
  setValue,
936
- setCheckboxValue,
937
- setDateRangeValues,
856
+ setSingleCheckboxValue,
857
+ setMultipleCheckboxValue,
938
858
  onValidateField,
939
859
  doTogglePageForward,
940
860
  doTogglePageBack
941
861
  };
942
862
 
943
863
  const ThemeContext = /*#__PURE__*/React.createContext();
944
-
945
864
  const ThemeProvider = ({
946
865
  children,
947
866
  theme
@@ -952,7 +871,6 @@ const ThemeProvider = ({
952
871
  theme: theme
953
872
  }, children));
954
873
  };
955
-
956
874
  ThemeProvider.propTypes = {
957
875
  children: PropTypes__default["default"].oneOfType([PropTypes__default["default"].arrayOf(PropTypes__default["default"].node), PropTypes__default["default"].node]),
958
876
  theme: PropTypes__default["default"].object
@@ -998,7 +916,7 @@ const FormStyled = styled__default["default"].form.withConfig({
998
916
  theme,
999
917
  useDefaultTheme
1000
918
  }) => {
1001
- return styled.css(["", ""], useDefaultTheme && styled.css(["> div:not(:first-child){margin-top:16px;}padding:0 16px;.success-message{font-size:18px;margin:0;}.visuallyHidden{position:absolute;left:-10000px;top:auto;width:1px;height:1px;overflow:hidden;}.loading{display:block;margin:24px auto;}label{display:inline-block;.isRequired{color:", ";}}input,textarea,select{display:block;font-family:inherit;background-color:", ";border-radius:3px;border:1px solid ", ";height:40px;padding:8px;margin-top:4px;width:100%;}input:-webkit-autofill,input:-webkit-autofill:hover,input:-webkit-autofill:focus,input:-webkit-autofill:active{-webkit-box-shadow:0 0 0 30px ", " inset;}textarea{height:200px;resize:none;}[aria-invalid='false']{background:", ";border:1px solid ", ";&:-webkit-autofill,&:-webkit-autofill:hover,&:-webkit-autofill:focus,&:-webkit-autofill:active{-webkit-box-shadow:0 0 0 30px", " inset;}}[aria-invalid='true']{background:", ";border:1px solid ", ";&:-webkit-autofill,&:-webkit-autofill:hover,&:-webkit-autofill:focus,&:-webkit-autofill:active{-webkit-box-shadow:0 0 0 30px", " inset;}}input ~ .svg{position:absolute;right:8px;top:50%;transform:translateY(-50%);}textarea ~ .svg{position:absolute;right:8px;top:8px;}"], theme.colors.red_darker, theme.colors.white, theme.colors.light_grey_darkest, theme.colors.white, theme.colors.green_lightest, theme.colors.green_darker, theme.colors.green_lightest, theme.colors.red_lightest, theme.colors.red_darker, theme.colors.red_lightest));
919
+ return styled.css(["", ""], useDefaultTheme && styled.css(["> div:not(:first-child){margin-top:16px;}padding:0 16px;.success-message{font-size:18px;margin:0;}.visuallyHidden{position:absolute;left:-10000px;top:auto;width:1px;height:1px;overflow:hidden;}.loading{display:block;margin:24px auto;}label{display:inline-block;.isRequired{color:", ";}}input,textarea,select{display:block;font-family:inherit;background-color:", ";border-radius:3px;border:1px solid ", ";height:40px;padding:8px;margin-top:4px;width:100%;}input:-webkit-autofill,input:-webkit-autofill:hover,input:-webkit-autofill:focus,input:-webkit-autofill:active{-webkit-box-shadow:0 0 0 30px ", " inset;}textarea{height:200px;resize:none;}[aria-invalid='false']{background:", ";border:1px solid ", ";&:-webkit-autofill,&:-webkit-autofill:hover,&:-webkit-autofill:focus,&:-webkit-autofill:active{-webkit-box-shadow:0 0 0 30px", " inset;}}[aria-invalid='true']{background:", ";border:1px solid ", ";&:-webkit-autofill,&:-webkit-autofill:hover,&:-webkit-autofill:focus,&:-webkit-autofill:active{-webkit-box-shadow:0 0 0 30px", " inset;}}input ~ .svg{position:absolute;right:8px;top:50%;transform:translateY(-50%);}textarea ~ .svg{position:absolute;right:8px;top:8px;}button:not(:last-of-type){margin-right:16px;}"], theme.colors.red_darker, theme.colors.white, theme.colors.light_grey_darkest, theme.colors.white, theme.colors.green_lightest, theme.colors.green_darker, theme.colors.green_lightest, theme.colors.red_lightest, theme.colors.red_darker, theme.colors.red_lightest));
1002
920
  });
1003
921
 
1004
922
  const Label = ({
@@ -1011,13 +929,12 @@ const Label = ({
1011
929
  return /*#__PURE__*/React__default["default"].createElement("label", {
1012
930
  className: `${className} ${isHidden ? 'visuallyHidden' : ''}`,
1013
931
  htmlFor: id
1014
- }, label, isRequired && /*#__PURE__*/React__default["default"].createElement("span", {
1015
- className: "isRequired"
1016
- }, "*"), isRequired && /*#__PURE__*/React__default["default"].createElement("span", {
1017
- className: "visuallyHidden"
1018
- }, " (required)"));
932
+ }, label, isRequired ? /*#__PURE__*/React__default["default"].createElement("span", {
933
+ className: "label__required"
934
+ }, "(required)") : /*#__PURE__*/React__default["default"].createElement("span", {
935
+ className: "label__optional"
936
+ }, "(optional)"));
1019
937
  };
1020
-
1021
938
  Label.propTypes = {
1022
939
  className: PropTypes__default["default"].string,
1023
940
  label: PropTypes__default["default"].string,
@@ -1075,7 +992,6 @@ const TextfieldStyled = styled__default["default"].div.withConfig({
1075
992
  }) => {
1076
993
  return styled.css(["display:", ";"], isHidden ? 'none' : 'block');
1077
994
  });
1078
-
1079
995
  const Textfield = ({
1080
996
  className,
1081
997
  field,
@@ -1167,7 +1083,6 @@ const Textfield = ({
1167
1083
  d: "m2 8 4.418 4.667L14 4.659l-1.246-1.326-6.336 6.692-3.18-3.332L2 8Z"
1168
1084
  }))));
1169
1085
  };
1170
-
1171
1086
  Textfield.propTypes = {
1172
1087
  className: PropTypes__default["default"].string,
1173
1088
  field: PropTypes__default["default"].any,
@@ -1274,7 +1189,6 @@ const Textarea = ({
1274
1189
  d: "m2 8 4.418 4.667L14 4.659l-1.246-1.326-6.336 6.692-3.18-3.332L2 8Z"
1275
1190
  }))));
1276
1191
  };
1277
-
1278
1192
  Textarea.propTypes = {
1279
1193
  className: PropTypes__default["default"].string,
1280
1194
  field: PropTypes__default["default"].any,
@@ -1312,7 +1226,6 @@ const HiddenField = ({
1312
1226
  isHidden: true
1313
1227
  });
1314
1228
  };
1315
-
1316
1229
  HiddenField.propTypes = {
1317
1230
  className: PropTypes__default["default"].string,
1318
1231
  id: PropTypes__default["default"].string,
@@ -1360,7 +1273,6 @@ const Dropdown = ({
1360
1273
  }, val[defaultLanguage]);
1361
1274
  })));
1362
1275
  };
1363
-
1364
1276
  Dropdown.propTypes = {
1365
1277
  className: PropTypes__default["default"].string,
1366
1278
  formId: PropTypes__default["default"].string,
@@ -1380,11 +1292,9 @@ const CheckboxStyled = styled__default["default"].div.withConfig({
1380
1292
  }) => {
1381
1293
  return styled.css(["", ""], useDefaultTheme && styled.css([".checkbox-wrapper{display:flex;flex-wrap:wrap;justify-content:flex-start;align-items:center;input{height:auto;width:auto;margin:0 4px 0 0;}label{display:inline-block;}}"]));
1382
1294
  });
1383
-
1384
1295
  const Checkbox = ({
1385
1296
  className,
1386
1297
  formId,
1387
- setCheckboxValue,
1388
1298
  id,
1389
1299
  type,
1390
1300
  label,
@@ -1397,18 +1307,16 @@ const Checkbox = ({
1397
1307
  // NF change rules of hooks
1398
1308
  let isDefaultChecked = defaultValue && defaultValue[defaultLanguage];
1399
1309
  const [isChecked, setIsChecked] = React.useState(isDefaultChecked || '');
1400
-
1310
+ const dispatch = reactRedux.useDispatch();
1401
1311
  switch (type) {
1402
1312
  case 'multiple':
1403
1313
  {
1404
1314
  if (!validations) return null;
1405
1315
  const isRequired = validations && validations.required ? true : false;
1406
1316
  const cbValues = validations && validations.allowedValues && validations.allowedValues.values;
1407
-
1408
- const _handleChange = (value, isChecked) => {
1409
- setCheckboxValue(formId, id, value, isChecked);
1317
+ const _handleChange = (label, value) => {
1318
+ dispatch(setMultipleCheckboxValue(formId, id, label, value));
1410
1319
  };
1411
-
1412
1320
  if (!cbValues || cbValues.length < 1) return null;
1413
1321
  return /*#__PURE__*/React__default["default"].createElement(CheckboxStyled, {
1414
1322
  className: `checkbox-container`,
@@ -1429,21 +1337,19 @@ const Checkbox = ({
1429
1337
  value: val[defaultLanguage],
1430
1338
  className: `${className ? className : ''} input-checkbox`,
1431
1339
  onChange: e => _handleChange(e.target.value, e.target.checked)
1432
- }), /*#__PURE__*/React__default["default"].createElement(Label, {
1340
+ }), /*#__PURE__*/React__default["default"].createElement("label", {
1341
+ className: "label-checkbox",
1433
1342
  id: `checkbox-${idx}`,
1434
- label: val[defaultLanguage],
1435
- className: "label-checkbox"
1436
- }));
1343
+ htmlFor: `checkbox-${idx}`
1344
+ }, val[defaultLanguage]));
1437
1345
  }));
1438
1346
  }
1439
-
1440
1347
  case 'single':
1441
1348
  {
1442
- const _handleChange = isChecked => {
1443
- setIsChecked(isChecked);
1444
- setCheckboxValue(formId, id, isChecked);
1349
+ const _handleChange = value => {
1350
+ setIsChecked(value);
1351
+ dispatch(setSingleCheckboxValue(formId, id, value));
1445
1352
  };
1446
-
1447
1353
  return /*#__PURE__*/React__default["default"].createElement(CheckboxStyled, {
1448
1354
  className: `checkbox-container`,
1449
1355
  useDefaultTheme: useDefaultTheme
@@ -1465,14 +1371,12 @@ const Checkbox = ({
1465
1371
  }
1466
1372
  }
1467
1373
  };
1468
-
1469
1374
  Checkbox.propTypes = {
1470
1375
  className: PropTypes__default["default"].string,
1471
1376
  formId: PropTypes__default["default"].string,
1472
1377
  id: PropTypes__default["default"].string,
1473
1378
  type: PropTypes__default["default"].string,
1474
1379
  label: PropTypes__default["default"].string,
1475
- setCheckboxValue: PropTypes__default["default"].func,
1476
1380
  validations: PropTypes__default["default"].object,
1477
1381
  defaultLanguage: PropTypes__default["default"].string,
1478
1382
  name: PropTypes__default["default"].object,
@@ -1487,7 +1391,6 @@ const RadioButtonStyled = styled__default["default"].div.withConfig({
1487
1391
  }) => {
1488
1392
  return styled.css(["", ""], useDefaultTheme && styled.css([".radio-wrapper{display:flex;flex-wrap:wrap;justify-content:flex-start;align-items:center;input{height:auto;width:auto;margin:0 4px 0 0;}label{display:inline-block;}}"]));
1489
1393
  });
1490
-
1491
1394
  const RadioButton = ({
1492
1395
  className,
1493
1396
  formId,
@@ -1524,14 +1427,13 @@ const RadioButton = ({
1524
1427
  onChange: e => {
1525
1428
  setValue(formId, id, e.target.value);
1526
1429
  }
1527
- }), /*#__PURE__*/React__default["default"].createElement(Label, {
1430
+ }), /*#__PURE__*/React__default["default"].createElement("label", {
1431
+ className: "label-radio",
1528
1432
  id: val[defaultLanguage],
1529
- label: val[defaultLanguage],
1530
- className: "label-radio"
1531
- }));
1433
+ htmlFor: val[defaultLanguage]
1434
+ }, val[defaultLanguage]));
1532
1435
  }));
1533
1436
  };
1534
-
1535
1437
  RadioButton.propTypes = {
1536
1438
  className: PropTypes__default["default"].string,
1537
1439
  formId: PropTypes__default["default"].string,
@@ -1563,6 +1465,7 @@ RadioButton.propTypes = {
1563
1465
  //m > minutes, eg ...T16:05:00 = 5
1564
1466
  //t > abbreviated AM / PM, e.g. A or P
1565
1467
  //tt > AM / PM, e.g. AM or PM
1468
+
1566
1469
  const formatDate = (date, format = 'dd MMMM yyyy') => {
1567
1470
  if (!date) return null;
1568
1471
  const dateObj = new Date(date);
@@ -1574,8 +1477,9 @@ const formatDate = (date, format = 'dd MMMM yyyy') => {
1574
1477
  const dayNameInt = dateObj.getDay();
1575
1478
  const timeArr = dateString[1].split(':');
1576
1479
  const hour = timeArr[0];
1577
- const minute = timeArr[1]; //convert to abstract strings to avoid character replacement along the chain, eg. Monday would match 'M' month single parameter
1480
+ const minute = timeArr[1];
1578
1481
 
1482
+ //convert to abstract strings to avoid character replacement along the chain, eg. Monday would match 'M' month single parameter
1579
1483
  const YEAR = ['&&', '&'];
1580
1484
  const MONTH = ['££££', '£££', '££', '£'];
1581
1485
  const DAY = ['%%%%', '%%%', '%%', '%'];
@@ -1587,16 +1491,13 @@ const formatDate = (date, format = 'dd MMMM yyyy') => {
1587
1491
  .replace('MMMM', MONTH[0]).replace('MMM', MONTH[1]).replace('MM', MONTH[2]).replace('M', MONTH[3]).replace('dddd', DAY[0]).replace('ddd', DAY[1]).replace('dd', DAY[2]).replace('d', DAY[3]).replace('HH', HOUR24[0]).replace('H', HOUR24[1]).replace('hh', HOUR12[0]).replace('h', HOUR12[1]).replace('mm', MINUTE[0]).replace('m', MINUTE[1]).replace('tt', TF[0]).replace('t', TF[1]).replace(YEAR[0], year).replace(YEAR[1], year.slice(-2)).replace(MONTH[0], monthsLong[parseInt(month, 10)]).replace(MONTH[1], monthsShort[parseInt(month, 10)]).replace(MONTH[2], month).replace(MONTH[3], parseInt(month, 10)).replace(DAY[0], daysLong[dayNameInt]).replace(DAY[1], daysShort[dayNameInt]).replace(DAY[2], day).replace(DAY[3], parseInt(day, 10)).replace(HOUR24[0], hour).replace(HOUR24[1], parseInt(hour, 10)).replace(HOUR12[0], parseHour(hour)).replace(HOUR12[1], parseInt(parseHour(hour), 10)).replace(MINUTE[0], minute).replace(MINUTE[1], parseInt(minute, 10)).replace(TF[0], parseTF(hour)).replace(TF[1], parseTF(hour).slice(0, -1));
1588
1492
  return formattedDate;
1589
1493
  };
1590
-
1591
1494
  const monthsShort = ['', 'Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'];
1592
1495
  const monthsLong = ['', 'January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'];
1593
1496
  const daysShort = ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'];
1594
1497
  const daysLong = ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'];
1595
-
1596
1498
  const parseHour = hour => {
1597
1499
  return hour > 12 ? hour - 12 : hour;
1598
1500
  };
1599
-
1600
1501
  const parseTF = hour => {
1601
1502
  return hour > 11 ? 'PM' : 'AM';
1602
1503
  };
@@ -1614,13 +1515,11 @@ const SingleDate = ({
1614
1515
  const onlyPassedDates = validations && validations.pastDateTime;
1615
1516
  const d = new Date();
1616
1517
  const todaysDate = d.toISOString();
1617
-
1618
1518
  const _handleChange = (formId, id, value) => {
1619
1519
  const d = new Date(value);
1620
1520
  const isoDate = d.toISOString();
1621
1521
  setValue(formId, id, isoDate);
1622
1522
  };
1623
-
1624
1523
  return /*#__PURE__*/React__default["default"].createElement("div", {
1625
1524
  className: "date-container"
1626
1525
  }, /*#__PURE__*/React__default["default"].createElement(Label, {
@@ -1637,7 +1536,6 @@ const SingleDate = ({
1637
1536
  onChange: e => _handleChange(formId, id, e.target.value)
1638
1537
  }));
1639
1538
  };
1640
-
1641
1539
  SingleDate.propTypes = {
1642
1540
  className: PropTypes__default["default"].string,
1643
1541
  formId: PropTypes__default["default"].string,
@@ -1656,7 +1554,6 @@ const DateRangeStyled = styled__default["default"].div.withConfig({
1656
1554
  }) => {
1657
1555
  return styled.css(["", ""], useDefaultTheme && styled.css([".daterange-wrapper{display:flex;flex-direction:column;input{&:first-child{margin:0 0 8px 0;}}}"]));
1658
1556
  });
1659
-
1660
1557
  const DateRange = ({
1661
1558
  className,
1662
1559
  id,
@@ -1672,15 +1569,12 @@ const DateRange = ({
1672
1569
  const todaysDate = d.toISOString();
1673
1570
  const [toDate, setToDate] = React.useState('');
1674
1571
  const [fromDate, setFromDate] = React.useState('');
1675
-
1676
1572
  const _handleDateChange = (dateType, formId, id, value) => {
1677
1573
  _updateDateProps(dateType, value);
1678
-
1679
1574
  const d = new Date(value);
1680
1575
  const isoDate = d.toISOString();
1681
1576
  setDateRangeValues(formId, id, dateType, isoDate);
1682
1577
  };
1683
-
1684
1578
  const _updateDateProps = (type, date) => {
1685
1579
  switch (type) {
1686
1580
  case 'from':
@@ -1690,7 +1584,6 @@ const DateRange = ({
1690
1584
  setFromDate(newDate);
1691
1585
  break;
1692
1586
  }
1693
-
1694
1587
  case 'to':
1695
1588
  {
1696
1589
  const d = new Date(date);
@@ -1698,12 +1591,10 @@ const DateRange = ({
1698
1591
  setToDate(newDate);
1699
1592
  break;
1700
1593
  }
1701
-
1702
1594
  default:
1703
1595
  return;
1704
1596
  }
1705
1597
  };
1706
-
1707
1598
  return /*#__PURE__*/React__default["default"].createElement(DateRangeStyled, {
1708
1599
  className: `daterange-container`,
1709
1600
  useDefaultTheme: useDefaultTheme
@@ -1740,7 +1631,6 @@ const DateRange = ({
1740
1631
  onChange: e => _handleDateChange('to', formId, id, e.target.value)
1741
1632
  })));
1742
1633
  };
1743
-
1744
1634
  DateRange.propTypes = {
1745
1635
  className: PropTypes__default["default"].string,
1746
1636
  formId: PropTypes__default["default"].string,
@@ -1760,7 +1650,6 @@ const EntryPickerStyled = styled__default["default"].div.withConfig({
1760
1650
  }) => {
1761
1651
  return styled.css(["", ""], useDefaultTheme && styled.css([".radio-wrapper,.checkbox-wrapper{display:flex;flex-wrap:wrap;justify-content:flex-start;align-items:center;input{height:auto;width:auto;margin:0 4px 0 0;}label{display:inline-block;}}"]));
1762
1652
  });
1763
-
1764
1653
  const EntryPicker = ({
1765
1654
  className,
1766
1655
  results,
@@ -1775,7 +1664,6 @@ const EntryPicker = ({
1775
1664
  if (!results || results.length > 3) return null;
1776
1665
  const isRequired = validations && validations.required ? true : false;
1777
1666
  let valArr = [];
1778
-
1779
1667
  const _handleChange = (formId, id, value, isChecked) => {
1780
1668
  if (type === 'checkbox') {
1781
1669
  if (isChecked) {
@@ -1783,13 +1671,11 @@ const EntryPicker = ({
1783
1671
  } else if (!isChecked) {
1784
1672
  valArr = valArr.filter(valItem => valItem !== value);
1785
1673
  }
1786
-
1787
1674
  setValue(formId, id, valArr);
1788
1675
  } else {
1789
1676
  setValue(formId, id, value);
1790
1677
  }
1791
1678
  };
1792
-
1793
1679
  return /*#__PURE__*/React__default["default"].createElement(EntryPickerStyled, {
1794
1680
  className: `${type}-container`,
1795
1681
  useDefaultTheme: useDefaultTheme
@@ -1816,7 +1702,6 @@ const EntryPicker = ({
1816
1702
  }));
1817
1703
  }));
1818
1704
  };
1819
-
1820
1705
  EntryPicker.propTypes = {
1821
1706
  className: PropTypes__default["default"].string,
1822
1707
  results: PropTypes__default["default"].array,
@@ -1829,6 +1714,1352 @@ EntryPicker.propTypes = {
1829
1714
  formId: PropTypes__default["default"].string
1830
1715
  };
1831
1716
 
1717
+ function _extends() {
1718
+ _extends = Object.assign ? Object.assign.bind() : function (target) {
1719
+ for (var i = 1; i < arguments.length; i++) {
1720
+ var source = arguments[i];
1721
+ for (var key in source) {
1722
+ if (Object.prototype.hasOwnProperty.call(source, key)) {
1723
+ target[key] = source[key];
1724
+ }
1725
+ }
1726
+ }
1727
+ return target;
1728
+ };
1729
+ return _extends.apply(this, arguments);
1730
+ }
1731
+
1732
+ const countries = [{
1733
+ "flag": "https://twemoji.maxcdn.com/2/svg/1f1e6-1f1e8.svg",
1734
+ "country": "Ascension Island",
1735
+ "code": "ac"
1736
+ }, {
1737
+ "flag": "https://twemoji.maxcdn.com/2/svg/1f1e6-1f1e9.svg",
1738
+ "country": "Andorra",
1739
+ "code": "ad"
1740
+ }, {
1741
+ "flag": "https://twemoji.maxcdn.com/2/svg/1f1e6-1f1ea.svg",
1742
+ "country": "United Arab Emirates",
1743
+ "code": "ae"
1744
+ }, {
1745
+ "flag": "https://twemoji.maxcdn.com/2/svg/1f1e6-1f1eb.svg",
1746
+ "country": "Afghanistan",
1747
+ "code": "af"
1748
+ }, {
1749
+ "flag": "https://twemoji.maxcdn.com/2/svg/1f1e6-1f1ec.svg",
1750
+ "country": "Antigua & Barbuda",
1751
+ "code": "ag"
1752
+ }, {
1753
+ "flag": "https://twemoji.maxcdn.com/2/svg/1f1e6-1f1ee.svg",
1754
+ "country": "Anguilla",
1755
+ "code": "ai"
1756
+ }, {
1757
+ "flag": "https://twemoji.maxcdn.com/2/svg/1f1e6-1f1f1.svg",
1758
+ "country": "Albania",
1759
+ "code": "al"
1760
+ }, {
1761
+ "flag": "https://twemoji.maxcdn.com/2/svg/1f1e6-1f1f2.svg",
1762
+ "country": "Armenia",
1763
+ "code": "am"
1764
+ }, {
1765
+ "flag": "https://twemoji.maxcdn.com/2/svg/1f1e6-1f1f4.svg",
1766
+ "country": "Angola",
1767
+ "code": "ad"
1768
+ }, {
1769
+ "flag": "https://twemoji.maxcdn.com/2/svg/1f1e6-1f1f6.svg",
1770
+ "country": "Antarctica",
1771
+ "code": "aq"
1772
+ }, {
1773
+ "flag": "https://twemoji.maxcdn.com/2/svg/1f1e6-1f1f7.svg",
1774
+ "country": "Argentina",
1775
+ "code": "ar"
1776
+ }, {
1777
+ "flag": "https://twemoji.maxcdn.com/2/svg/1f1e6-1f1f8.svg",
1778
+ "country": "American Samoa",
1779
+ "code": "as"
1780
+ }, {
1781
+ "flag": "https://twemoji.maxcdn.com/2/svg/1f1e6-1f1f9.svg",
1782
+ "country": "Austria",
1783
+ "code": "at"
1784
+ }, {
1785
+ "flag": "https://twemoji.maxcdn.com/2/svg/1f1e6-1f1fa.svg",
1786
+ "country": "Australia",
1787
+ "code": "au"
1788
+ }, {
1789
+ "flag": "https://twemoji.maxcdn.com/2/svg/1f1e6-1f1fc.svg",
1790
+ "country": "Aruba",
1791
+ "code": "aw"
1792
+ }, {
1793
+ "flag": "https://twemoji.maxcdn.com/2/svg/1f1e6-1f1fd.svg",
1794
+ "country": "Åland Islands",
1795
+ "code": "ax"
1796
+ }, {
1797
+ "flag": "https://twemoji.maxcdn.com/2/svg/1f1e6-1f1ff.svg",
1798
+ "country": "Azerbaijan",
1799
+ "code": "az"
1800
+ }, {
1801
+ "flag": "https://twemoji.maxcdn.com/2/svg/1f1e7-1f1e6.svg",
1802
+ "country": "Bosnia & Herzegovina",
1803
+ "code": "ba"
1804
+ }, {
1805
+ "flag": "https://twemoji.maxcdn.com/2/svg/1f1e7-1f1e7.svg",
1806
+ "country": "Barbados",
1807
+ "code": "bb"
1808
+ }, {
1809
+ "flag": "https://twemoji.maxcdn.com/2/svg/1f1e7-1f1e9.svg",
1810
+ "country": "Bangladesh",
1811
+ "code": "bd"
1812
+ }, {
1813
+ "flag": "https://twemoji.maxcdn.com/2/svg/1f1e7-1f1ea.svg",
1814
+ "country": "Belgium",
1815
+ "code": "be"
1816
+ }, {
1817
+ "flag": "https://twemoji.maxcdn.com/2/svg/1f1e7-1f1eb.svg",
1818
+ "country": "Burkina Faso",
1819
+ "code": "bf"
1820
+ }, {
1821
+ "flag": "https://twemoji.maxcdn.com/2/svg/1f1e7-1f1ec.svg",
1822
+ "country": "Bulgaria",
1823
+ "code": "bg"
1824
+ }, {
1825
+ "flag": "https://twemoji.maxcdn.com/2/svg/1f1e7-1f1ed.svg",
1826
+ "country": "Bahrain",
1827
+ "code": "bh"
1828
+ }, {
1829
+ "flag": "https://twemoji.maxcdn.com/2/svg/1f1e7-1f1ee.svg",
1830
+ "country": "Burundi",
1831
+ "code": "bi"
1832
+ }, {
1833
+ "flag": "https://twemoji.maxcdn.com/2/svg/1f1e7-1f1ef.svg",
1834
+ "country": "Benin",
1835
+ "code": "bj"
1836
+ }, {
1837
+ "flag": "https://twemoji.maxcdn.com/2/svg/1f1e7-1f1f1.svg",
1838
+ "country": "St. Barthélemy",
1839
+ "code": "bl"
1840
+ }, {
1841
+ "flag": "https://twemoji.maxcdn.com/2/svg/1f1e7-1f1f2.svg",
1842
+ "country": "Bermuda",
1843
+ "code": "bm"
1844
+ }, {
1845
+ "flag": "https://twemoji.maxcdn.com/2/svg/1f1e7-1f1f3.svg",
1846
+ "country": "Brunei",
1847
+ "code": "bn"
1848
+ }, {
1849
+ "flag": "https://twemoji.maxcdn.com/2/svg/1f1e7-1f1f4.svg",
1850
+ "country": "Bolivia",
1851
+ "code": "bo"
1852
+ }, {
1853
+ "flag": "https://twemoji.maxcdn.com/2/svg/1f1e7-1f1f6.svg",
1854
+ "country": "Caribbean Netherlands"
1855
+ }, {
1856
+ "flag": "https://twemoji.maxcdn.com/2/svg/1f1e7-1f1f7.svg",
1857
+ "country": "Brazil",
1858
+ "code": "br"
1859
+ }, {
1860
+ "flag": "https://twemoji.maxcdn.com/2/svg/1f1e7-1f1f8.svg",
1861
+ "country": "Bahamas",
1862
+ "code": "bs"
1863
+ }, {
1864
+ "flag": "https://twemoji.maxcdn.com/2/svg/1f1e7-1f1f9.svg",
1865
+ "country": "Bhutan",
1866
+ "code": "bt"
1867
+ }, {
1868
+ "flag": "https://twemoji.maxcdn.com/2/svg/1f1e7-1f1fb.svg",
1869
+ "country": "Bouvet Island",
1870
+ "code": "bv"
1871
+ }, {
1872
+ "flag": "https://twemoji.maxcdn.com/2/svg/1f1e7-1f1fc.svg",
1873
+ "country": "Botswana",
1874
+ "code": "bw"
1875
+ }, {
1876
+ "flag": "https://twemoji.maxcdn.com/2/svg/1f1e7-1f1fe.svg",
1877
+ "country": "Belarus",
1878
+ "code": "by"
1879
+ }, {
1880
+ "flag": "https://twemoji.maxcdn.com/2/svg/1f1e7-1f1ff.svg",
1881
+ "country": "Belize",
1882
+ "code": "bz"
1883
+ }, {
1884
+ "flag": "https://twemoji.maxcdn.com/2/svg/1f1e8-1f1e6.svg",
1885
+ "country": "Canada",
1886
+ "code": "ca"
1887
+ }, {
1888
+ "flag": "https://twemoji.maxcdn.com/2/svg/1f1e8-1f1e8.svg",
1889
+ "country": "Cocos (Keeling) Islands",
1890
+ "code": "cc"
1891
+ }, {
1892
+ "flag": "https://twemoji.maxcdn.com/2/svg/1f1e8-1f1e9.svg",
1893
+ "country": "Congo - Kinshasa",
1894
+ "code": "cg"
1895
+ }, {
1896
+ "flag": "https://twemoji.maxcdn.com/2/svg/1f1e8-1f1eb.svg",
1897
+ "country": "Central African Republic",
1898
+ "code": "cf"
1899
+ }, {
1900
+ "flag": "https://twemoji.maxcdn.com/2/svg/1f1e8-1f1ec.svg",
1901
+ "country": "Congo - Brazzaville",
1902
+ "code": "cd"
1903
+ }, {
1904
+ "flag": "https://twemoji.maxcdn.com/2/svg/1f1e8-1f1ed.svg",
1905
+ "country": "Switzerland",
1906
+ "code": "ch"
1907
+ }, {
1908
+ "flag": "https://twemoji.maxcdn.com/2/svg/1f1e8-1f1ee.svg",
1909
+ "country": "Côte d’Ivoire",
1910
+ "code": "ci"
1911
+ }, {
1912
+ "flag": "https://twemoji.maxcdn.com/2/svg/1f1e8-1f1f0.svg",
1913
+ "country": "Cook Islands",
1914
+ "code": "ck"
1915
+ }, {
1916
+ "flag": "https://twemoji.maxcdn.com/2/svg/1f1e8-1f1f1.svg",
1917
+ "country": "Chile",
1918
+ "code": "cl"
1919
+ }, {
1920
+ "flag": "https://twemoji.maxcdn.com/2/svg/1f1e8-1f1f2.svg",
1921
+ "country": "Cameroon",
1922
+ "code": "cm"
1923
+ }, {
1924
+ "flag": "https://twemoji.maxcdn.com/2/svg/1f1e8-1f1f3.svg",
1925
+ "country": "China",
1926
+ "code": "cn"
1927
+ }, {
1928
+ "flag": "https://twemoji.maxcdn.com/2/svg/1f1e8-1f1f4.svg",
1929
+ "country": "Colombia",
1930
+ "code": "co"
1931
+ }, {
1932
+ "flag": "https://twemoji.maxcdn.com/2/svg/1f1e8-1f1f5.svg",
1933
+ "country": "Clipperton Island",
1934
+ "code": "cp"
1935
+ }, {
1936
+ "flag": "https://twemoji.maxcdn.com/2/svg/1f1e8-1f1f7.svg",
1937
+ "country": "Costa Rica",
1938
+ "code": "cr"
1939
+ }, {
1940
+ "flag": "https://twemoji.maxcdn.com/2/svg/1f1e8-1f1fa.svg",
1941
+ "country": "Cuba",
1942
+ "code": "cu"
1943
+ }, {
1944
+ "flag": "https://twemoji.maxcdn.com/2/svg/1f1e8-1f1fb.svg",
1945
+ "country": "Cape Verde",
1946
+ "code": "cv"
1947
+ }, {
1948
+ "flag": "https://twemoji.maxcdn.com/2/svg/1f1e8-1f1fc.svg",
1949
+ "country": "Curaçao",
1950
+ "code": "cw"
1951
+ }, {
1952
+ "flag": "https://twemoji.maxcdn.com/2/svg/1f1e8-1f1fd.svg",
1953
+ "country": "Christmas Island",
1954
+ "code": "cx"
1955
+ }, {
1956
+ "flag": "https://twemoji.maxcdn.com/2/svg/1f1e8-1f1fe.svg",
1957
+ "country": "Cyprus",
1958
+ "code": "cy"
1959
+ }, {
1960
+ "flag": "https://twemoji.maxcdn.com/2/svg/1f1e8-1f1ff.svg",
1961
+ "country": "Czechia",
1962
+ "code": "cz"
1963
+ }, {
1964
+ "flag": "https://twemoji.maxcdn.com/2/svg/1f1e9-1f1ea.svg",
1965
+ "country": "Germany",
1966
+ "code": "de"
1967
+ }, {
1968
+ "flag": "https://twemoji.maxcdn.com/2/svg/1f1e9-1f1ec.svg",
1969
+ "country": "Diego Garcia",
1970
+ "code": "dg"
1971
+ }, {
1972
+ "flag": "https://twemoji.maxcdn.com/2/svg/1f1e9-1f1ef.svg",
1973
+ "country": "Djibouti",
1974
+ "code": "dj"
1975
+ }, {
1976
+ "flag": "https://twemoji.maxcdn.com/2/svg/1f1e9-1f1f0.svg",
1977
+ "country": "Denmark",
1978
+ "code": "dk"
1979
+ }, {
1980
+ "flag": "https://twemoji.maxcdn.com/2/svg/1f1e9-1f1f2.svg",
1981
+ "country": "Dominica",
1982
+ "code": "dm"
1983
+ }, {
1984
+ "flag": "https://twemoji.maxcdn.com/2/svg/1f1e9-1f1f4.svg",
1985
+ "country": "Dominican Republic",
1986
+ "code": "do"
1987
+ }, {
1988
+ "flag": "https://twemoji.maxcdn.com/2/svg/1f1e9-1f1ff.svg",
1989
+ "country": "Algeria",
1990
+ "code": "dz"
1991
+ }, {
1992
+ "flag": "https://twemoji.maxcdn.com/2/svg/1f1ea-1f1e6.svg",
1993
+ "country": "Ceuta & Melilla",
1994
+ "code": "ea"
1995
+ }, {
1996
+ "flag": "https://twemoji.maxcdn.com/2/svg/1f1ea-1f1e8.svg",
1997
+ "country": "Ecuador",
1998
+ "code": "ec"
1999
+ }, {
2000
+ "flag": "https://twemoji.maxcdn.com/2/svg/1f1ea-1f1ea.svg",
2001
+ "country": "Estonia",
2002
+ "code": "ee"
2003
+ }, {
2004
+ "flag": "https://twemoji.maxcdn.com/2/svg/1f1ea-1f1ec.svg",
2005
+ "country": "Egypt",
2006
+ "code": "eg"
2007
+ }, {
2008
+ "flag": "https://twemoji.maxcdn.com/2/svg/1f1ea-1f1ed.svg",
2009
+ "country": "Western Sahara",
2010
+ "code": "eh"
2011
+ }, {
2012
+ "flag": "https://twemoji.maxcdn.com/2/svg/1f1ea-1f1f7.svg",
2013
+ "country": "Eritrea",
2014
+ "code": "er"
2015
+ }, {
2016
+ "flag": "https://twemoji.maxcdn.com/2/svg/1f1ea-1f1f8.svg",
2017
+ "country": "Spain",
2018
+ "code": "es"
2019
+ }, {
2020
+ "flag": "https://twemoji.maxcdn.com/2/svg/1f1ea-1f1f9.svg",
2021
+ "country": "Ethiopia",
2022
+ "code": "et"
2023
+ }, {
2024
+ "flag": "https://twemoji.maxcdn.com/2/svg/1f1ea-1f1fa.svg",
2025
+ "country": "European Union",
2026
+ "code": "eu"
2027
+ }, {
2028
+ "flag": "https://twemoji.maxcdn.com/2/svg/1f1eb-1f1ee.svg",
2029
+ "country": "Finland",
2030
+ "code": "fi"
2031
+ }, {
2032
+ "flag": "https://twemoji.maxcdn.com/2/svg/1f1eb-1f1ef.svg",
2033
+ "country": "Fiji",
2034
+ "code": "fj"
2035
+ }, {
2036
+ "flag": "https://twemoji.maxcdn.com/2/svg/1f1eb-1f1f0.svg",
2037
+ "country": "Falkland Islands",
2038
+ "code": "fk"
2039
+ }, {
2040
+ "flag": "https://twemoji.maxcdn.com/2/svg/1f1eb-1f1f2.svg",
2041
+ "country": "Micronesia",
2042
+ "code": "fm"
2043
+ }, {
2044
+ "flag": "https://twemoji.maxcdn.com/2/svg/1f1eb-1f1f4.svg",
2045
+ "country": "Faroe Islands",
2046
+ "code": "fo"
2047
+ }, {
2048
+ "flag": "https://twemoji.maxcdn.com/2/svg/1f1eb-1f1f7.svg",
2049
+ "country": "France",
2050
+ "code": "fr"
2051
+ }, {
2052
+ "flag": "https://twemoji.maxcdn.com/2/svg/1f1ec-1f1e6.svg",
2053
+ "country": "Gabon",
2054
+ "code": "ga"
2055
+ }, {
2056
+ "flag": "https://twemoji.maxcdn.com/2/svg/1f1ec-1f1e7.svg",
2057
+ "country": "United Kingdom",
2058
+ "code": "gb"
2059
+ }, {
2060
+ "flag": "https://twemoji.maxcdn.com/2/svg/1f1ec-1f1e9.svg",
2061
+ "country": "Grenada",
2062
+ "code": "gd"
2063
+ }, {
2064
+ "flag": "https://twemoji.maxcdn.com/2/svg/1f1ec-1f1ea.svg",
2065
+ "country": "Georgia",
2066
+ "code": "ge"
2067
+ }, {
2068
+ "flag": "https://twemoji.maxcdn.com/2/svg/1f1ec-1f1eb.svg",
2069
+ "country": "French Guiana",
2070
+ "code": "gf"
2071
+ }, {
2072
+ "flag": "https://twemoji.maxcdn.com/2/svg/1f1ec-1f1ec.svg",
2073
+ "country": "Guernsey",
2074
+ "code": "gg"
2075
+ }, {
2076
+ "flag": "https://twemoji.maxcdn.com/2/svg/1f1ec-1f1ed.svg",
2077
+ "country": "Ghana",
2078
+ "code": "gh"
2079
+ }, {
2080
+ "flag": "https://twemoji.maxcdn.com/2/svg/1f1ec-1f1ee.svg",
2081
+ "country": "Gibraltar",
2082
+ "code": "gi"
2083
+ }, {
2084
+ "flag": "https://twemoji.maxcdn.com/2/svg/1f1ec-1f1f1.svg",
2085
+ "country": "Greenland",
2086
+ "code": "gl"
2087
+ }, {
2088
+ "flag": "https://twemoji.maxcdn.com/2/svg/1f1ec-1f1f2.svg",
2089
+ "country": "Gambia",
2090
+ "code": "gm"
2091
+ }, {
2092
+ "flag": "https://twemoji.maxcdn.com/2/svg/1f1ec-1f1f3.svg",
2093
+ "country": "Guinea",
2094
+ "code": "gn"
2095
+ }, {
2096
+ "flag": "https://twemoji.maxcdn.com/2/svg/1f1ec-1f1f5.svg",
2097
+ "country": "Guadeloupe",
2098
+ "code": "gp"
2099
+ }, {
2100
+ "flag": "https://twemoji.maxcdn.com/2/svg/1f1ec-1f1f6.svg",
2101
+ "country": "Equatorial Guinea",
2102
+ "code": "gq"
2103
+ }, {
2104
+ "flag": "https://twemoji.maxcdn.com/2/svg/1f1ec-1f1f7.svg",
2105
+ "country": "Greece",
2106
+ "code": "gr"
2107
+ }, {
2108
+ "flag": "https://twemoji.maxcdn.com/2/svg/1f1ec-1f1f8.svg",
2109
+ "country": "South Georgia & South', Sandwich Islands",
2110
+ "code": "gs"
2111
+ }, {
2112
+ "flag": "https://twemoji.maxcdn.com/2/svg/1f1ec-1f1f9.svg",
2113
+ "country": "Guatemala",
2114
+ "code": "gt"
2115
+ }, {
2116
+ "flag": "https://twemoji.maxcdn.com/2/svg/1f1ec-1f1fa.svg",
2117
+ "country": "Guam",
2118
+ "code": "gu"
2119
+ }, {
2120
+ "flag": "https://twemoji.maxcdn.com/2/svg/1f1ec-1f1fc.svg",
2121
+ "country": "Guinea-Bissau",
2122
+ "code": "gw"
2123
+ }, {
2124
+ "flag": "https://twemoji.maxcdn.com/2/svg/1f1ec-1f1fe.svg",
2125
+ "country": "Guyana",
2126
+ "code": "gy"
2127
+ }, {
2128
+ "flag": "https://twemoji.maxcdn.com/2/svg/1f1ed-1f1f0.svg",
2129
+ "country": "Hong Kong SAR China",
2130
+ "code": "hk"
2131
+ }, {
2132
+ "flag": "https://twemoji.maxcdn.com/2/svg/1f1ed-1f1f2.svg",
2133
+ "country": "Heard & McDonald Islands",
2134
+ "code": "hm"
2135
+ }, {
2136
+ "flag": "https://twemoji.maxcdn.com/2/svg/1f1ed-1f1f3.svg",
2137
+ "country": "Honduras",
2138
+ "code": "hn"
2139
+ }, {
2140
+ "flag": "https://twemoji.maxcdn.com/2/svg/1f1ed-1f1f7.svg",
2141
+ "country": "Croatia",
2142
+ "code": "hr"
2143
+ }, {
2144
+ "flag": "https://twemoji.maxcdn.com/2/svg/1f1ed-1f1f9.svg",
2145
+ "country": "Haiti",
2146
+ "code": "ht"
2147
+ }, {
2148
+ "flag": "https://twemoji.maxcdn.com/2/svg/1f1ed-1f1fa.svg",
2149
+ "country": "Hungary",
2150
+ "code": "hu"
2151
+ }, {
2152
+ "flag": "https://twemoji.maxcdn.com/2/svg/1f1ee-1f1e8.svg",
2153
+ "country": "Canary Islands",
2154
+ "code": "ic"
2155
+ }, {
2156
+ "flag": "https://twemoji.maxcdn.com/2/svg/1f1ee-1f1e9.svg",
2157
+ "country": "Indonesia",
2158
+ "code": "id"
2159
+ }, {
2160
+ "flag": "https://twemoji.maxcdn.com/2/svg/1f1ee-1f1ea.svg",
2161
+ "country": "Ireland",
2162
+ "code": "ie"
2163
+ }, {
2164
+ "flag": "https://twemoji.maxcdn.com/2/svg/1f1ee-1f1f1.svg",
2165
+ "country": "Israel",
2166
+ "code": "il"
2167
+ }, {
2168
+ "flag": "https://twemoji.maxcdn.com/2/svg/1f1ee-1f1f2.svg",
2169
+ "country": "Isle of Man",
2170
+ "code": "im"
2171
+ }, {
2172
+ "flag": "https://twemoji.maxcdn.com/2/svg/1f1ee-1f1f3.svg",
2173
+ "country": "India",
2174
+ "code": "in"
2175
+ }, {
2176
+ "flag": "https://twemoji.maxcdn.com/2/svg/1f1ee-1f1f4.svg",
2177
+ "country": "British Indian Ocean Territory",
2178
+ "code": "io"
2179
+ }, {
2180
+ "flag": "https://twemoji.maxcdn.com/2/svg/1f1ee-1f1f6.svg",
2181
+ "country": "Iraq",
2182
+ "code": "iq"
2183
+ }, {
2184
+ "flag": "https://twemoji.maxcdn.com/2/svg/1f1ee-1f1f7.svg",
2185
+ "country": "Iran"
2186
+ }, {
2187
+ "flag": "https://twemoji.maxcdn.com/2/svg/1f1ee-1f1f8.svg",
2188
+ "country": "Iceland",
2189
+ "code": "is"
2190
+ }, {
2191
+ "flag": "https://twemoji.maxcdn.com/2/svg/1f1ee-1f1f9.svg",
2192
+ "country": "Italy",
2193
+ "code": "it"
2194
+ }, {
2195
+ "flag": "https://twemoji.maxcdn.com/2/svg/1f1ef-1f1ea.svg",
2196
+ "country": "Jersey",
2197
+ "code": "je"
2198
+ }, {
2199
+ "flag": "https://twemoji.maxcdn.com/2/svg/1f1ef-1f1f2.svg",
2200
+ "country": "Jamaica",
2201
+ "code": "jm"
2202
+ }, {
2203
+ "flag": "https://twemoji.maxcdn.com/2/svg/1f1ef-1f1f4.svg",
2204
+ "country": "Jordan",
2205
+ "code": "jo"
2206
+ }, {
2207
+ "flag": "https://twemoji.maxcdn.com/2/svg/1f1ef-1f1f5.svg",
2208
+ "country": "Japan",
2209
+ "code": "jp"
2210
+ }, {
2211
+ "flag": "https://twemoji.maxcdn.com/2/svg/1f1f0-1f1ea.svg",
2212
+ "country": "Kenya",
2213
+ "code": "ke"
2214
+ }, {
2215
+ "flag": "https://twemoji.maxcdn.com/2/svg/1f1f0-1f1ec.svg",
2216
+ "country": "Kyrgyzstan",
2217
+ "code": "kg"
2218
+ }, {
2219
+ "flag": "https://twemoji.maxcdn.com/2/svg/1f1f0-1f1ed.svg",
2220
+ "country": "Cambodia",
2221
+ "code": "kh"
2222
+ }, {
2223
+ "flag": "https://twemoji.maxcdn.com/2/svg/1f1f0-1f1ee.svg",
2224
+ "country": "Kiribati",
2225
+ "code": "ki"
2226
+ }, {
2227
+ "flag": "https://twemoji.maxcdn.com/2/svg/1f1f0-1f1f2.svg",
2228
+ "country": "Comoros",
2229
+ "code": "km"
2230
+ }, {
2231
+ "flag": "https://twemoji.maxcdn.com/2/svg/1f1f0-1f1f3.svg",
2232
+ "country": "St. Kitts & Nevis",
2233
+ "code": "kn"
2234
+ }, {
2235
+ "flag": "https://twemoji.maxcdn.com/2/svg/1f1f0-1f1f5.svg",
2236
+ "country": "North Korea",
2237
+ "code": "kp"
2238
+ }, {
2239
+ "flag": "https://twemoji.maxcdn.com/2/svg/1f1f0-1f1f7.svg",
2240
+ "country": "South Korea",
2241
+ "code": "kr"
2242
+ }, {
2243
+ "flag": "https://twemoji.maxcdn.com/2/svg/1f1f0-1f1fc.svg",
2244
+ "country": "Kuwait",
2245
+ "code": "kw"
2246
+ }, {
2247
+ "flag": "https://twemoji.maxcdn.com/2/svg/1f1f0-1f1fe.svg",
2248
+ "country": "Cayman Islands",
2249
+ "code": "ky"
2250
+ }, {
2251
+ "flag": "https://twemoji.maxcdn.com/2/svg/1f1f0-1f1ff.svg",
2252
+ "country": "Kazakhstan",
2253
+ "code": "kz"
2254
+ }, {
2255
+ "flag": "https://twemoji.maxcdn.com/2/svg/1f1f1-1f1e6.svg",
2256
+ "country": "Laos",
2257
+ "code": "la"
2258
+ }, {
2259
+ "flag": "https://twemoji.maxcdn.com/2/svg/1f1f1-1f1e7.svg",
2260
+ "country": "Lebanon",
2261
+ "code": "lb"
2262
+ }, {
2263
+ "flag": "https://twemoji.maxcdn.com/2/svg/1f1f1-1f1e8.svg",
2264
+ "country": "St. Lucia",
2265
+ "code": "lc"
2266
+ }, {
2267
+ "flag": "https://twemoji.maxcdn.com/2/svg/1f1f1-1f1ee.svg",
2268
+ "country": "Liechtenstein",
2269
+ "code": "li"
2270
+ }, {
2271
+ "flag": "https://twemoji.maxcdn.com/2/svg/1f1f1-1f1f0.svg",
2272
+ "country": "Sri Lanka",
2273
+ "code": "lk"
2274
+ }, {
2275
+ "flag": "https://twemoji.maxcdn.com/2/svg/1f1f1-1f1f7.svg",
2276
+ "country": "Liberia",
2277
+ "code": "lr"
2278
+ }, {
2279
+ "flag": "https://twemoji.maxcdn.com/2/svg/1f1f1-1f1f8.svg",
2280
+ "country": "Lesotho",
2281
+ "code": "ls"
2282
+ }, {
2283
+ "flag": "https://twemoji.maxcdn.com/2/svg/1f1f1-1f1f9.svg",
2284
+ "country": "Lithuania",
2285
+ "code": "lt"
2286
+ }, {
2287
+ "flag": "https://twemoji.maxcdn.com/2/svg/1f1f1-1f1fa.svg",
2288
+ "country": "Luxembourg",
2289
+ "code": "lu"
2290
+ }, {
2291
+ "flag": "https://twemoji.maxcdn.com/2/svg/1f1f1-1f1fb.svg",
2292
+ "country": "Latvia",
2293
+ "code": "lv"
2294
+ }, {
2295
+ "flag": "https://twemoji.maxcdn.com/2/svg/1f1f1-1f1fe.svg",
2296
+ "country": "Libya",
2297
+ "code": "ly"
2298
+ }, {
2299
+ "flag": "https://twemoji.maxcdn.com/2/svg/1f1f2-1f1e6.svg",
2300
+ "country": "Morocco",
2301
+ "code": "ma"
2302
+ }, {
2303
+ "flag": "https://twemoji.maxcdn.com/2/svg/1f1f2-1f1e8.svg",
2304
+ "country": "Monaco",
2305
+ "code": "mc"
2306
+ }, {
2307
+ "flag": "https://twemoji.maxcdn.com/2/svg/1f1f2-1f1e9.svg",
2308
+ "country": "Moldova",
2309
+ "code": "md"
2310
+ }, {
2311
+ "flag": "https://twemoji.maxcdn.com/2/svg/1f1f2-1f1ea.svg",
2312
+ "country": "Montenegro",
2313
+ "code": "me"
2314
+ }, {
2315
+ "flag": "https://twemoji.maxcdn.com/2/svg/1f1f2-1f1eb.svg",
2316
+ "country": "St. Martin",
2317
+ "code": "mf"
2318
+ }, {
2319
+ "flag": "https://twemoji.maxcdn.com/2/svg/1f1f2-1f1ec.svg",
2320
+ "country": "Madagascar",
2321
+ "code": "mg"
2322
+ }, {
2323
+ "flag": "https://twemoji.maxcdn.com/2/svg/1f1f2-1f1ed.svg",
2324
+ "country": "Marshall Islands",
2325
+ "code": "mh"
2326
+ }, {
2327
+ "flag": "https://twemoji.maxcdn.com/2/svg/1f1f2-1f1f0.svg",
2328
+ "country": "North Macedonia",
2329
+ "code": "mk"
2330
+ }, {
2331
+ "flag": "https://twemoji.maxcdn.com/2/svg/1f1f2-1f1f1.svg",
2332
+ "country": "Mali",
2333
+ "code": "ml"
2334
+ }, {
2335
+ "flag": "https://twemoji.maxcdn.com/2/svg/1f1f2-1f1f2.svg",
2336
+ "country": "Myanmar (Burma)",
2337
+ "code": "mm"
2338
+ }, {
2339
+ "flag": "https://twemoji.maxcdn.com/2/svg/1f1f2-1f1f3.svg",
2340
+ "country": "Mongolia",
2341
+ "code": "mn"
2342
+ }, {
2343
+ "flag": "https://twemoji.maxcdn.com/2/svg/1f1f2-1f1f4.svg",
2344
+ "country": "Macao Sar China",
2345
+ "code": "mo"
2346
+ }, {
2347
+ "flag": "https://twemoji.maxcdn.com/2/svg/1f1f2-1f1f5.svg",
2348
+ "country": "Northern Mariana Islands",
2349
+ "code": "mp"
2350
+ }, {
2351
+ "flag": "https://twemoji.maxcdn.com/2/svg/1f1f2-1f1f6.svg",
2352
+ "country": "Martinique",
2353
+ "code": "mq"
2354
+ }, {
2355
+ "flag": "https://twemoji.maxcdn.com/2/svg/1f1f2-1f1f7.svg",
2356
+ "country": "Mauritania",
2357
+ "code": "mr"
2358
+ }, {
2359
+ "flag": "https://twemoji.maxcdn.com/2/svg/1f1f2-1f1f8.svg",
2360
+ "country": "Montserrat",
2361
+ "code": "ms"
2362
+ }, {
2363
+ "flag": "https://twemoji.maxcdn.com/2/svg/1f1f2-1f1f9.svg",
2364
+ "country": "Malta",
2365
+ "code": "mt"
2366
+ }, {
2367
+ "flag": "https://twemoji.maxcdn.com/2/svg/1f1f2-1f1fa.svg",
2368
+ "country": "Mauritius",
2369
+ "code": "mu"
2370
+ }, {
2371
+ "flag": "https://twemoji.maxcdn.com/2/svg/1f1f2-1f1fb.svg",
2372
+ "country": "Maldives",
2373
+ "code": "mv"
2374
+ }, {
2375
+ "flag": "https://twemoji.maxcdn.com/2/svg/1f1f2-1f1fc.svg",
2376
+ "country": "Malawi",
2377
+ "code": "mw"
2378
+ }, {
2379
+ "flag": "https://twemoji.maxcdn.com/2/svg/1f1f2-1f1fd.svg",
2380
+ "country": "Mexico",
2381
+ "code": "mx"
2382
+ }, {
2383
+ "flag": "https://twemoji.maxcdn.com/2/svg/1f1f2-1f1fe.svg",
2384
+ "country": "Malaysia",
2385
+ "code": "my"
2386
+ }, {
2387
+ "flag": "https://twemoji.maxcdn.com/2/svg/1f1f2-1f1ff.svg",
2388
+ "country": "Mozambique",
2389
+ "code": "mz"
2390
+ }, {
2391
+ "flag": "https://twemoji.maxcdn.com/2/svg/1f1f3-1f1e6.svg",
2392
+ "country": "Namibia",
2393
+ "code": "na"
2394
+ }, {
2395
+ "flag": "https://twemoji.maxcdn.com/2/svg/1f1f3-1f1e8.svg",
2396
+ "country": "New Caledonia",
2397
+ "code": "nc"
2398
+ }, {
2399
+ "flag": "https://twemoji.maxcdn.com/2/svg/1f1f3-1f1ea.svg",
2400
+ "country": "Niger",
2401
+ "code": "ne"
2402
+ }, {
2403
+ "flag": "https://twemoji.maxcdn.com/2/svg/1f1f3-1f1eb.svg",
2404
+ "country": "Norfolk Island",
2405
+ "code": "nf"
2406
+ }, {
2407
+ "flag": "https://twemoji.maxcdn.com/2/svg/1f1f3-1f1ec.svg",
2408
+ "country": "Nigeria",
2409
+ "code": "ng"
2410
+ }, {
2411
+ "flag": "https://twemoji.maxcdn.com/2/svg/1f1f3-1f1ee.svg",
2412
+ "country": "Nicaragua",
2413
+ "code": "ni"
2414
+ }, {
2415
+ "flag": "https://twemoji.maxcdn.com/2/svg/1f1f3-1f1f1.svg",
2416
+ "country": "Netherlands",
2417
+ "code": "nl"
2418
+ }, {
2419
+ "flag": "https://twemoji.maxcdn.com/2/svg/1f1f3-1f1f4.svg",
2420
+ "country": "Norway",
2421
+ "code": "no"
2422
+ }, {
2423
+ "flag": "https://twemoji.maxcdn.com/2/svg/1f1f3-1f1f5.svg",
2424
+ "country": "Nepal",
2425
+ "code": "np"
2426
+ }, {
2427
+ "flag": "https://twemoji.maxcdn.com/2/svg/1f1f3-1f1f7.svg",
2428
+ "country": "Nauru",
2429
+ "code": "nr"
2430
+ }, {
2431
+ "flag": "https://twemoji.maxcdn.com/2/svg/1f1f3-1f1fa.svg",
2432
+ "country": "Niue",
2433
+ "code": "nu"
2434
+ }, {
2435
+ "flag": "https://twemoji.maxcdn.com/2/svg/1f1f3-1f1ff.svg",
2436
+ "country": "New Zealand",
2437
+ "code": "nz"
2438
+ }, {
2439
+ "flag": "https://twemoji.maxcdn.com/2/svg/1f1f4-1f1f2.svg",
2440
+ "country": "Oman",
2441
+ "code": "om"
2442
+ }, {
2443
+ "flag": "https://twemoji.maxcdn.com/2/svg/1f1f5-1f1e6.svg",
2444
+ "country": "Panama",
2445
+ "code": "pa"
2446
+ }, {
2447
+ "flag": "https://twemoji.maxcdn.com/2/svg/1f1f5-1f1ea.svg",
2448
+ "country": "Peru",
2449
+ "code": "pe"
2450
+ }, {
2451
+ "flag": "https://twemoji.maxcdn.com/2/svg/1f1f5-1f1eb.svg",
2452
+ "country": "French Polynesia",
2453
+ "code": "pf"
2454
+ }, {
2455
+ "flag": "https://twemoji.maxcdn.com/2/svg/1f1f5-1f1ec.svg",
2456
+ "country": "Papua New Guinea",
2457
+ "code": "pg"
2458
+ }, {
2459
+ "flag": "https://twemoji.maxcdn.com/2/svg/1f1f5-1f1ed.svg",
2460
+ "country": "Philippines",
2461
+ "code": "ph"
2462
+ }, {
2463
+ "flag": "https://twemoji.maxcdn.com/2/svg/1f1f5-1f1f0.svg",
2464
+ "country": "Pakistan",
2465
+ "code": "pk"
2466
+ }, {
2467
+ "flag": "https://twemoji.maxcdn.com/2/svg/1f1f5-1f1f1.svg",
2468
+ "country": "Poland",
2469
+ "code": "pl"
2470
+ }, {
2471
+ "flag": "https://twemoji.maxcdn.com/2/svg/1f1f5-1f1f2.svg",
2472
+ "country": "St. Pierre & Miquelon",
2473
+ "code": "pm"
2474
+ }, {
2475
+ "flag": "https://twemoji.maxcdn.com/2/svg/1f1f5-1f1f3.svg",
2476
+ "country": "Pitcairn Islands",
2477
+ "code": "pn"
2478
+ }, {
2479
+ "flag": "https://twemoji.maxcdn.com/2/svg/1f1f5-1f1f7.svg",
2480
+ "country": "Puerto Rico",
2481
+ "code": "pr"
2482
+ }, {
2483
+ "flag": "https://twemoji.maxcdn.com/2/svg/1f1f5-1f1f8.svg",
2484
+ "country": "Palestinian Territories",
2485
+ "code": "ps"
2486
+ }, {
2487
+ "flag": "https://twemoji.maxcdn.com/2/svg/1f1f5-1f1f9.svg",
2488
+ "country": "Portugal",
2489
+ "code": "pt"
2490
+ }, {
2491
+ "flag": "https://twemoji.maxcdn.com/2/svg/1f1f5-1f1fc.svg",
2492
+ "country": "Palau",
2493
+ "code": "pw"
2494
+ }, {
2495
+ "flag": "https://twemoji.maxcdn.com/2/svg/1f1f5-1f1fe.svg",
2496
+ "country": "Paraguay",
2497
+ "code": "py"
2498
+ }, {
2499
+ "flag": "https://twemoji.maxcdn.com/2/svg/1f1f6-1f1e6.svg",
2500
+ "country": "Qatar",
2501
+ "code": "qa"
2502
+ }, {
2503
+ "flag": "https://twemoji.maxcdn.com/2/svg/1f1f7-1f1ea.svg",
2504
+ "country": "Réunion",
2505
+ "code": "re"
2506
+ }, {
2507
+ "flag": "https://twemoji.maxcdn.com/2/svg/1f1f7-1f1f4.svg",
2508
+ "country": "Romania",
2509
+ "code": "ro"
2510
+ }, {
2511
+ "flag": "https://twemoji.maxcdn.com/2/svg/1f1f7-1f1f8.svg",
2512
+ "country": "Serbia",
2513
+ "code": "yu"
2514
+ }, {
2515
+ "flag": "https://twemoji.maxcdn.com/2/svg/1f1f7-1f1fa.svg",
2516
+ "country": "Russia",
2517
+ "code": "ru"
2518
+ }, {
2519
+ "flag": "https://twemoji.maxcdn.com/2/svg/1f1f7-1f1fc.svg",
2520
+ "country": "Rwanda",
2521
+ "code": "rw"
2522
+ }, {
2523
+ "flag": "https://twemoji.maxcdn.com/2/svg/1f1f8-1f1e6.svg",
2524
+ "country": "Saudi Arabia",
2525
+ "code": "sa"
2526
+ }, {
2527
+ "flag": "https://twemoji.maxcdn.com/2/svg/1f1f8-1f1e7.svg",
2528
+ "country": "Solomon Islands",
2529
+ "code": "sb"
2530
+ }, {
2531
+ "flag": "https://twemoji.maxcdn.com/2/svg/1f1f8-1f1e8.svg",
2532
+ "country": "Seychelles",
2533
+ "code": "sc"
2534
+ }, {
2535
+ "flag": "https://twemoji.maxcdn.com/2/svg/1f1f8-1f1e9.svg",
2536
+ "country": "Sudan",
2537
+ "code": "sd"
2538
+ }, {
2539
+ "flag": "https://twemoji.maxcdn.com/2/svg/1f1f8-1f1ea.svg",
2540
+ "country": "Sweden",
2541
+ "code": "se"
2542
+ }, {
2543
+ "flag": "https://twemoji.maxcdn.com/2/svg/1f1f8-1f1ec.svg",
2544
+ "country": "Singapore",
2545
+ "code": "sg"
2546
+ }, {
2547
+ "flag": "https://twemoji.maxcdn.com/2/svg/1f1f8-1f1ed.svg",
2548
+ "country": "St. Helena",
2549
+ "code": "sh"
2550
+ }, {
2551
+ "flag": "https://twemoji.maxcdn.com/2/svg/1f1f8-1f1ee.svg",
2552
+ "country": "Slovenia",
2553
+ "code": "si"
2554
+ }, {
2555
+ "flag": "https://twemoji.maxcdn.com/2/svg/1f1f8-1f1ef.svg",
2556
+ "country": "Svalbard & Jan Mayen",
2557
+ "code": "sj"
2558
+ }, {
2559
+ "flag": "https://twemoji.maxcdn.com/2/svg/1f1f8-1f1f0.svg",
2560
+ "country": "Slovakia",
2561
+ "code": "sk"
2562
+ }, {
2563
+ "flag": "https://twemoji.maxcdn.com/2/svg/1f1f8-1f1f1.svg",
2564
+ "country": "Sierra Leone",
2565
+ "code": "sl"
2566
+ }, {
2567
+ "flag": "https://twemoji.maxcdn.com/2/svg/1f1f8-1f1f2.svg",
2568
+ "country": "San Marino",
2569
+ "code": "sm"
2570
+ }, {
2571
+ "flag": "https://twemoji.maxcdn.com/2/svg/1f1f8-1f1f3.svg",
2572
+ "country": "Senegal",
2573
+ "code": "sn"
2574
+ }, {
2575
+ "flag": "https://twemoji.maxcdn.com/2/svg/1f1f8-1f1f4.svg",
2576
+ "country": "Somalia",
2577
+ "code": "so"
2578
+ }, {
2579
+ "flag": "https://twemoji.maxcdn.com/2/svg/1f1f8-1f1f7.svg",
2580
+ "country": "Suriname",
2581
+ "code": "sr"
2582
+ }, {
2583
+ "flag": "https://twemoji.maxcdn.com/2/svg/1f1f8-1f1f8.svg",
2584
+ "country": "South Sudan",
2585
+ "code": "ss"
2586
+ }, {
2587
+ "flag": "https://twemoji.maxcdn.com/2/svg/1f1f8-1f1f9.svg",
2588
+ "country": "São Tomé & Príncipe",
2589
+ "code": "st"
2590
+ }, {
2591
+ "flag": "https://twemoji.maxcdn.com/2/svg/1f1f8-1f1fb.svg",
2592
+ "country": "El Salvador",
2593
+ "code": "sv"
2594
+ }, {
2595
+ "flag": "https://twemoji.maxcdn.com/2/svg/1f1f8-1f1fd.svg",
2596
+ "country": "Sint Maarten",
2597
+ "code": "sx"
2598
+ }, {
2599
+ "flag": "https://twemoji.maxcdn.com/2/svg/1f1f8-1f1fe.svg",
2600
+ "country": "Syria",
2601
+ "code": "sy"
2602
+ }, {
2603
+ "flag": "https://twemoji.maxcdn.com/2/svg/1f1f8-1f1ff.svg",
2604
+ "country": "Eswatini",
2605
+ "code": "sz"
2606
+ }, {
2607
+ "flag": "https://twemoji.maxcdn.com/2/svg/1f1f9-1f1e6.svg",
2608
+ "country": "Tristan Da Cunha",
2609
+ "code": "sh"
2610
+ }, {
2611
+ "flag": "https://twemoji.maxcdn.com/2/svg/1f1f9-1f1e8.svg",
2612
+ "country": "Turks & Caicos Islands",
2613
+ "code": "tc"
2614
+ }, {
2615
+ "flag": "https://twemoji.maxcdn.com/2/svg/1f1f9-1f1e9.svg",
2616
+ "country": "Chad",
2617
+ "code": "td"
2618
+ }, {
2619
+ "flag": "https://twemoji.maxcdn.com/2/svg/1f1f9-1f1eb.svg",
2620
+ "country": "French Southern Territories",
2621
+ "code": "tf"
2622
+ }, {
2623
+ "flag": "https://twemoji.maxcdn.com/2/svg/1f1f9-1f1ec.svg",
2624
+ "country": "Togo",
2625
+ "code": "tg"
2626
+ }, {
2627
+ "flag": "https://twemoji.maxcdn.com/2/svg/1f1f9-1f1ed.svg",
2628
+ "country": "Thailand",
2629
+ "code": "th"
2630
+ }, {
2631
+ "flag": "https://twemoji.maxcdn.com/2/svg/1f1f9-1f1ef.svg",
2632
+ "country": "Tajikistan",
2633
+ "code": "tj"
2634
+ }, {
2635
+ "flag": "https://twemoji.maxcdn.com/2/svg/1f1f9-1f1f0.svg",
2636
+ "country": "Tokelau",
2637
+ "code": "tk"
2638
+ }, {
2639
+ "flag": "https://twemoji.maxcdn.com/2/svg/1f1f9-1f1f1.svg",
2640
+ "country": "Timor-Leste",
2641
+ "code": "tl"
2642
+ }, {
2643
+ "flag": "https://twemoji.maxcdn.com/2/svg/1f1f9-1f1f2.svg",
2644
+ "country": "Turkmenistan",
2645
+ "code": "tm"
2646
+ }, {
2647
+ "flag": "https://twemoji.maxcdn.com/2/svg/1f1f9-1f1f3.svg",
2648
+ "country": "Tunisia",
2649
+ "code": "tn"
2650
+ }, {
2651
+ "flag": "https://twemoji.maxcdn.com/2/svg/1f1f9-1f1f4.svg",
2652
+ "country": "Tonga",
2653
+ "code": "to"
2654
+ }, {
2655
+ "flag": "https://twemoji.maxcdn.com/2/svg/1f1f9-1f1f7.svg",
2656
+ "country": "Turkey",
2657
+ "code": "tr"
2658
+ }, {
2659
+ "flag": "https://twemoji.maxcdn.com/2/svg/1f1f9-1f1f9.svg",
2660
+ "country": "Trinidad & Tobago",
2661
+ "code": "tt"
2662
+ }, {
2663
+ "flag": "https://twemoji.maxcdn.com/2/svg/1f1f9-1f1fb.svg",
2664
+ "country": "Tuvalu",
2665
+ "code": "tv"
2666
+ }, {
2667
+ "flag": "https://twemoji.maxcdn.com/2/svg/1f1f9-1f1fc.svg",
2668
+ "country": "Taiwan",
2669
+ "code": "tw"
2670
+ }, {
2671
+ "flag": "https://twemoji.maxcdn.com/2/svg/1f1f9-1f1ff.svg",
2672
+ "country": "Tanzania",
2673
+ "code": "tz"
2674
+ }, {
2675
+ "flag": "https://twemoji.maxcdn.com/2/svg/1f1fa-1f1e6.svg",
2676
+ "country": "Ukraine",
2677
+ "code": "ua"
2678
+ }, {
2679
+ "flag": "https://twemoji.maxcdn.com/2/svg/1f1fa-1f1ec.svg",
2680
+ "country": "Uganda",
2681
+ "code": "ug"
2682
+ }, {
2683
+ "flag": "https://twemoji.maxcdn.com/2/svg/1f1fa-1f1f2.svg",
2684
+ "country": "U.S. Outlying Islands",
2685
+ "code": "um"
2686
+ }, {
2687
+ "flag": "https://twemoji.maxcdn.com/2/svg/1f1fa-1f1f3.svg",
2688
+ "country": "United Nations",
2689
+ "code": "un"
2690
+ }, {
2691
+ "flag": "https://twemoji.maxcdn.com/2/svg/1f1fa-1f1f8.svg",
2692
+ "country": "United States",
2693
+ "code": "us"
2694
+ }, {
2695
+ "flag": "https://twemoji.maxcdn.com/2/svg/1f1fa-1f1fe.svg",
2696
+ "country": "Uruguay",
2697
+ "code": "uy"
2698
+ }, {
2699
+ "flag": "https://twemoji.maxcdn.com/2/svg/1f1fa-1f1ff.svg",
2700
+ "country": "Uzbekistan",
2701
+ "code": "uz"
2702
+ }, {
2703
+ "flag": "https://twemoji.maxcdn.com/2/svg/1f1fb-1f1e6.svg",
2704
+ "country": "Vatican City",
2705
+ "code": "va"
2706
+ }, {
2707
+ "flag": "https://twemoji.maxcdn.com/2/svg/1f1fb-1f1e8.svg",
2708
+ "country": "St. Vincent & Grenadines",
2709
+ "code": "vc"
2710
+ }, {
2711
+ "flag": "https://twemoji.maxcdn.com/2/svg/1f1fb-1f1ea.svg",
2712
+ "country": "Venezuela",
2713
+ "code": "ve"
2714
+ }, {
2715
+ "flag": "https://twemoji.maxcdn.com/2/svg/1f1fb-1f1ec.svg",
2716
+ "country": "British Virgin Islands",
2717
+ "code": "vg"
2718
+ }, {
2719
+ "flag": "https://twemoji.maxcdn.com/2/svg/1f1fb-1f1ee.svg",
2720
+ "country": "U.S. Virgin Islands",
2721
+ "code": "vi"
2722
+ }, {
2723
+ "flag": "https://twemoji.maxcdn.com/2/svg/1f1fb-1f1f3.svg",
2724
+ "country": "Vietnam",
2725
+ "code": "vn"
2726
+ }, {
2727
+ "flag": "https://twemoji.maxcdn.com/2/svg/1f1fb-1f1fa.svg",
2728
+ "country": "Vanuatu",
2729
+ "code": "vu"
2730
+ }, {
2731
+ "flag": "https://twemoji.maxcdn.com/2/svg/1f1fc-1f1eb.svg",
2732
+ "country": "Wallis & Futuna",
2733
+ "code": "wf"
2734
+ }, {
2735
+ "flag": "https://twemoji.maxcdn.com/2/svg/1f1fc-1f1f8.svg",
2736
+ "country": "Samoa",
2737
+ "code": "ws"
2738
+ }, {
2739
+ "flag": "https://twemoji.maxcdn.com/2/svg/1f1fd-1f1f0.svg",
2740
+ "country": "Kosovo",
2741
+ "code": "xk"
2742
+ }, {
2743
+ "flag": "https://twemoji.maxcdn.com/2/svg/1f1fe-1f1ea.svg",
2744
+ "country": "Yemen",
2745
+ "code": "ye"
2746
+ }, {
2747
+ "flag": "https://twemoji.maxcdn.com/2/svg/1f1fe-1f1f9.svg",
2748
+ "country": "Mayotte",
2749
+ "code": "yt"
2750
+ }, {
2751
+ "flag": "https://twemoji.maxcdn.com/2/svg/1f1ff-1f1e6.svg",
2752
+ "country": "South Africa",
2753
+ "code": "za"
2754
+ }, {
2755
+ "flag": "https://twemoji.maxcdn.com/2/svg/1f1ff-1f1f2.svg",
2756
+ "country": "Zambia",
2757
+ "code": "zm"
2758
+ }, {
2759
+ "flag": "https://twemoji.maxcdn.com/2/svg/1f1ff-1f1fc.svg",
2760
+ "country": "Zimbabwe",
2761
+ "code": "zw"
2762
+ }, {
2763
+ "flag": "https://twemoji.maxcdn.com/2/svg/1f3f4-e0067-e0062-e0065-e006e-e0067-e007f.svg",
2764
+ "country": "England",
2765
+ "code": "uk"
2766
+ }, {
2767
+ "flag": "https://twemoji.maxcdn.com/2/svg/1f3f4-e0067-e0062-e0073-e0063-e0074-e007f.svg",
2768
+ "country": "Scotland",
2769
+ "code": "uk"
2770
+ }, {
2771
+ "flag": "https://twemoji.maxcdn.com/2/svg/1f3f4-e0067-e0062-e0077-e006c-e0073-e007f.svg",
2772
+ "country": "Wales",
2773
+ "code": "uk"
2774
+ }];
2775
+
2776
+ const useClickOutside = (ref, callback) => {
2777
+ React.useEffect(() => {
2778
+ const element = ref === null || ref === void 0 ? void 0 : ref.current;
2779
+ const listener = evt => {
2780
+ if (!element || element.contains(evt.target)) return;
2781
+ callback(evt);
2782
+ };
2783
+ document.addEventListener('mousedown', listener);
2784
+ document.addEventListener('touchstart', listener);
2785
+ return () => {
2786
+ document.removeEventListener('mousedown', listener);
2787
+ document.removeEventListener('touchstart', listener);
2788
+ };
2789
+ }, [ref, callback]);
2790
+ };
2791
+ const useKeyPress = targetKey => {
2792
+ const [pressed, setPressed] = React.useState(false);
2793
+ React.useEffect(() => {
2794
+ const onKeydown = e => {
2795
+ const keyPressed = e.key;
2796
+ if (keyPressed === targetKey) setPressed(true);
2797
+ };
2798
+ const onKeyup = e => {
2799
+ const keyPressed = e.key;
2800
+ if (keyPressed === targetKey) setPressed(false);
2801
+ };
2802
+ window.addEventListener('keydown', onKeydown);
2803
+ window.addEventListener('keyup', onKeyup);
2804
+ return () => {
2805
+ window.removeEventListener('keydown', onKeydown);
2806
+ window.removeEventListener('keyup', onKeyup);
2807
+ };
2808
+ }, [targetKey]);
2809
+ return pressed;
2810
+ };
2811
+ const CountrySelectStyled = styled__default["default"].div.withConfig({
2812
+ displayName: "country__CountrySelectStyled",
2813
+ componentId: "sc-93yqgk-0"
2814
+ })(["", ";"], ({
2815
+ theme
2816
+ }) => {
2817
+ return styled.css(["div[aria-hidden=\"true\"]{display:none;}[aria-invalid='true']{background:#F9D7D7!important;border:1px solid #ca2121 !important;}[aria-invalid='false']{background:#D5FCE9 !important;border:1px solid #008A48 !important;}.country-select__label{display:block;margin:0 0 8px;}.country-select__wrapper{padding:16px 8px;margin:8px 0 0;}.country-select__btn--toggle{padding:8px;display:flex;align-items:center;justify-content:space-between;cursor:pointer;font-family:inherit;background:#fff;border-radius:3px;border:1px solid #949494;height:40px;width:100%;max-width:100%;padding:8px;.country-select__icons{margin-left:auto;display:flex;align-items:center;}}.country-select__input{margin:0 8px 16px;font-family:inherit;background-color:#fff;border-radius:3px;border:1px solid #949494;height:40px;width:100%;max-width:calc(100% - 16px);padding:8px;}.country-select__options{overflow-y:scroll;height:247px;list-style:none;padding:0;margin:0;}.country-select__option{padding:8px;display:flex;align-items:center;cursor:pointer;background:transparent;border:none;width:100%;svg{margin-right:4px;}}img{margin-left:4px;width:16px;height:16px;}.required{color:", ";}"], theme.colors.red_darker);
2818
+ });
2819
+ const CountrySelect = ({
2820
+ formId,
2821
+ id,
2822
+ field,
2823
+ validations,
2824
+ defaultValue
2825
+ }) => {
2826
+ var _options$filter, _options$filter$;
2827
+ const [options, setOptions] = React.useState(countries);
2828
+ const [selected, setSelected] = React.useState(defaultValue || '');
2829
+ const [toggled, toggleDropdown] = React.useState(false);
2830
+ React.useEffect(() => {
2831
+ if (defaultValue) {
2832
+ var _countries$filter, _countries$filter$;
2833
+ const defaultCountry = ((_countries$filter = countries.filter(({
2834
+ country
2835
+ }) => country === defaultValue)) === null || _countries$filter === void 0 ? void 0 : (_countries$filter$ = _countries$filter[0]) === null || _countries$filter$ === void 0 ? void 0 : _countries$filter$.country) || '';
2836
+ if (defaultCountry) setSelected(defaultCountry);
2837
+ }
2838
+ }, [defaultValue]);
2839
+ const isRequired = validations && validations.required ? true : false;
2840
+ const onChange = value => {
2841
+ if (value && value.length >= 1) {
2842
+ const opts = countries;
2843
+ const optsfiltered = opts.filter(({
2844
+ country
2845
+ }) => country.toLowerCase().includes(value.toLowerCase()));
2846
+ setOptions(optsfiltered);
2847
+ } else setOptions(countries);
2848
+ };
2849
+
2850
+ // Validation
2851
+ const dispatch = reactRedux.useDispatch();
2852
+ const selectFormValidationSent = makeSelectFormValidationSent(formId);
2853
+ const formValidationSent = reactRedux.useSelector(selectFormValidationSent);
2854
+ const [a11yInvalid, setA11yInvalid] = React.useState('');
2855
+ React.useEffect(() => {
2856
+ if (formValidationSent) setA11yInvalid(doA11yValidation(selected, field, true));
2857
+ }, [formValidationSent]);
2858
+ const elOptionRef = React.useRef();
2859
+ const elContainerRef = React.useRef();
2860
+ const close = () => toggleDropdown(false);
2861
+ useClickOutside(elContainerRef, close);
2862
+
2863
+ // Keyboard Navigation
2864
+ const isArrowUpPressed = useKeyPress('ArrowUp');
2865
+ const isArrowDownPressed = useKeyPress('ArrowDown');
2866
+ const isEscapePressed = useKeyPress('Escape');
2867
+ const [initState, setInitState] = React.useState({
2868
+ selectedIndex: -1
2869
+ });
2870
+ const updateState = (type, i) => {
2871
+ const max = options.length - 1;
2872
+ if (type === 'ARROW_UP') {
2873
+ let updatedState = {
2874
+ ...initState
2875
+ };
2876
+ const updatedIndex = updatedState.selectedIndex !== 0 ? updatedState.selectedIndex - 1 : max;
2877
+ updatedState.selectedIndex = updatedIndex;
2878
+ setInitState(updatedState);
2879
+ }
2880
+ if (type === 'ARROW_DOWN') {
2881
+ let updatedState = {
2882
+ ...initState
2883
+ };
2884
+ const updatedIndex = updatedState.selectedIndex !== max ? updatedState.selectedIndex + 1 : 0;
2885
+ updatedState.selectedIndex = updatedIndex;
2886
+ setInitState(updatedState);
2887
+ }
2888
+ if (type === 'SELECT') {
2889
+ let updatedState = {
2890
+ ...initState
2891
+ };
2892
+ updatedState.selectedIndex = i;
2893
+ setInitState(updatedState);
2894
+ }
2895
+ };
2896
+ React.useEffect(() => {
2897
+ if (toggled) {
2898
+ if (isArrowDownPressed) updateState('ARROW_DOWN');
2899
+ if (isArrowUpPressed) updateState('ARROW_UP');
2900
+ if (isEscapePressed) toggleDropdown(false);
2901
+ doFocus();
2902
+ }
2903
+ }, [toggled, isArrowDownPressed, isArrowUpPressed, isEscapePressed]);
2904
+ const doFocus = () => {
2905
+ var _element$;
2906
+ const attr = `[aria-pressed="true"]`;
2907
+ const element = document.querySelectorAll(attr);
2908
+ if (element && element.length >= 1) (_element$ = element[0]) === null || _element$ === void 0 ? void 0 : _element$.focus();
2909
+ };
2910
+ return /*#__PURE__*/React__default["default"].createElement(CountrySelectStyled, {
2911
+ ref: elContainerRef,
2912
+ role: "region",
2913
+ id: "country",
2914
+ "aria-live": "polite"
2915
+ }, /*#__PURE__*/React__default["default"].createElement("span", {
2916
+ className: "country-select__label",
2917
+ role: "label",
2918
+ "aria-label": `Select a country ${isRequired ? 'required' : 'optional'} ${selected}`,
2919
+ htmlFor: "country"
2920
+ }, "Select a country", isRequired ? /*#__PURE__*/React__default["default"].createElement("span", {
2921
+ className: "label__required"
2922
+ }, "(required)") : /*#__PURE__*/React__default["default"].createElement("span", {
2923
+ className: "label__optional"
2924
+ }, "(optional)")), /*#__PURE__*/React__default["default"].createElement("button", {
2925
+ className: "country-select__btn--toggle",
2926
+ "aria-controls": "country",
2927
+ "aria-invalid": a11yInvalid,
2928
+ "aria-expanded": toggled,
2929
+ onClick: e => {
2930
+ e.preventDefault();
2931
+ toggleDropdown(!toggled);
2932
+ }
2933
+ }, selected, selected && /*#__PURE__*/React__default["default"].createElement("img", {
2934
+ src: (_options$filter = options.filter(opt => opt.country === selected)) === null || _options$filter === void 0 ? void 0 : (_options$filter$ = _options$filter[0]) === null || _options$filter$ === void 0 ? void 0 : _options$filter$.flag,
2935
+ alt: ""
2936
+ }), /*#__PURE__*/React__default["default"].createElement("span", {
2937
+ className: "sr-only"
2938
+ }, "Open the Country select searchable dropdown"), /*#__PURE__*/React__default["default"].createElement("div", {
2939
+ className: "country-select__icons"
2940
+ }, toggled ? /*#__PURE__*/React__default["default"].createElement("svg", {
2941
+ xmlns: "http://www.w3.org/2000/svg",
2942
+ width: "24",
2943
+ height: "24",
2944
+ fill: "none",
2945
+ focusable: "false",
2946
+ "aria-hidden": "true",
2947
+ role: "presentation"
2948
+ }, /*#__PURE__*/React__default["default"].createElement("path", {
2949
+ fill: "#333",
2950
+ d: "m7 15 4.293-4.293L15.586 15 17 13.586l-5.707-5.707-5.707 5.707L7 15Z"
2951
+ })) : /*#__PURE__*/React__default["default"].createElement("svg", {
2952
+ xmlns: "http://www.w3.org/2000/svg",
2953
+ width: "24",
2954
+ height: "24",
2955
+ fill: "none",
2956
+ focusable: "false",
2957
+ "aria-hidden": "true",
2958
+ role: "presentation"
2959
+ }, /*#__PURE__*/React__default["default"].createElement("path", {
2960
+ fill: "#333",
2961
+ d: "m16 8-4.293 4.293L7.414 8 6 9.414l5.707 5.707 5.707-5.707L16 8Z"
2962
+ })), a11yInvalid == 'true' && /*#__PURE__*/React__default["default"].createElement("svg", {
2963
+ className: "svg",
2964
+ xmlns: "http://www.w3.org/2000/svg",
2965
+ focusable: "false",
2966
+ "aria-hidden": "true",
2967
+ role: "presentation",
2968
+ width: "16",
2969
+ height: "16",
2970
+ fill: "none"
2971
+ }, /*#__PURE__*/React__default["default"].createElement("path", {
2972
+ fill: "#333",
2973
+ d: "M12.2 3.807a.664.664 0 0 0-.94 0L8 7.06 4.74 3.8a.665.665 0 0 0-.94.94L7.06 8 3.8 11.26a.664.664 0 1 0 .94.94L8 8.94l3.26 3.26a.665.665 0 0 0 .94-.94L8.94 8l3.26-3.26a.668.668 0 0 0 0-.933Z"
2974
+ })), a11yInvalid == 'false' && /*#__PURE__*/React__default["default"].createElement("svg", {
2975
+ className: "svg",
2976
+ xmlns: "http://www.w3.org/2000/svg",
2977
+ focusable: "false",
2978
+ "aria-hidden": "true",
2979
+ role: "presentation",
2980
+ width: "16",
2981
+ height: "16",
2982
+ fill: "none"
2983
+ }, /*#__PURE__*/React__default["default"].createElement("path", {
2984
+ fill: "#333",
2985
+ d: "m2 8 4.418 4.667L14 4.659l-1.246-1.326-6.336 6.692-3.18-3.332L2 8Z"
2986
+ })))), /*#__PURE__*/React__default["default"].createElement("div", {
2987
+ className: "country-select__wrapper",
2988
+ "aria-hidden": !toggled
2989
+ }, /*#__PURE__*/React__default["default"].createElement("label", {
2990
+ htmlFor: "search-country-name",
2991
+ className: "sr-only"
2992
+ }, "Search country name"), /*#__PURE__*/React__default["default"].createElement("input", {
2993
+ id: "search-country-name",
2994
+ className: "country-select__input",
2995
+ placeholder: "Search country name",
2996
+ onChange: e => {
2997
+ e.preventDefault();
2998
+ onChange(e.target.value);
2999
+ }
3000
+ }), /*#__PURE__*/React__default["default"].createElement("ul", {
3001
+ id: "contry",
3002
+ role: "select",
3003
+ name: "country",
3004
+ className: "country-select__options"
3005
+ }, options.map((option, i) => {
3006
+ const isSelected = selected === option.country;
3007
+ return /*#__PURE__*/React__default["default"].createElement("li", {
3008
+ key: i,
3009
+ "aria-hidden": isSelected,
3010
+ "aria-selected": isSelected,
3011
+ role: "option"
3012
+ }, /*#__PURE__*/React__default["default"].createElement(CountryOption, {
3013
+ onClick: e => {
3014
+ e.preventDefault();
3015
+ setSelected(option.country);
3016
+ dispatch(setValue(formId, id, e.target.value));
3017
+ setA11yInvalid(doA11yValidation(e.target.value, field, formValidationSent));
3018
+ },
3019
+ onKeyDown: e => {
3020
+ if (e.key === 'Enter' || e.key === ' ') {
3021
+ setSelected(option.country);
3022
+ dispatch(setValue(formId, id, e.target.value));
3023
+ setA11yInvalid(doA11yValidation(e.target.value, field, formValidationSent));
3024
+ updateState('SELECT', i);
3025
+ e.target.blur();
3026
+ }
3027
+ },
3028
+ ref: elOptionRef,
3029
+ value: option.country,
3030
+ "aria-pressed": i === initState.selectedIndex,
3031
+ tabIndex: 0
3032
+ }, isSelected && /*#__PURE__*/React__default["default"].createElement("svg", {
3033
+ focusable: "false",
3034
+ "aria-hidden": "true",
3035
+ role: "presentation",
3036
+ xmlns: "http://www.w3.org/2000/svg",
3037
+ width: "16px",
3038
+ height: "16px",
3039
+ viewBox: "0 0 24 24",
3040
+ fill: "none"
3041
+ }, /*#__PURE__*/React__default["default"].createElement("path", {
3042
+ fill: "#333",
3043
+ d: "m3 12 6.627 7L21 6.988 19.131 5 9.627 15.038 4.856 10.04 3 12Z"
3044
+ })), option.country, /*#__PURE__*/React__default["default"].createElement("img", {
3045
+ src: option.flag,
3046
+ alt: ""
3047
+ })));
3048
+ }))));
3049
+ };
3050
+ const CountryOption = /*#__PURE__*/React.forwardRef(function SelectItem(props, ref = null) {
3051
+ const {
3052
+ className,
3053
+ children,
3054
+ ...rest
3055
+ } = props;
3056
+ return /*#__PURE__*/React__default["default"].createElement("button", _extends({
3057
+ className: "country-select__option",
3058
+ role: "option",
3059
+ ref: ref
3060
+ }, rest), children);
3061
+ });
3062
+
1832
3063
  const FormComposer = ({
1833
3064
  fields,
1834
3065
  formData,
@@ -1839,13 +3070,11 @@ const FormComposer = ({
1839
3070
  defaultLanguage,
1840
3071
  errors,
1841
3072
  useDefaultTheme,
1842
- entries,
1843
- setCheckboxValue
3073
+ entries
1844
3074
  }) => {
1845
3075
  if (!fields || fields.length < 1) return null;
1846
3076
  return fields.map((field, idx) => {
1847
3077
  if (!field) return null;
1848
-
1849
3078
  switch (field.type) {
1850
3079
  case 'number':
1851
3080
  case 'textfield':
@@ -1867,7 +3096,6 @@ const FormComposer = ({
1867
3096
  useDefaultTheme: useDefaultTheme
1868
3097
  });
1869
3098
  }
1870
-
1871
3099
  case 'textarea':
1872
3100
  {
1873
3101
  return /*#__PURE__*/React__default["default"].createElement(Textarea, {
@@ -1887,7 +3115,6 @@ const FormComposer = ({
1887
3115
  errors: errors
1888
3116
  });
1889
3117
  }
1890
-
1891
3118
  case 'dropdown':
1892
3119
  {
1893
3120
  return /*#__PURE__*/React__default["default"].createElement(Dropdown, {
@@ -1902,7 +3129,6 @@ const FormComposer = ({
1902
3129
  useDefaultTheme: useDefaultTheme
1903
3130
  });
1904
3131
  }
1905
-
1906
3132
  case 'checkbox':
1907
3133
  {
1908
3134
  return /*#__PURE__*/React__default["default"].createElement(Checkbox, {
@@ -1916,11 +3142,9 @@ const FormComposer = ({
1916
3142
  formId: formId,
1917
3143
  defaultValue: formData && formData[field.id] || field.default,
1918
3144
  type: field.dataType === 'boolean' ? 'single' : 'multiple',
1919
- useDefaultTheme: useDefaultTheme,
1920
- setCheckboxValue: setCheckboxValue
3145
+ useDefaultTheme: useDefaultTheme
1921
3146
  });
1922
3147
  }
1923
-
1924
3148
  case 'radio':
1925
3149
  {
1926
3150
  return /*#__PURE__*/React__default["default"].createElement(RadioButton, {
@@ -1935,7 +3159,6 @@ const FormComposer = ({
1935
3159
  useDefaultTheme: useDefaultTheme
1936
3160
  });
1937
3161
  }
1938
-
1939
3162
  case 'entryPicker':
1940
3163
  {
1941
3164
  const type = field.dataType === 'objectArray' ? 'checkbox' : 'radio';
@@ -1952,7 +3175,6 @@ const FormComposer = ({
1952
3175
  formId: formId
1953
3176
  });
1954
3177
  }
1955
-
1956
3178
  case 'date':
1957
3179
  {
1958
3180
  return /*#__PURE__*/React__default["default"].createElement(SingleDate, {
@@ -1966,7 +3188,6 @@ const FormComposer = ({
1966
3188
  useDefaultTheme: useDefaultTheme
1967
3189
  });
1968
3190
  }
1969
-
1970
3191
  case 'dateRange':
1971
3192
  {
1972
3193
  return /*#__PURE__*/React__default["default"].createElement(DateRange, {
@@ -1979,7 +3200,6 @@ const FormComposer = ({
1979
3200
  useDefaultTheme: useDefaultTheme
1980
3201
  });
1981
3202
  }
1982
-
1983
3203
  case 'hidden':
1984
3204
  {
1985
3205
  return /*#__PURE__*/React__default["default"].createElement(HiddenField, {
@@ -1992,10 +3212,21 @@ const FormComposer = ({
1992
3212
  placeholder: field.editor
1993
3213
  });
1994
3214
  }
3215
+ case 'country':
3216
+ {
3217
+ var _field$default;
3218
+ return /*#__PURE__*/React__default["default"].createElement(CountrySelect, {
3219
+ key: `${field.id}-${idx}`,
3220
+ formId: formId,
3221
+ field: field,
3222
+ id: field.id,
3223
+ validations: field.validations,
3224
+ defaultValue: field === null || field === void 0 ? void 0 : (_field$default = field.default) === null || _field$default === void 0 ? void 0 : _field$default[defaultLanguage]
3225
+ });
3226
+ }
1995
3227
  }
1996
3228
  });
1997
3229
  };
1998
-
1999
3230
  FormComposer.propTypes = {
2000
3231
  fields: PropTypes__default["default"].oneOfType([PropTypes__default["default"].array, PropTypes__default["default"].object]),
2001
3232
  formData: PropTypes__default["default"].object,
@@ -2006,8 +3237,7 @@ FormComposer.propTypes = {
2006
3237
  setDateRangeValues: PropTypes__default["default"].func,
2007
3238
  defaultLanguage: PropTypes__default["default"].string,
2008
3239
  errors: PropTypes__default["default"].array,
2009
- useDefaultTheme: PropTypes__default["default"].bool,
2010
- setCheckboxValue: PropTypes__default["default"].func
3240
+ useDefaultTheme: PropTypes__default["default"].bool
2011
3241
  };
2012
3242
 
2013
3243
  const Loader = ({
@@ -2068,7 +3298,7 @@ const Button = ({
2068
3298
  useDefaultTheme
2069
3299
  }) => {
2070
3300
  return /*#__PURE__*/React__default["default"].createElement(ButtonStyled, {
2071
- className: `${className ? className : ''} btnSubmit`,
3301
+ className: className,
2072
3302
  type: type,
2073
3303
  onClick: () => action(),
2074
3304
  disabled: loading,
@@ -2116,23 +3346,13 @@ const Form = ({
2116
3346
  onCustomSubmit
2117
3347
  }) => {
2118
3348
  const dispatch = reactRedux.useDispatch();
2119
-
2120
3349
  const _setFormId = formId => dispatch(setFormId(formId));
2121
-
2122
3350
  const _setValue = (formId, id, value) => dispatch(setValue(formId, id, value));
2123
-
2124
- const _setCheckboxValue = (formId, id, value, isChecked) => dispatch(setCheckboxValue(formId, id, value, isChecked));
2125
-
2126
3351
  const _setDateRangeValues = (formId, id, dateType, value) => dispatch(setDateRangeValues(formId, id, dateType, value));
2127
-
2128
3352
  const _onValidateField = (formId, id, value) => dispatch(onValidateField(formId, id, value));
2129
-
2130
3353
  const _doTogglePageForward = (formId, pageIndex) => dispatch(doTogglePageForward(formId, pageIndex));
2131
-
2132
3354
  const _doTogglePageBack = (formId, pageIndex) => dispatch(doTogglePageBack(formId, pageIndex));
2133
-
2134
3355
  const _onSubmit = formId => dispatch(onSubmit(formId));
2135
-
2136
3356
  React.useEffect(() => {
2137
3357
  if (formId) _setFormId(formId);
2138
3358
  }, [formId]);
@@ -2144,7 +3364,6 @@ const Form = ({
2144
3364
  const selectFormFieldErrors = makeSelectFormFieldErrors(formId);
2145
3365
  const selectFormEntries = makeSelectFormEntries(formId);
2146
3366
  const selectFormPostData = makeSelectFormPostData(formId);
2147
- const selectFormValidationSent = makeSelectFormValidationSent(formId);
2148
3367
  const status = reactRedux.useSelector(selectFormStatus);
2149
3368
  const fields = reactRedux.useSelector(selectFormFields);
2150
3369
  const pagingInfo = reactRedux.useSelector(selectPagingInfo);
@@ -2153,8 +3372,6 @@ const Form = ({
2153
3372
  const errors = reactRedux.useSelector(selectFormFieldErrors);
2154
3373
  const entries = reactRedux.useSelector(selectFormEntries);
2155
3374
  const formData = reactRedux.useSelector(selectFormPostData);
2156
- const validate = reactRedux.useSelector(selectFormValidationSent);
2157
-
2158
3375
  if (pagingInfo && pagingInfo.pageCount > 1) {
2159
3376
  const isLastPage = pagingInfo.pageCount == pagingInfo.pageIndex + 1;
2160
3377
  return /*#__PURE__*/React__default["default"].createElement(ThemeProvider, {
@@ -2163,12 +3380,7 @@ const Form = ({
2163
3380
  className: className,
2164
3381
  id: formId,
2165
3382
  useDefaultTheme: useDefaultTheme
2166
- }, !(status !== null && status !== void 0 && status.hasSuccess) && !(status !== null && status !== void 0 && status.isLoading) && /*#__PURE__*/React__default["default"].createElement(React__default["default"].Fragment, null, pagingInfo.pageIndex > 0 && /*#__PURE__*/React__default["default"].createElement(Button, {
2167
- type: "button",
2168
- text: "Go Back",
2169
- action: () => _doTogglePageBack(formId, pagingInfo.pageIndex - 1),
2170
- useDefaultTheme: useDefaultTheme
2171
- }), /*#__PURE__*/React__default["default"].createElement(FormComposer, {
3383
+ }, !(status !== null && status !== void 0 && status.hasSuccess) && !(status !== null && status !== void 0 && status.isLoading) && /*#__PURE__*/React__default["default"].createElement(React__default["default"].Fragment, null, /*#__PURE__*/React__default["default"].createElement(FormComposer, {
2172
3384
  fields: fields,
2173
3385
  formData: formData,
2174
3386
  formId: formId,
@@ -2179,20 +3391,26 @@ const Form = ({
2179
3391
  pagingInfo: pagingInfo,
2180
3392
  useDefaultTheme: useDefaultTheme,
2181
3393
  entries: entries,
2182
- setDateRangeValues: _setDateRangeValues,
2183
- setCheckboxValue: _setCheckboxValue
3394
+ setDateRangeValues: _setDateRangeValues
3395
+ }), pagingInfo.pageIndex > 0 && /*#__PURE__*/React__default["default"].createElement(Button, {
3396
+ className: "form__btn--prev",
3397
+ type: "button",
3398
+ text: "Go Back",
3399
+ action: () => _doTogglePageBack(formId, pagingInfo.pageIndex - 1),
3400
+ useDefaultTheme: useDefaultTheme
2184
3401
  }), !isLastPage && /*#__PURE__*/React__default["default"].createElement(Button, {
3402
+ className: "form__btn--next",
2185
3403
  type: "button",
2186
3404
  text: "Next",
2187
3405
  action: () => _doTogglePageForward(formId, pagingInfo.pageIndex + 1),
2188
3406
  useDefaultTheme: useDefaultTheme
2189
3407
  }), isLastPage && /*#__PURE__*/React__default["default"].createElement(Button, {
3408
+ className: "form__btn--submit",
2190
3409
  text: (settings === null || settings === void 0 ? void 0 : settings.submitButtonText) || "Submit",
2191
3410
  type: "button",
2192
- loading: status === null || status === void 0 ? void 0 : status.isLoading,
3411
+ loading: status === null || status === void 0 ? void 0 : status.isSubmitting,
2193
3412
  action: () => {
2194
3413
  _onSubmit(formId);
2195
-
2196
3414
  if (onCustomSubmit) onCustomSubmit();
2197
3415
  },
2198
3416
  useDefaultTheme: useDefaultTheme
@@ -2203,7 +3421,7 @@ const Form = ({
2203
3421
  color: "#333"
2204
3422
  }), (status === null || status === void 0 ? void 0 : status.hasSuccess) && (status === null || status === void 0 ? void 0 : status.messages.success) && /*#__PURE__*/React__default["default"].createElement("p", {
2205
3423
  className: "success-message"
2206
- }, status.messages.success), (errors === null || errors === void 0 ? void 0 : errors.length) >= 1 && validate && /*#__PURE__*/React__default["default"].createElement("div", {
3424
+ }, status.messages.success), (errors === null || errors === void 0 ? void 0 : errors.length) >= 1 && /*#__PURE__*/React__default["default"].createElement("div", {
2207
3425
  className: "form__errors",
2208
3426
  role: "alert"
2209
3427
  }, errors === null || errors === void 0 ? void 0 : errors.map(({
@@ -2231,15 +3449,14 @@ const Form = ({
2231
3449
  defaultLanguage: defaultLanguage,
2232
3450
  errors: errors,
2233
3451
  useDefaultTheme: useDefaultTheme,
2234
- entries: entries,
2235
- setCheckboxValue: _setCheckboxValue
3452
+ entries: entries
2236
3453
  }), /*#__PURE__*/React__default["default"].createElement(Button, {
3454
+ className: "form__btn--submit",
2237
3455
  loading: status === null || status === void 0 ? void 0 : status.isSubmitting,
2238
3456
  text: (settings === null || settings === void 0 ? void 0 : settings.submitButtonText) || "Submit",
2239
3457
  type: "button",
2240
3458
  action: () => {
2241
3459
  _onSubmit(formId);
2242
-
2243
3460
  if (onCustomSubmit) onCustomSubmit();
2244
3461
  },
2245
3462
  useDefaultTheme: useDefaultTheme
@@ -2250,7 +3467,7 @@ const Form = ({
2250
3467
  color: "#333"
2251
3468
  }), (status === null || status === void 0 ? void 0 : status.hasSuccess) && (status === null || status === void 0 ? void 0 : status.messages.success) && /*#__PURE__*/React__default["default"].createElement("p", {
2252
3469
  className: "success-message"
2253
- }, status.messages.success), (errors === null || errors === void 0 ? void 0 : errors.length) >= 1 && validate && /*#__PURE__*/React__default["default"].createElement("div", {
3470
+ }, status.messages.success), (errors === null || errors === void 0 ? void 0 : errors.length) >= 1 && /*#__PURE__*/React__default["default"].createElement("div", {
2254
3471
  className: "form__errors",
2255
3472
  role: "alert"
2256
3473
  }, errors === null || errors === void 0 ? void 0 : errors.map(({
@@ -2264,7 +3481,6 @@ const Form = ({
2264
3481
  }))));
2265
3482
  }
2266
3483
  };
2267
-
2268
3484
  Form.propTypes = {
2269
3485
  className: PropTypes__default["default"].string,
2270
3486
  formId: PropTypes__default["default"].string,