@zengenti/contensis-react-base 3.0.0-beta.8 → 3.0.0-beta.80

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 (166) hide show
  1. package/README.md +1 -1
  2. package/cjs/{App-e3200f18.js → App-5a34ea98.js} +228 -181
  3. package/cjs/App-5a34ea98.js.map +1 -0
  4. package/cjs/{RouteLoader-df3de0cb.js → RouteLoader-2675e1c9.js} +31 -23
  5. package/cjs/RouteLoader-2675e1c9.js.map +1 -0
  6. package/cjs/{ToJs-697ace9f.js → ToJs-a9a8522b.js} +39 -34
  7. package/cjs/ToJs-a9a8522b.js.map +1 -0
  8. package/cjs/{actions-a24bf46e.js → actions-8dc9e8de.js} +5 -4
  9. package/cjs/actions-8dc9e8de.js.map +1 -0
  10. package/cjs/client.js +22 -44
  11. package/cjs/client.js.map +1 -1
  12. package/cjs/contensis-react-base.js +3955 -135
  13. package/cjs/contensis-react-base.js.map +1 -1
  14. package/cjs/forms.js +547 -580
  15. package/cjs/forms.js.map +1 -1
  16. package/cjs/{fromJSLeaveImmer-c00d597f.js → fromJSLeaveImmer-e74c673c.js} +2 -16
  17. package/cjs/fromJSLeaveImmer-e74c673c.js.map +1 -0
  18. package/cjs/{login-bc55ee33.js → login-6b9de6a1.js} +92 -55
  19. package/cjs/login-6b9de6a1.js.map +1 -0
  20. package/cjs/{reducers-fde41d6b.js → reducers-3a4f8971.js} +26 -25
  21. package/cjs/reducers-3a4f8971.js.map +1 -0
  22. package/cjs/redux.js +6 -5
  23. package/cjs/redux.js.map +1 -1
  24. package/cjs/routing.js +5 -4
  25. package/cjs/routing.js.map +1 -1
  26. package/cjs/sagas-594b5ecd.js +2090 -0
  27. package/cjs/sagas-594b5ecd.js.map +1 -0
  28. package/cjs/search.js +296 -1915
  29. package/cjs/search.js.map +1 -1
  30. package/cjs/{selectors-0ec95076.js → selectors-656da4b7.js} +8 -3
  31. package/cjs/selectors-656da4b7.js.map +1 -0
  32. package/cjs/setCachingHeaders-ee619bdf.js +12 -0
  33. package/cjs/setCachingHeaders-ee619bdf.js.map +1 -0
  34. package/cjs/user.js +21 -12
  35. package/cjs/user.js.map +1 -1
  36. package/cjs/util.js +17 -17
  37. package/cjs/util.js.map +1 -1
  38. package/cjs/{version-4f0f5fa6.js → version-330551f5.js} +34 -22
  39. package/cjs/version-330551f5.js.map +1 -0
  40. package/cjs/{version-be0c7b7a.js → version-eba6d09b.js} +2 -2
  41. package/{esm/version-ad2ec52c.js.map → cjs/version-eba6d09b.js.map} +1 -1
  42. package/esm/{App-f9e7d03b.js → App-a973f962.js} +228 -182
  43. package/esm/App-a973f962.js.map +1 -0
  44. package/esm/{RouteLoader-027215f2.js → RouteLoader-f607a134.js} +31 -23
  45. package/esm/RouteLoader-f607a134.js.map +1 -0
  46. package/esm/{ToJs-46761960.js → ToJs-4e02a04d.js} +38 -32
  47. package/esm/ToJs-4e02a04d.js.map +1 -0
  48. package/esm/{actions-b949ef5c.js → actions-180948dd.js} +5 -4
  49. package/esm/actions-180948dd.js.map +1 -0
  50. package/esm/client.js +24 -27
  51. package/esm/client.js.map +1 -1
  52. package/esm/contensis-react-base.js +3953 -134
  53. package/esm/contensis-react-base.js.map +1 -1
  54. package/esm/forms.js +547 -583
  55. package/esm/forms.js.map +1 -1
  56. package/esm/{fromJSLeaveImmer-392af4e3.js → fromJSLeaveImmer-0114ffcf.js} +2 -16
  57. package/esm/fromJSLeaveImmer-0114ffcf.js.map +1 -0
  58. package/esm/{login-6eab4c94.js → login-508cac0f.js} +92 -55
  59. package/esm/login-508cac0f.js.map +1 -0
  60. package/esm/{reducers-d6c0edb1.js → reducers-8e5d6232.js} +26 -25
  61. package/esm/reducers-8e5d6232.js.map +1 -0
  62. package/esm/redux.js +8 -7
  63. package/esm/redux.js.map +1 -1
  64. package/esm/routing.js +5 -4
  65. package/esm/routing.js.map +1 -1
  66. package/esm/sagas-1f2b2aa0.js +2000 -0
  67. package/esm/sagas-1f2b2aa0.js.map +1 -0
  68. package/esm/search.js +252 -1856
  69. package/esm/search.js.map +1 -1
  70. package/esm/{selectors-8fca7fb2.js → selectors-a5e5835b.js} +9 -6
  71. package/esm/selectors-a5e5835b.js.map +1 -0
  72. package/esm/setCachingHeaders-d49060e1.js +10 -0
  73. package/esm/setCachingHeaders-d49060e1.js.map +1 -0
  74. package/esm/user.js +23 -14
  75. package/esm/user.js.map +1 -1
  76. package/esm/util.js +17 -17
  77. package/esm/util.js.map +1 -1
  78. package/esm/{version-ad2ec52c.js → version-2485e2fb.js} +2 -2
  79. package/{cjs/version-be0c7b7a.js.map → esm/version-2485e2fb.js.map} +1 -1
  80. package/esm/{version-612d9ef0.js → version-c776a92b.js} +33 -22
  81. package/esm/version-c776a92b.js.map +1 -0
  82. package/models/app/pages/VersionInfo/components/VersionInfo.d.ts +1 -1
  83. package/models/forms/index.d.ts +3 -1
  84. package/models/index.d.ts +1 -0
  85. package/models/redux/appstate.d.ts +5 -10
  86. package/models/redux/sagas/navigation.d.ts +1 -1
  87. package/models/redux/selectors/navigation.d.ts +2 -1
  88. package/models/routing/components/RouteLoader.d.ts +2 -19
  89. package/models/routing/redux/actions.d.ts +1 -1
  90. package/models/routing/redux/selectors.d.ts +1 -1
  91. package/models/routing/routes.d.ts +9 -3
  92. package/models/routing/util/expressions.d.ts +3 -2
  93. package/models/routing/util/queries.d.ts +1 -1
  94. package/models/search/containers/withListing.d.ts +1 -1
  95. package/models/search/containers/withSearch.d.ts +1 -1
  96. package/models/search/hooks/useFacets.hook.d.ts +3 -0
  97. package/models/search/hooks/useListing.hook.d.ts +3 -0
  98. package/models/search/hooks/useMinilist.hook.d.ts +2 -9
  99. package/models/search/index.d.ts +6 -2
  100. package/models/search/models/Queries.d.ts +8 -5
  101. package/models/search/models/Search.d.ts +60 -28
  102. package/models/search/models/SearchActions.d.ts +9 -5
  103. package/models/search/models/SearchProps.d.ts +52 -7
  104. package/models/search/models/SearchState.d.ts +5 -1
  105. package/models/search/models/index.d.ts +3 -1
  106. package/models/search/redux/actions.d.ts +5 -2
  107. package/models/search/redux/reducers.d.ts +230 -314
  108. package/models/search/redux/sagas.d.ts +11 -7
  109. package/models/search/redux/selectors.d.ts +21 -24
  110. package/models/search/redux/util.d.ts +1 -0
  111. package/models/search/search/ContensisDeliveryApi.d.ts +1 -0
  112. package/models/search/search/expressions.d.ts +5 -8
  113. package/models/search/{redux → search}/queries.d.ts +0 -0
  114. package/models/search/search/util.d.ts +14 -0
  115. package/models/search/transformations/entry-to-filteritem.mapper.d.ts +2 -1
  116. package/models/search/transformations/filter-to-filterexpression.mapper.d.ts +6 -0
  117. package/models/search/transformations/filters-to-filterexpressions.mapper.d.ts +3 -0
  118. package/models/search/transformations/index.d.ts +3 -0
  119. package/models/search/transformations/queryParams-to-customapi.mapper.d.ts +3 -0
  120. package/models/search/transformations/state-to-searchuri.d.ts +2 -13
  121. package/models/server/features/linkdepth-api/LinkDepthSearchService.d.ts +24 -0
  122. package/models/server/features/linkdepth-api/QueryLevelResults.d.ts +50 -0
  123. package/models/server/features/linkdepth-api/api.d.ts +12 -0
  124. package/models/server/features/linkdepth-api/events-api.config.d.ts +37 -0
  125. package/models/server/features/linkdepth-api/search.d.ts +31 -0
  126. package/models/server/features/linkdepth-api/util.d.ts +11 -0
  127. package/models/server/middleware/bundleManipulation.d.ts +2 -1
  128. package/models/server/util/bundles.d.ts +17 -21
  129. package/models/server/util/getVersionInfo.d.ts +1 -0
  130. package/models/server/util/headers.d.ts +3 -2
  131. package/models/user/components/Login.d.ts +1 -2
  132. package/models/user/components/LoginForm.d.ts +1 -2
  133. package/models/user/hocs/withLogin.d.ts +4 -2
  134. package/models/user/hocs/withRegistration.d.ts +2 -0
  135. package/models/user/hooks/useLogin.d.ts +5 -3
  136. package/models/user/redux/reducers.d.ts +4 -5
  137. package/models/user/redux/sagas/login.d.ts +11 -8
  138. package/models/user/redux/selectors.d.ts +12 -6
  139. package/models/user/util/LoginHelper.class.d.ts +4 -3
  140. package/models/util/ContensisDeliveryApi.d.ts +4 -4
  141. package/models/util/json-mapper.d.ts +9 -3
  142. package/models/util/merge.d.ts +1 -0
  143. package/package.json +60 -55
  144. package/CHANGELOG.md +0 -293
  145. package/cjs/App-e3200f18.js.map +0 -1
  146. package/cjs/RouteLoader-df3de0cb.js.map +0 -1
  147. package/cjs/ToJs-697ace9f.js.map +0 -1
  148. package/cjs/actions-a24bf46e.js.map +0 -1
  149. package/cjs/fromJSLeaveImmer-c00d597f.js.map +0 -1
  150. package/cjs/login-bc55ee33.js.map +0 -1
  151. package/cjs/reducers-fde41d6b.js.map +0 -1
  152. package/cjs/selectors-0ec95076.js.map +0 -1
  153. package/cjs/version-4f0f5fa6.js.map +0 -1
  154. package/esm/App-f9e7d03b.js.map +0 -1
  155. package/esm/RouteLoader-027215f2.js.map +0 -1
  156. package/esm/ToJs-46761960.js.map +0 -1
  157. package/esm/actions-b949ef5c.js.map +0 -1
  158. package/esm/fromJSLeaveImmer-392af4e3.js.map +0 -1
  159. package/esm/login-6eab4c94.js.map +0 -1
  160. package/esm/reducers-d6c0edb1.js.map +0 -1
  161. package/esm/selectors-8fca7fb2.js.map +0 -1
  162. package/esm/version-612d9ef0.js.map +0 -1
  163. package/models/search/transformations/filters-to-filterexpression.d.ts +0 -1
  164. package/models/search/transformations/filters-to-filterexpression.mapper.d.ts +0 -2
  165. package/models/server/features/caching/cacheHashing.d.ts +0 -1
  166. package/package-lock.json +0 -14093
package/cjs/forms.js CHANGED
@@ -2,9 +2,10 @@
2
2
 
3
3
  Object.defineProperty(exports, '__esModule', { value: true });
4
4
 
5
- var immutable = require('immutable');
5
+ var immer = require('immer');
6
6
  var effects = require('@redux-saga/core/effects');
7
7
  var reselect = require('reselect');
8
+ var routing = require('@zengenti/contensis-react-base/routing');
8
9
  var React = require('react');
9
10
  var PropTypes = require('prop-types');
10
11
  var reactRedux = require('react-redux');
@@ -37,37 +38,23 @@ const SET_FORM_ENTRIES = `${ACTION_PREFIX}SET_FORM_ENTRIES`;
37
38
  const SET_SUCCESS_MESSAGE = `${ACTION_PREFIX}SET_SUCCESS_MESSAGE`;
38
39
  const SET_CHECKBOX_VALUE = `${ACTION_PREFIX}SET_CHECKBOX_VALUE`;
39
40
 
40
- const MakeFieldType = field => {
41
- if (!field) return null;
42
-
43
- if (field.dataType === 'string' && field.editor && field.editor.id === 'multiline') {
44
- return 'textarea';
45
- } else if (field.dataType === 'string' && field.editor && field.editor.id === 'list-dropdown') {
46
- return 'dropdown';
47
- } else if (field.editor && field.editor.properties && field.editor.properties.readOnly || field.groupId && field.groupId === 'private') {
48
- return 'hidden';
49
- } else if (field.dataType === 'stringArray' || field.dataType === 'boolean') {
50
- return 'checkbox';
51
- } else if (field.dataType === 'string' && field.validations && field.validations.allowedValues) {
52
- return 'radio';
53
- } else if (field.dataType === 'integer') {
54
- return 'number';
55
- } else if (field.dataType === 'dateTime') {
56
- return 'date';
57
- } else if (field.dataFormat === 'daterange') {
58
- return 'dateRange';
59
- } else if (field.dataFormat === 'entry') {
60
- return 'entryPicker';
61
- } else {
62
- return 'textfield';
63
- }
64
- };
65
-
66
41
  const initialSettings = {
67
42
  recaptcha: {
68
43
  siteKey: null
69
44
  }
70
45
  };
46
+ const initialStatus = {
47
+ isLoading: true,
48
+ isSubmitting: false,
49
+ hasSuccess: false,
50
+ successMessage: null,
51
+ hasError: false
52
+ };
53
+ const initialPagingInfo = {
54
+ pageIndex: 0,
55
+ pageCount: 0,
56
+ currentPageId: null
57
+ };
71
58
  const initialFormData = {
72
59
  formId: null,
73
60
  data: {},
@@ -76,129 +63,278 @@ const initialFormData = {
76
63
  fieldErrors: [],
77
64
  groups: [],
78
65
  defaultLanguage: null,
79
- pagingInfo: {
80
- pageIndex: 0,
81
- pageCount: 0,
82
- currentPageId: null
83
- },
84
- status: {
85
- isLoading: false,
86
- isSubmitting: false,
87
- hasSuccess: false,
88
- successMessage: null,
89
- hasError: false
90
- }
66
+ pagingInfo: initialPagingInfo,
67
+ status: initialStatus,
68
+ settings: {}
91
69
  };
92
- let initialState = immutable.Map({
93
- settings: immutable.fromJS(initialSettings)
94
- });
95
- var reducer = ((state = initialState, action) => {
70
+ let initialState = {
71
+ settings: initialSettings
72
+ };
73
+ var reducer = immer.produce((state, action) => {
96
74
  switch (action.type) {
97
75
  case SET_FORM_ID:
98
- return state.setIn([action.formId], initialFormData);
76
+ {
77
+ const {
78
+ formId
79
+ } = action || {};
80
+ state[formId] = initialFormData;
81
+ return;
82
+ }
99
83
 
100
84
  case SET_FORM_DATA:
101
85
  {
102
- const fields = action.fields; //const fObj = {};
103
-
104
- fields.map(field => {
105
- field.type = MakeFieldType(field);
106
- });
107
- return state.setIn([immutable.fromJS(action.formId), 'fields'], fields).setIn([immutable.fromJS(action.formId), 'formId'], action.formId).setIn([immutable.fromJS(action.formId), 'groups'], action.groups).setIn([immutable.fromJS(action.formId), 'defaultLanguage'], action.defaultLanguage).setIn([immutable.fromJS(action.formId), 'status', 'isSubmitting'], false).setIn([immutable.fromJS(action.formId), 'status', 'hasSuccess'], false).setIn([immutable.fromJS(action.formId), 'status', 'hasError'], false);
86
+ const {
87
+ fields,
88
+ formId,
89
+ groups,
90
+ defaultLanguage,
91
+ settings
92
+ } = action || {};
93
+ state[formId].fields = fields;
94
+ state[formId].formId = formId;
95
+ state[formId].groups = groups;
96
+ state[formId].defaultLanguage = defaultLanguage;
97
+ state[formId].status.isSubmitting = false;
98
+ state[formId].status.isLoading = false;
99
+ state[formId].status.hasSuccess = false;
100
+ state[formId].status.hasError = false;
101
+ state[formId].settings = settings;
102
+ return;
108
103
  }
109
104
 
110
105
  case SET_CURRENT_PAGE:
111
- return state.setIn([action.formId, 'pagingInfo', 'currentPageId'], action.pageId).setIn([action.formId, 'pagingInfo', 'pageIndex'], action.pageIndex).setIn([action.formId, 'pagingInfo', 'pageCount'], action.pageCount);
106
+ {
107
+ const {
108
+ formId,
109
+ pageId,
110
+ pageIndex,
111
+ pageCount
112
+ } = action || {};
113
+ state[formId].pagingInfo.currentPageId = pageId;
114
+ state[formId].pagingInfo.pageIndex = pageIndex;
115
+ state[formId].pagingInfo.pageCount = pageCount;
116
+ return;
117
+ }
112
118
 
113
119
  case SET_FIELD_VALUE:
114
- return state.setIn([action.formId, 'data', action.id], action.value);
120
+ {
121
+ const {
122
+ formId,
123
+ id,
124
+ value
125
+ } = action || {};
126
+ state[formId].data[id] = value;
127
+ return;
128
+ }
115
129
 
116
130
  case SET_DEFAULT_FIELD_VALUE:
117
- return state.setIn([action.formId, 'data'], action.value);
131
+ {
132
+ const {
133
+ formId,
134
+ value
135
+ } = action || {};
136
+ state[formId].data = value;
137
+ return;
138
+ }
118
139
 
119
140
  case SET_CHECKBOX_VALUE:
120
141
  {
121
- const prevState = state.getIn([action.formId, 'data', action.id]);
122
- let values = prevState ? prevState : [];
123
-
124
- if (action.isChecked) {
125
- values.push(action.value);
126
- } else {
127
- values = values.filter(value => value !== action.value);
128
- }
129
-
130
- return state.setIn([action.formId, 'data', action.id], values);
142
+ const {
143
+ formId,
144
+ id,
145
+ value,
146
+ isChecked
147
+ } = action || {};
148
+ let values = state[formId].data[id] || [];
149
+ if (isChecked) state[formId].data[id] = { ...values,
150
+ value
151
+ };else state[formId].data[id] = values.filter(v => v !== value);
152
+ return;
131
153
  }
132
154
 
133
155
  case SET_DATE_RANGE_VALUES:
134
- return state.setIn([action.formId, 'data', action.id, action.dateType], action.value);
156
+ {
157
+ const {
158
+ formId,
159
+ id,
160
+ value,
161
+ dateType
162
+ } = action || {};
163
+ state[formId].data[id][dateType] = value;
164
+ return;
165
+ }
135
166
 
136
167
  case SET_FIELD_ERROR:
137
- return state.setIn([action.formId, 'fieldErrors'], action.value);
168
+ {
169
+ const {
170
+ formId,
171
+ value
172
+ } = action || {};
173
+ state[formId].fieldErrors = value;
174
+ return;
175
+ }
138
176
 
139
177
  case SET_SUBMITTING_FORM:
140
- return state.setIn([immutable.fromJS(action.formId), 'status', 'isSubmitting'], action.isSubmitting);
178
+ {
179
+ const {
180
+ formId,
181
+ isSubmitting
182
+ } = action || {};
183
+ state[formId].status.isSubmitting = isSubmitting;
184
+ return;
185
+ }
141
186
 
142
187
  case SUBMIT_FORM_SUCCESS:
143
- return state.setIn([immutable.fromJS(action.formId), 'status', 'hasError'], false).setIn([immutable.fromJS(action.formId), 'status', 'isSubmitting'], false).setIn([immutable.fromJS(action.formId), 'status', 'hasSuccess'], true);
188
+ {
189
+ const {
190
+ formId
191
+ } = action || {};
192
+ state[formId].status.hasError = false;
193
+ state[formId].status.isSubmitting = false;
194
+ state[formId].status.hasSuccess = true;
195
+ return;
196
+ }
144
197
 
145
198
  case SET_SUCCESS_MESSAGE:
146
- return state.setIn([immutable.fromJS(action.formId), 'status', 'successMessage'], action.message);
199
+ {
200
+ const {
201
+ formId,
202
+ message
203
+ } = action || {};
204
+ state[formId].status.successMessage = message;
205
+ return;
206
+ }
147
207
 
148
208
  case SUBMIT_FORM_ERROR:
149
- return state.setIn([immutable.fromJS(action.formId), 'status', 'hasError'], true).setIn([immutable.fromJS(action.formId), 'status', 'isSubmitting'], false);
209
+ {
210
+ const {
211
+ formId
212
+ } = action || {};
213
+ state[formId].status.hasError = true;
214
+ state[formId].status.isSubmitting = false;
215
+ return;
216
+ }
150
217
 
151
218
  case SET_FORM_ENTRIES:
152
219
  {
153
- const entries = action.entries;
154
- const eObj = {};
220
+ const {
221
+ formId,
222
+ entries
223
+ } = action || {};
224
+ const entryObject = {};
155
225
  entries.map(entry => {
156
226
  if (!entry) return null;
157
- eObj[entry.id] = entry.entries;
158
- return eObj;
227
+ entryObject[entry.id] = entry.entries;
228
+ return entryObject;
159
229
  });
160
- return state.setIn([action.formId, 'entries'], eObj);
230
+ state[formId].entries = entryObject;
231
+ return;
161
232
  }
162
233
 
163
234
  case SET_ERROR:
164
- return state.setIn([immutable.fromJS(action.formId), 'status', 'hasError'], true).setIn([immutable.fromJS(action.formId), 'status', 'isSubmitting'], false);
235
+ {
236
+ const {
237
+ formId
238
+ } = action || {};
239
+ state[formId].status.hasError = true;
240
+ state[formId].status.isSubmitting = false;
241
+ return;
242
+ }
165
243
 
166
244
  default:
167
245
  return state;
168
246
  }
247
+ }, initialState);
248
+
249
+ const selectForms = state => state.forms;
250
+ const makeSelectPagedFields = formId => reselect.createSelector([selectForms], form => {
251
+ if (form[formId]) {
252
+ const pagingInfo = form[formId].pagingInfo;
253
+ const fields = form[formId].fields;
254
+ 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;
255
+ }
169
256
  });
257
+ const makeSelectFormStatus = formId => reselect.createSelector(selectForms, form => {
258
+ var _form$formId;
170
259
 
171
- const selectForms = state => state.getIn(['forms']);
172
- const makeSelectIsLoading = formId => reselect.createSelector(selectForms, forms => forms.getIn([formId, 'status', 'isLoading']));
173
- const makeSelectFormFields = formId => reselect.createSelector(selectForms, forms => forms.getIn([formId, 'fields']));
174
- const makeSelectDefaultLang = formId => reselect.createSelector(selectForms, forms => forms.getIn([formId, 'defaultLanguage']));
175
- const selectFieldErrors = (state, formId) => {
176
- return state.getIn(['forms', formId, 'fieldErrors']);
177
- };
178
- const selectPostData = (state, formId) => {
179
- return state.getIn(['forms', formId, 'data']);
180
- };
181
- const selectFormGroups = (state, formId) => {
182
- return state.getIn(['forms', formId, 'groups']);
183
- };
184
- const selectPagingInfo = (state, formId) => {
185
- return state.getIn(['forms', formId, 'pagingInfo']);
186
- };
187
- const selectFormStatus = (state, formId) => {
188
- return state.getIn(['forms', formId, 'status']);
189
- };
190
- const selectPagedFields = formId => reselect.createSelector([selectForms], form => {
191
- const pagingInfo = form.getIn([formId, 'pagingInfo']);
192
- const fields = form.getIn([formId, 'fields']);
260
+ return (_form$formId = form[formId]) === null || _form$formId === void 0 ? void 0 : _form$formId.status;
261
+ });
262
+ const makeSelectPagingInfo = formId => reselect.createSelector(selectForms, form => {
263
+ var _form$formId2;
193
264
 
194
- if (fields && fields.length > 0 && pagingInfo && pagingInfo.pageCount > 1) {
195
- return fields.filter(f => f.groupId == pagingInfo.currentPageId);
196
- }
265
+ return (_form$formId2 = form[formId]) === null || _form$formId2 === void 0 ? void 0 : _form$formId2.pagingInfo;
266
+ });
267
+ const makeSelectFormSettings = formId => reselect.createSelector(selectForms, form => {
268
+ var _form$formId3;
269
+
270
+ return (_form$formId3 = form[formId]) === null || _form$formId3 === void 0 ? void 0 : _form$formId3.settings;
271
+ });
272
+ const makeSelectFormFieldErrors = formId => reselect.createSelector(selectForms, form => {
273
+ var _form$formId4;
274
+
275
+ return (_form$formId4 = form[formId]) === null || _form$formId4 === void 0 ? void 0 : _form$formId4.fieldErrors;
276
+ });
277
+ const makeSelectFormEntries = formId => reselect.createSelector(selectForms, form => {
278
+ var _form$formId5;
279
+
280
+ return (_form$formId5 = form[formId]) === null || _form$formId5 === void 0 ? void 0 : _form$formId5.entries;
281
+ });
282
+ const makeSelectFormPostData = formId => reselect.createSelector(selectForms, form => {
283
+ var _form$formId6;
284
+
285
+ return (_form$formId6 = form[formId]) === null || _form$formId6 === void 0 ? void 0 : _form$formId6.data;
286
+ });
287
+ const makeSelectIsLoading = formId => reselect.createSelector(selectForms, forms => {
288
+ var _forms$formId;
289
+
290
+ return (_forms$formId = forms[formId]) === null || _forms$formId === void 0 ? void 0 : _forms$formId.status.isLoading;
291
+ });
292
+ const makeSelectIsSubmitting = formId => reselect.createSelector(selectForms, forms => {
293
+ var _forms$formId2;
294
+
295
+ return (_forms$formId2 = forms[formId]) === null || _forms$formId2 === void 0 ? void 0 : _forms$formId2.status.isSubmitting;
296
+ });
297
+ const makeSelectHasSuccess = formId => reselect.createSelector(selectForms, forms => {
298
+ var _forms$formId3;
299
+
300
+ return (_forms$formId3 = forms[formId]) === null || _forms$formId3 === void 0 ? void 0 : _forms$formId3.status.hasSuccess;
301
+ });
302
+ const makeSelectFormFields = formId => reselect.createSelector(selectForms, forms => {
303
+ var _forms$formId4;
304
+
305
+ return (_forms$formId4 = forms[formId]) === null || _forms$formId4 === void 0 ? void 0 : _forms$formId4.fields;
306
+ });
307
+ const makeSelectDefaultLang = formId => reselect.createSelector(selectForms, forms => {
308
+ var _forms$formId5;
197
309
 
198
- return fields;
310
+ return (_forms$formId5 = forms[formId]) === null || _forms$formId5 === void 0 ? void 0 : _forms$formId5.defaultLanguage;
199
311
  });
200
- const selectEntries = (state, formId) => {
201
- return state.getIn(['forms', formId, 'entries']);
312
+ const makeSelectFormSuccessMessage = formId => reselect.createSelector(selectForms, forms => {
313
+ var _forms$formId6;
314
+
315
+ return (_forms$formId6 = forms[formId]) === null || _forms$formId6 === void 0 ? void 0 : _forms$formId6.status.successMessage;
316
+ });
317
+ const makeSelectFormGroup$1 = formId => reselect.createSelector(selectForms, forms => {
318
+ var _forms$formId7;
319
+
320
+ return (_forms$formId7 = forms[formId]) === null || _forms$formId7 === void 0 ? void 0 : _forms$formId7.groups;
321
+ });
322
+ const selectors = {
323
+ selectForms,
324
+ makeSelectPagedFields,
325
+ makeSelectFormStatus,
326
+ makeSelectPagingInfo,
327
+ makeSelectFormSettings,
328
+ makeSelectFormFieldErrors,
329
+ makeSelectFormEntries,
330
+ makeSelectFormPostData,
331
+ makeSelectIsLoading,
332
+ makeSelectIsSubmitting,
333
+ makeSelectHasSuccess,
334
+ makeSelectFormFields,
335
+ makeSelectDefaultLang,
336
+ makeSelectFormSuccessMessage,
337
+ makeSelectFormGroup: makeSelectFormGroup$1
202
338
  };
203
339
 
204
340
  const URI = '/forms';
@@ -249,16 +385,23 @@ const request = async (url, options) => {
249
385
  .catch(error => console.log('error', error));
250
386
  };
251
387
 
388
+ const domains = ['1033edge.com', '11mail.com', '123.com', '123box.net', '123india.com', '123mail.cl', '123qwe.co.uk', '126.com', '150ml.com', '15meg4free.com', '163.com', '1coolplace.com', '1freeemail.com', '1funplace.com', '1internetdrive.com', '1mail.net', '1me.net', '1mum.com', '1musicrow.com', '1netdrive.com', '1nsyncfan.com', '1under.com', '1webave.com', '1webhighway.com', '212.com', '24horas.com', '2911.net', '2bmail.co.uk', '2d2i.com', '2die4.com', '3000.it', '321media.com', '37.com', '3ammagazine.com', '3dmail.com', '3email.com', '3xl.net', '444.net', '4email.com', '4email.net', '4mg.com', '4newyork.com', '4x4man.com', '5iron.com', '5star.com', '88.am', '8848.net', '888.nu', '97rock.com', 'aaamail.zzn.com', 'aamail.net', 'aaronkwok.net', 'abbeyroadlondon.co.uk', 'abcflash.net', 'abdulnour.com', 'aberystwyth.com', 'abolition-now.com', 'about.com', 'academycougars.com', 'acceso.or.cr', 'access4less.net', 'accessgcc.com', 'ace-of-base.com', 'acmecity.com', 'acmemail.net', 'acninc.net', 'adelphia.net', 'adexec.com', 'adfarrow.com', 'adios.net', 'ados.fr', 'advalvas.be', 'aeiou.pt', 'aemail4u.com', 'aeneasmail.com', 'afreeinternet.com', 'africamail.com', 'agoodmail.com', 'ahaa.dk', 'aichi.com', 'aim.com', 'airforce.net', 'airforceemail.com', 'airmail.net', 'airpost.net', 'ajacied.com', 'ak47.hu', 'aknet.kg', 'albawaba.com', 'alex4all.com', 'alexandria.cc', 'algeria.com', 'alhilal.net', 'alibaba.com', 'alice.it', 'aliceadsl.fr', 'alive.cz', 'aliyun.com', 'allmail.net', 'alloymail.com', 'allracing.com', 'allsaintsfan.com', 'alltel.net', 'alskens.dk', 'altavista.com', 'altavista.net', 'altavista.se', 'alternativagratis.com', 'alumnidirector.com', 'alvilag.hu', 'amele.com', 'america.hm', 'ameritech.net', 'amnetsal.com', 'amrer.net', 'amuro.net', 'amuromail.com', 'ananzi.co.za', 'ancestry.com', 'andylau.net', 'anfmail.com', 'angelfan.com', 'angelfire.com', 'animal.net', 'animalhouse.com', 'animalwoman.net', 'anjungcafe.com', 'anote.com', 'another.com', 'anotherwin95.com', 'anti-social.com', 'antisocial.com', 'antongijsen.com', 'antwerpen.com', 'anymoment.com', 'anytimenow.com', 'aol.com', 'aol.it', 'apexmail.com', 'apmail.com', 'apollo.lv', 'approvers.net', 'arabia.com', 'arabtop.net', 'arcademaster.com', 'archaeologist.com', 'arcor.de', 'arcotronics.bg', 'argentina.com', 'aristotle.org', 'army.net', 'arnet.com.ar', 'artlover.com', 'artlover.com.au', 'as-if.com', 'asean-mail.com', 'asheville.com', 'asia-links.com', 'asia.com', 'asiafind.com', 'asianavenue.com', 'asiancityweb.com', 'asiansonly.net', 'asianwired.net', 'asiapoint.net', 'assala.com', 'assamesemail.com', 'astroboymail.com', 'astrolover.com', 'astrosfan.com', 'astrosfan.net', 'asurfer.com', 'athenachu.net', 'atina.cl', 'atl.lv', 'atlanticbb.net', 'atlaswebmail.com', 'atlink.com', 'ato.check.com', 'atozasia.com', 'att.net', 'att.net', 'attbi.com', 'attglobal.net', 'attglobal.net', 'attymail.com', 'au.ru', 'ausi.com', 'austin.rr.com', 'australia.edu', 'australiamail.com', 'austrosearch.net', 'autoescuelanerja.com', 'automotiveauthority.com', 'avh.hu', 'awsom.net', 'axoskate.com', 'ayna.com', 'azimiweb.com', 'bachelorboy.com', 'bachelorgal.com', 'backpackers.com', 'backstreet-boys.com', 'backstreetboysclub.com', 'bagherpour.com', 'bangkok.com', 'bangkok2000.com', 'bannertown.net', 'baptistmail.com', 'baptized.com', 'barcelona.com', 'baseballmail.com', 'basketballmail.com', 'batuta.net', 'baudoinconsulting.com', 'bboy.zzn.com', 'bcpl.net', 'bcvibes.com', 'beeebank.com', 'beenhad.com', 'beep.ru', 'beer.com', 'beethoven.com', 'belice.com', 'belizehome.com', 'bellatlantic.net', 'bellnet.ca', 'bellsouth.net', 'bellsouth.net', 'berkscounty.com', 'berlin.com', 'berlin.de', 'berlinexpo.de', 'bestmail.us', 'bestweb.net', 'bettergolf.net', 'bev.net', 'bharatmail.com', 'bigassweb.com', 'bigblue.net.au', 'bigboab.com', 'bigfoot.com', 'bigfoot.de', 'bigger.com', 'bigmailbox.com', 'bigpond.com', 'bigpond.com.au', 'bigpond.net.au', 'bigramp.com', 'bikemechanics.com', 'bikeracer.com', 'bikeracers.net', 'bikerider.com', 'billsfan.com', 'billsfan.net', 'bimamail.com', 'bimla.net', 'birdowner.net', 'bisons.com', 'bitmail.com', 'bitpage.net', 'bizhosting.com', 'bla-bla.com', 'blackburnmail.com', 'blackplanet.com', 'blacksburg.net', 'blazemail.com', 'blazenet.net', 'bluehyppo.com', 'bluemail.ch', 'bluemail.dk', 'bluesfan.com', 'bluewin.ch', 'blueyonder.co.uk', 'blushmail.com', 'bmlsports.net', 'boardermail.com', 'boatracers.com', 'bol.com.br', 'bolando.com', 'bollywoodz.com', 'bolt.com', 'boltonfans.com', 'bombdiggity.com', 'bonbon.net', 'boom.com', 'bootmail.com', 'bornnaked.com', 'bossofthemoss.com', 'bostonoffice.com', 'bounce.net', 'box.az', 'boxbg.com', 'boxemail.com', 'boxfrog.com', 'boyzoneclub.com', 'bradfordfans.com', 'brasilia.net', 'brazilmail.com.br', 'breathe.com', 'bresnan.net', 'brfree.com.br', 'bright.net', 'britneyclub.com', 'brittonsign.com', 'broadcast.net', 'bt.com', 'btinternet.com', 'btopenworld.co.uk', 'buffymail.com', 'bullsfan.com', 'bullsgame.com', 'bumerang.ro', 'bunko.com', 'buryfans.com', 'business-man.com', 'businessman.net', 'businessweekmail.com', 'busta-rhymes.com', 'busymail.com', 'buyersusa.com', 'bvimailbox.com', 'byteme.com', 'c2i.net', 'c3.hu', 'c4.com', 'cabacabana.com', 'cableone.net', 'caere.it', 'cairomail.com', 'cais.net', 'callnetuk.com', 'callsign.net', 'caltanet.it', 'camidge.com', 'canada-11.com', 'canada.com', 'canadianmail.com', 'canoemail.com', 'canwetalk.com', 'capu.net', 'caramail.com', 'care2.com', 'careerbuildermail.com', 'carioca.net', 'cartestraina.ro', 'casablancaresort.com', 'casino.com', 'catcha.com', 'catholic.org', 'catlover.com', 'catsrule.garfield.com', 'ccnmail.com', 'cd2.com', 'celineclub.com', 'celtic.com', 'centoper.it', 'centralpets.com', 'centrum.cz', 'centrum.sk', 'centurytel.net', 'cfl.rr.com', 'cgac.es', 'chaiyomail.com', 'chance2mail.com', 'chandrasekar.net', 'charm.net', 'charmedmail.com', 'charter.net', 'chat.ru', 'chattown.com', 'chauhanweb.com', 'check.com', 'check1check.com', 'cheerful.com', 'chek.com', 'chello.nl', 'chemist.com', 'chequemail.com', 'cheyenneweb.com', 'chez.com', 'chickmail.com', 'china.net.vg', 'chinalook.com', 'chirk.com', 'chocaholic.com.au', 'christianmail.net', 'churchusa.com', 'cia-agent.com', 'cia.hu', 'ciaoweb.it', 'cicciociccio.com', 'cincinow.net', 'citeweb.net', 'citlink.net', 'city-of-bath.org', 'city-of-birmingham.com', 'city-of-brighton.org', 'city-of-cambridge.com', 'city-of-coventry.com', 'city-of-edinburgh.com', 'city-of-lichfield.com', 'city-of-lincoln.com', 'city-of-liverpool.com', 'city-of-manchester.com', 'city-of-nottingham.com', 'city-of-oxford.com', 'city-of-swansea.com', 'city-of-westminster.com', 'city-of-westminster.net', 'city-of-york.net', 'city2city.com', 'cityofcardiff.net', 'cityoflondon.org', 'claramail.com', 'classicalfan.com', 'classicmail.co.za', 'clerk.com', 'cliffhanger.com', 'close2you.net', 'club-internet.fr', 'club4x4.net', 'clubalfa.com', 'clubbers.net', 'clubducati.com', 'clubhonda.net', 'clubvdo.net', 'cluemail.com', 'cmpmail.com', 'cnnsimail.com', 'codec.ro', 'coder.hu', 'coid.biz', 'coldmail.com', 'collectiblesuperstore.com', 'collegebeat.com', 'collegeclub.com', 'collegemail.com', 'colleges.com', 'columbus.rr.com', 'columbusrr.com', 'columnist.com', 'comcast.net', 'comic.com', 'communityconnect.com', 'comprendemail.com', 'compuserve.com', 'computer-freak.com', 'computermail.net', 'concentric.net', 'conexcol.com', 'conk.com', 'connect4free.net', 'connectbox.com', 'conok.com', 'consultant.com', 'cookiemonster.com', 'cool.br', 'coolgoose.ca', 'coolgoose.com', 'coolkiwi.com', 'coollist.com', 'coolmail.com', 'coolmail.net', 'coolsend.com', 'cooooool.com', 'cooperation.net', 'cooperationtogo.net', 'copacabana.com', 'cornells.com', 'cornerpub.com', 'corporatedirtbag.com', 'correo.terra.com.gt', 'cortinet.com', 'cotas.net', 'counsellor.com', 'countrylover.com', 'covad.net', 'cox.net', 'coxinet.net', 'coxmail.com', 'cpaonline.net', 'cracker.hu', 'crazedanddazed.com', 'crazysexycool.com', 'cristianemail.com', 'critterpost.com', 'croeso.com', 'crosshairs.com', 'crosslink.net', 'crosswinds.net', 'crwmail.com', 'cry4helponline.com', 'cs.com', 'csi.com', 'csinibaba.hu', 'cuemail.com', 'curio-city.com', 'cute-girl.com', 'cuteandcuddly.com', 'cutey.com', 'cww.de', 'cyber-africa.net', 'cyber4all.com', 'cyberbabies.com', 'cybercafemaui.com', 'cyberdude.com', 'cyberforeplay.net', 'cybergal.com', 'cybergrrl.com', 'cyberinbox.com', 'cyberleports.com', 'cybermail.net', 'cybernet.it', 'cyberspace-asia.com', 'cybertrains.org', 'cyclefanz.com', 'cynetcity.com', 'dabsol.net', 'dadacasa.com', 'daha.com', 'dailypioneer.com', 'dallas.theboys.com', 'dangerous-minds.com', 'dansegulvet.com', 'data54.com', 'daum.net', 'davegracey.com', 'dawnsonmail.com', 'dawsonmail.com', 'dazedandconfused.com', 'dbzmail.com', 'dca.net', 'dcemail.com', 'deadlymob.org', 'deal-maker.com', 'dearriba.com', 'death-star.com', 'dejanews.com', 'deliveryman.com', 'deltanet.com', 'deneg.net', 'depechemode.com', 'deseretmail.com', 'desertmail.com', 'desilota.com', 'deskmail.com', 'deskpilot.com', 'destin.com', 'detik.com', 'deutschland-net.com', 'devotedcouples.com', 'dfwatson.com', 'di-ve.com', 'digibel.be', 'diplomats.com', 'direcway.com', 'dirtracer.com', 'discofan.com', 'discovery.com', 'discoverymail.com', 'disinfo.net', 'dmailman.com', 'dmv.com', 'dnsmadeeasy.com', 'doctor.com', 'dog.com', 'doglover.com', 'dogmail.co.uk', 'dogsnob.net', 'doityourself.com', 'doneasy.com', 'donjuan.com', 'dontgotmail.com', 'dontmesswithtexas.com', 'doramail.com', 'dostmail.com', 'dotcom.fr', 'dott.it', 'dplanet.ch', 'dr.com', 'dragoncon.net', 'dragracer.com', 'dropzone.com', 'drotposta.hu', 'dslextreme.com', 'dubaimail.com', 'dublin.com', 'dublin.ie', 'dunlopdriver.com', 'dunloprider.com', 'duno.com', 'dwp.net', 'dygo.com', 'dynamitemail.com', 'e-apollo.lv', 'e-mail.dk', 'e-mail.ru', 'e-mailanywhere.com', 'e-mails.ru', 'e-tapaal.com', 'earthalliance.com', 'earthcam.net', 'earthdome.com', 'earthling.net', 'earthlink.net', 'earthonline.net', 'eastcoast.co.za', 'eastmail.com', 'easy.to', 'easypost.com', 'eatmydirt.com', 'ecardmail.com', 'ecbsolutions.net', 'echina.com', 'ecompare.com', 'edge.net', 'edmail.com', 'ednatx.com', 'edtnmail.com', 'educacao.te.pt', 'educastmail.com', 'ehmail.com', 'eircom.net', 'elsitio.com', 'elvis.com', 'email-london.co.uk', 'email.com', 'email.cz', 'email.ee', 'email.it', 'email.nu', 'email.ro', 'email.ru', 'email.si', 'email.women.com', 'email2me.net', 'emailacc.com', 'emailaccount.com', 'emailchoice.com', 'emailcorner.net', 'emailem.com', 'emailengine.net', 'emailforyou.net', 'emailgroups.net', 'emailpinoy.com', 'emailplanet.com', 'emails.ru', 'emailuser.net', 'emailx.net', 'ematic.com', 'embarqmail.com', 'emumail.com', 'end-war.com', 'enel.net', 'engineer.com', 'england.com', 'england.edu', 'enter.net', 'epatra.com', 'epix.net', 'epost.de', 'eposta.hu', 'eqqu.com', 'eramail.co.za', 'eresmas.com', 'eriga.lv', 'erols.com', 'estranet.it', 'ethos.st', 'etoast.com', 'etrademail.com', 'eudoramail.com', 'europe.com', 'euroseek.com', 'every1.net', 'everyday.com.kh', 'everyone.net', 'examnotes.net', 'excite.co.jp', 'excite.com', 'excite.it', 'execs.com', 'expressasia.com', 'extenda.net', 'extended.com', 'eyou.com', 'ezcybersearch.com', 'ezmail.egine.com', 'ezmail.ru', 'ezrs.com', 'ezy.net', 'f1fans.net', 'facebook.com', 'fan.com', 'fan.theboys.com', 'fansonlymail.com', 'fantasticmail.com', 'farang.net', 'faroweb.com', 'fastem.com', 'fastemail.us', 'fastemailer.com', 'fastermail.com', 'fastimap.com', 'fastmail.fm', 'fastmailbox.net', 'fastmessaging.com', 'fatcock.net', 'fathersrightsne.org', 'fbi-agent.com', 'fbi.hu', 'fcc.net', 'federalcontractors.com', 'felicity.com', 'felicitymail.com', 'femenino.com', 'fetchmail.co.uk', 'fetchmail.com', 'feyenoorder.com', 'ffanet.com', 'fiberia.com', 'fibertel.com.ar', 'filipinolinks.com', 'financemail.net', 'financier.com', 'findmail.com', 'finebody.com', 'finfin.com', 'fire-brigade.com', 'fishburne.org', 'flashcom.net', 'flashemail.com', 'flashmail.com', 'flashmail.net', 'flipcode.com', 'fmail.co.uk', 'fmailbox.com', 'fmgirl.com', 'fmguy.com', 'fnbmail.co.za', 'fnmail.com', 'folkfan.com', 'foodmail.com', 'football.theboys.com', 'footballmail.com', 'for-president.com', 'forfree.at', 'forpresident.com', 'forthnet.gr', 'fortuncity.com', 'fortunecity.com', 'forum.dk', 'foxmail.com', 'free-org.com', 'free.com.pe', 'free.fr', 'freeaccess.nl', 'freeaccount.com', 'freeandsingle.com', 'freedom.usa.com', 'freedomlover.com', 'freegates.be', 'freeghana.com', 'freeler.nl', 'freemail.c3.hu', 'freemail.com.au', 'freemail.com.pk', 'freemail.de', 'freemail.et', 'freemail.gr', 'freemail.hu', 'freemail.it', 'freemail.lt', 'freemail.nl', 'freemail.org.mk', 'freenet.de', 'freenet.kg', 'freeola.com', 'freeola.net', 'freeserve.co.uk', 'freestamp.com', 'freestart.hu', 'freesurf.fr', 'freesurf.nl', 'freeuk.com', 'freeuk.net', 'freeukisp.co.uk', 'freeweb.org', 'freewebemail.com', 'freeyellow.com', 'freezone.co.uk', 'fresnomail.com', 'friends-cafe.com', 'friendsfan.com', 'from-africa.com', 'from-america.com', 'from-argentina.com', 'from-asia.com', 'from-australia.com', 'from-belgium.com', 'from-brazil.com', 'from-canada.com', 'from-china.net', 'from-england.com', 'from-europe.com', 'from-france.net', 'from-germany.net', 'from-holland.com', 'from-israel.com', 'from-italy.net', 'from-japan.net', 'from-korea.com', 'from-mexico.com', 'from-outerspace.com', 'from-russia.com', 'from-spain.net', 'fromalabama.com', 'fromalaska.com', 'fromarizona.com', 'fromarkansas.com', 'fromcalifornia.com', 'fromcolorado.com', 'fromconnecticut.com', 'fromdelaware.com', 'fromflorida.net', 'fromgeorgia.com', 'fromhawaii.net', 'fromidaho.com', 'fromillinois.com', 'fromindiana.com', 'fromiowa.com', 'fromjupiter.com', 'fromkansas.com', 'fromkentucky.com', 'fromlouisiana.com', 'frommaine.net', 'frommaryland.com', 'frommassachusetts.com', 'frommiami.com', 'frommichigan.com', 'fromminnesota.com', 'frommississippi.com', 'frommissouri.com', 'frommontana.com', 'fromnebraska.com', 'fromnevada.com', 'fromnewhampshire.com', 'fromnewjersey.com', 'fromnewmexico.com', 'fromnewyork.net', 'fromnorthcarolina.com', 'fromnorthdakota.com', 'fromohio.com', 'fromoklahoma.com', 'fromoregon.net', 'frompennsylvania.com', 'fromrhodeisland.com', 'fromru.com', 'fromsouthcarolina.com', 'fromsouthdakota.com', 'fromtennessee.com', 'fromtexas.com', 'fromthestates.com', 'fromutah.com', 'fromvermont.com', 'fromvirginia.com', 'fromwashington.com', 'fromwashingtondc.com', 'fromwestvirginia.com', 'fromwisconsin.com', 'fromwyoming.com', 'front.ru', 'frontier.com', 'frontiernet.net', 'frostbyte.uk.net', 'fsmail.net', 'ftml.net', 'fullchannel.net', 'fullmail.com', 'funkfan.com', 'fuorissimo.com', 'furnitureprovider.com', 'fuse.net', 'fut.es', 'fwnb.com', 'fxsmails.com', 'galamb.net', 'galaxy5.com', 'gamebox.net', 'gamegeek.com', 'games.com', 'gamespotmail.com', 'garbage.com', 'gardener.com', 'gateway.net', 'gawab.com', 'gaybrighton.co.uk', 'gaza.net', 'gazeta.pl', 'gazibooks.com', 'gci.net', 'gee-wiz.com', 'geecities.com', 'geek.com', 'geek.hu', 'geeklife.com', 'general-hospital.com', 'geocities.com', 'geologist.com', 'geopia.com', 'gh2000.com', 'ghanamail.com', 'ghostmail.com', 'giantsfan.com', 'giga4u.de', 'gigileung.org', 'givepeaceachance.com', 'glay.org', 'glendale.net', 'globalfree.it', 'globalpagan.com', 'globalsite.com.br', 'globo.com', 'globomail.com', 'gmail.com', 'gmx.at', 'gmx.com', 'gmx.de', 'gmx.fr', 'gmx.li', 'gmx.net', 'gnwmail.com', 'go.com', 'go.ro', 'go.ru', 'go2.com.py', 'go2net.com', 'gocollege.com', 'gocubs.com', 'gofree.co.uk', 'goldenmail.ru', 'goldmail.ru', 'golfemail.com', 'golfmail.be', 'gonavy.net', 'goodstick.com', 'google.com', 'googlemail.com', 'goplay.com', 'gorontalo.net', 'gospelfan.com', 'gothere.uk.com', 'gotmail.com', 'gotomy.com', 'govolsfan.com', 'gportal.hu', 'grabmail.com', 'graffiti.net', 'gramszu.net', 'grapplers.com', 'gratisweb.com', 'grungecafe.com', 'gtemail.net', 'gti.net', 'gtmc.net', 'gua.net', 'guessmail.com', 'guju.net', 'gurlmail.com', 'guy.com', 'guy2.com', 'guyanafriends.com', 'gyorsposta.com', 'gyorsposta.hu', 'hackermail.net', 'hailmail.net', 'hairdresser.net', 'hamptonroads.com', 'handbag.com', 'handleit.com', 'hang-ten.com', 'hanmail.net', 'happemail.com', 'happycounsel.com', 'happypuppy.com', 'hardcorefreak.com', 'hawaii.rr.com', 'hawaiiantel.net', 'headbone.com', 'heartthrob.com', 'heerschap.com', 'heesun.net', 'hehe.com', 'hello.hu', 'hello.net.au', 'hello.to', 'helter-skelter.com', 'hempseed.com', 'herediano.com', 'heremail.com', 'herono1.com', 'hetnet.nl', 'hey.to', 'hhdevel.com', 'highmilton.com', 'highquality.com', 'highveldmail.co.za', 'hiphopfan.com', 'hispavista.com', 'hitthe.net', 'hkg.net', 'hkstarphoto.com', 'hockeymail.com', 'hollywoodkids.com', 'home-email.com', 'home.nl', 'home.no.net', 'home.ro', 'home.se', 'homeart.com', 'homelocator.com', 'homemail.com', 'homestead.com', 'homeworkcentral.com', 'hongkong.com', 'hookup.net', 'hoopsmail.com', 'horrormail.com', 'host-it.com.sg', 'hot-shot.com', 'hot.ee', 'hotbot.com', 'hotbrev.com', 'hotepmail.com', 'hotfire.net', 'hotletter.com', 'hotmail.be', 'hotmail.co.il', 'hotmail.co.uk', 'hotmail.com', 'hotmail.com.ar', 'hotmail.com.br', 'hotmail.com.mx', 'hotmail.de', 'hotmail.es', 'hotmail.fr', 'hotmail.it', 'hotmail.kg', 'hotmail.kz', 'hotmail.ru', 'hotpop.com', 'hotpop3.com', 'hotvoice.com', 'housefancom', 'housemail.com', 'hsuchi.net', 'html.tou.com', 'hughes.net', 'hunsa.com', 'hush.com', 'hushmail.com', 'hypernautica.com', 'i-connect.com', 'i-france.com', 'i-mail.com.au', 'i-p.com', 'i-plus.net', 'i.am', 'i12.com', 'iamawoman.com', 'iamwaiting.com', 'iamwasted.com', 'iamyours.com', 'ibm.net', 'icestorm.com', 'icloud.com', 'icmsconsultants.com', 'icq.com', 'icqmail.com', 'icrazy.com', 'id-base.com', 'ididitmyway.com', 'idirect.com', 'iespana.es', 'ifoward.com', 'ig.com.br', 'ignazio.it', 'ignmail.com', 'ihateclowns.com', 'ihwy.com', 'iinet.net.au', 'ijustdontcare.com', 'ilovechocolate.com', 'ilovejesus.com', 'ilovethemovies.com', 'ilovetocollect.net', 'ilse.nl', 'imaginemail.com', 'imail.org', 'imail.ru', 'imailbox.com', 'imel.org', 'imneverwrong.com', 'imposter.co.uk', 'imstressed.com', 'imtoosexy.com', 'in-box.net', 'iname.com', 'inbox.com', 'inbox.net', 'inbox.ru', 'incamail.com', 'incredimail.com', 'indexa.fr', 'india.com', 'indiatimes.com', 'indo-mail.com', 'indocities.com', 'indomail.com', 'indyracers.com', 'info-media.de', 'info66.com', 'infohq.com', 'infomail.es', 'infomart.or.jp', 'infospacemail.com', 'infovia.com.ar', 'inicia.es', 'inmail.sk', 'innocent.com', 'inorbit.com', 'insidebaltimore.net', 'insight.rr.com', 'insurer.com', 'integra.net', 'interaccess.com', 'interburp.com', 'interfree.it', 'interia.pl', 'interlap.com.ar', 'intermail.co.il', 'internet-club.com', 'internet-police.com', 'internetbiz.com', 'internetdrive.com', 'internetegypt.com', 'internetemails.net', 'internetmailing.net', 'internetmci.com', 'investormail.com', 'inwind.it', 'iobox.com', 'iobox.fi', 'iol.it', 'ionet.net', 'iowaemail.com', 'ip3.com', 'iprimus.com.au', 'iqemail.com', 'irangate.net', 'iraqmail.com', 'ireland.com', 'irj.hu', 'isellcars.com', 'islamonline.net', 'isleuthmail.com', 'ismart.net', 'isonfire.com', 'isp9.net', 'itelefonica.com.br', 'itloox.com', 'itmom.com', 'itol.com', 'ivebeenframed.com', 'ivillage.com', 'iwan-fals.com', 'iwmail.com', 'iwon.com', 'izadpanah.com', 'jahoopa.com', 'jakuza.hu', 'japan.com', 'jaydemail.com', 'jazzandjava.com', 'jazzfan.com', 'jazzgame.com', 'jerusalemmail.com', 'jetemail.net', 'jewishmail.com', 'jippii.fi', 'jmail.co.za', 'joinme.com', 'jokes.com', 'jordanmail.com', 'journalist.com', 'jovem.te.pt', 'joymail.com', 'jpopmail.com', 'jubiimail.dk', 'jump.com', 'jumpy.it', 'juniormail.com', 'juno.com', 'justemail.net', 'justicemail.com', 'kaazoo.com', 'kaixo.com', 'kalpoint.com', 'kansascity.com', 'kapoorweb.com', 'karachian.com', 'karachioye.com', 'karbasi.com', 'katamail.com', 'kayafmmail.co.za', 'kbjrmail.com', 'kcks.com', 'keg-party.com', 'keko.com.ar', 'kellychen.com', 'keromail.com', 'keyemail.com', 'kgb.hu', 'khosropour.com', 'kickassmail.com', 'killermail.com', 'kimo.com', 'kinki-kids.com', 'kittymail.com', 'kitznet.at', 'kiwibox.com', 'kiwitown.com', 'kmail.com.au', 'konx.com', 'korea.com', 'kozmail.com', 'krongthip.com', 'krunis.com', 'ksanmail.com', 'ksee24mail.com', 'kube93mail.com', 'kukamail.com', 'kumarweb.com', 'kuwait-mail.com', 'la.com', 'ladymail.cz', 'lagerlouts.com', 'lahoreoye.com', 'lakmail.com', 'lamer.hu', 'land.ru', 'lankamail.com', 'laposte.net', 'latemodels.com', 'latinmail.com', 'latino.com', 'lavabit.com', 'law.com', 'lawyer.com', 'leehom.net', 'legalactions.com', 'legislator.com', 'leonlai.net', 'letsgomets.net', 'letterbox.com', 'levele.com', 'levele.hu', 'lex.bg', 'lexis-nexis-mail.com', 'libero.it', 'liberomail.com', 'lick101.com', 'linkmaster.com', 'linktrader.com', 'linuxfreemail.com', 'linuxmail.org', 'lionsfan.com.au', 'liontrucks.com', 'liquidinformation.net', 'list.ru', 'littleblueroom.com', 'live.be', 'live.ca', 'live.co.uk', 'live.com', 'live.com.ar', 'live.com.au', 'live.com.mx', 'live.de', 'live.fr', 'live.it', 'live.nl', 'liverpoolfans.com', 'llandudno.com', 'llangollen.com', 'lmxmail.sk', 'lobbyist.com', 'localbar.com', 'london.com', 'loobie.com', 'looksmart.co.uk', 'looksmart.com', 'looksmart.com.au', 'lopezclub.com', 'louiskoo.com', 'love.com', 'love.cz', 'loveable.com', 'lovelygirl.net', 'lovemail.com', 'lover-boy.com', 'lovergirl.com', 'lovingjesus.com', 'lowandslow.com', 'luso.pt', 'luukku.com', 'lycos.co.uk', 'lycos.com', 'lycos.es', 'lycos.it', 'lycos.ne.jp', 'lycosemail.com', 'lycosmail.com', 'm-a-i-l.com', 'm-hmail.com', 'm4.org', 'mac.com', 'macbox.com', 'macfreak.com', 'machinecandy.com', 'macmail.com', 'madcreations.com', 'madrid.com', 'maffia.hu', 'magicmail.co.za', 'mahmoodweb.com', 'mail-awu.de', 'mail-box.cz', 'mail-center.com', 'mail-central.com', 'mail-page.com', 'mail.austria.com', 'mail.az', 'mail.be', 'mail.bulgaria.com', 'mail.byte.it', 'mail.co.za', 'mail.com', 'mail.ee', 'mail.entrepeneurmag.com', 'mail.freetown.com', 'mail.gr', 'mail.hitthebeach.com', 'mail.kmsp.com', 'mail.md', 'mail.nu', 'mail.org.uk', 'mail.pf', 'mail.pharmacy.com', 'mail.pt', 'mail.r-o-o-t.com', 'mail.ru', 'mail.salu.net', 'mail.sisna.com', 'mail.spaceports.com', 'mail.theboys.com', 'mail.usa.com', 'mail.vasarhely.hu', 'mail15.com', 'mail1st.com', 'mail2007.com', 'mail2aaron.com', 'mail2abby.com', 'mail2abc.com', 'mail2actor.com', 'mail2admiral.com', 'mail2adorable.com', 'mail2adoration.com', 'mail2adore.com', 'mail2adventure.com', 'mail2aeolus.com', 'mail2aether.com', 'mail2affection.com', 'mail2afghanistan.com', 'mail2africa.com', 'mail2agent.com', 'mail2aha.com', 'mail2ahoy.com', 'mail2aim.com', 'mail2air.com', 'mail2airbag.com', 'mail2airforce.com', 'mail2airport.com', 'mail2alabama.com', 'mail2alan.com', 'mail2alaska.com', 'mail2albania.com', 'mail2alcoholic.com', 'mail2alec.com', 'mail2alexa.com', 'mail2algeria.com', 'mail2alicia.com', 'mail2alien.com', 'mail2allan.com', 'mail2allen.com', 'mail2allison.com', 'mail2alpha.com', 'mail2alyssa.com', 'mail2amanda.com', 'mail2amazing.com', 'mail2amber.com', 'mail2america.com', 'mail2american.com', 'mail2andorra.com', 'mail2andrea.com', 'mail2andy.com', 'mail2anesthesiologist.com', 'mail2angela.com', 'mail2angola.com', 'mail2ann.com', 'mail2anna.com', 'mail2anne.com', 'mail2anthony.com', 'mail2anything.com', 'mail2aphrodite.com', 'mail2apollo.com', 'mail2april.com', 'mail2aquarius.com', 'mail2arabia.com', 'mail2arabic.com', 'mail2architect.com', 'mail2ares.com', 'mail2argentina.com', 'mail2aries.com', 'mail2arizona.com', 'mail2arkansas.com', 'mail2armenia.com', 'mail2army.com', 'mail2arnold.com', 'mail2art.com', 'mail2artemus.com', 'mail2arthur.com', 'mail2artist.com', 'mail2ashley.com', 'mail2ask.com', 'mail2astronomer.com', 'mail2athena.com', 'mail2athlete.com', 'mail2atlas.com', 'mail2atom.com', 'mail2attitude.com', 'mail2auction.com', 'mail2aunt.com', 'mail2australia.com', 'mail2austria.com', 'mail2azerbaijan.com', 'mail2baby.com', 'mail2bahamas.com', 'mail2bahrain.com', 'mail2ballerina.com', 'mail2ballplayer.com', 'mail2band.com', 'mail2bangladesh.com', 'mail2bank.com', 'mail2banker.com', 'mail2bankrupt.com', 'mail2baptist.com', 'mail2bar.com', 'mail2barbados.com', 'mail2barbara.com', 'mail2barter.com', 'mail2basketball.com', 'mail2batter.com', 'mail2beach.com', 'mail2beast.com', 'mail2beatles.com', 'mail2beauty.com', 'mail2becky.com', 'mail2beijing.com', 'mail2belgium.com', 'mail2belize.com', 'mail2ben.com', 'mail2bernard.com', 'mail2beth.com', 'mail2betty.com', 'mail2beverly.com', 'mail2beyond.com', 'mail2biker.com', 'mail2bill.com', 'mail2billionaire.com', 'mail2billy.com', 'mail2bio.com', 'mail2biologist.com', 'mail2black.com', 'mail2blackbelt.com', 'mail2blake.com', 'mail2blind.com', 'mail2blonde.com', 'mail2blues.com', 'mail2bob.com', 'mail2bobby.com', 'mail2bolivia.com', 'mail2bombay.com', 'mail2bonn.com', 'mail2bookmark.com', 'mail2boreas.com', 'mail2bosnia.com', 'mail2boston.com', 'mail2botswana.com', 'mail2bradley.com', 'mail2brazil.com', 'mail2breakfast.com', 'mail2brian.com', 'mail2bride.com', 'mail2brittany.com', 'mail2broker.com', 'mail2brook.com', 'mail2bruce.com', 'mail2brunei.com', 'mail2brunette.com', 'mail2brussels.com', 'mail2bryan.com', 'mail2bug.com', 'mail2bulgaria.com', 'mail2business.com', 'mail2buy.com', 'mail2ca.com', 'mail2california.com', 'mail2calvin.com', 'mail2cambodia.com', 'mail2cameroon.com', 'mail2canada.com', 'mail2cancer.com', 'mail2capeverde.com', 'mail2capricorn.com', 'mail2cardinal.com', 'mail2cardiologist.com', 'mail2care.com', 'mail2caroline.com', 'mail2carolyn.com', 'mail2casey.com', 'mail2cat.com', 'mail2caterer.com', 'mail2cathy.com', 'mail2catlover.com', 'mail2catwalk.com', 'mail2cell.com', 'mail2chad.com', 'mail2champaign.com', 'mail2charles.com', 'mail2chef.com', 'mail2chemist.com', 'mail2cherry.com', 'mail2chicago.com', 'mail2chile.com', 'mail2china.com', 'mail2chinese.com', 'mail2chocolate.com', 'mail2christian.com', 'mail2christie.com', 'mail2christmas.com', 'mail2christy.com', 'mail2chuck.com', 'mail2cindy.com', 'mail2clark.com', 'mail2classifieds.com', 'mail2claude.com', 'mail2cliff.com', 'mail2clinic.com', 'mail2clint.com', 'mail2close.com', 'mail2club.com', 'mail2coach.com', 'mail2coastguard.com', 'mail2colin.com', 'mail2college.com', 'mail2colombia.com', 'mail2color.com', 'mail2colorado.com', 'mail2columbia.com', 'mail2comedian.com', 'mail2composer.com', 'mail2computer.com', 'mail2computers.com', 'mail2concert.com', 'mail2congo.com', 'mail2connect.com', 'mail2connecticut.com', 'mail2consultant.com', 'mail2convict.com', 'mail2cook.com', 'mail2cool.com', 'mail2cory.com', 'mail2costarica.com', 'mail2country.com', 'mail2courtney.com', 'mail2cowboy.com', 'mail2cowgirl.com', 'mail2craig.com', 'mail2crave.com', 'mail2crazy.com', 'mail2create.com', 'mail2croatia.com', 'mail2cry.com', 'mail2crystal.com', 'mail2cuba.com', 'mail2culture.com', 'mail2curt.com', 'mail2customs.com', 'mail2cute.com', 'mail2cutey.com', 'mail2cynthia.com', 'mail2cyprus.com', 'mail2czechrepublic.com', 'mail2dad.com', 'mail2dale.com', 'mail2dallas.com', 'mail2dan.com', 'mail2dana.com', 'mail2dance.com', 'mail2dancer.com', 'mail2danielle.com', 'mail2danny.com', 'mail2darlene.com', 'mail2darling.com', 'mail2darren.com', 'mail2daughter.com', 'mail2dave.com', 'mail2dawn.com', 'mail2dc.com', 'mail2dealer.com', 'mail2deanna.com', 'mail2dearest.com', 'mail2debbie.com', 'mail2debby.com', 'mail2deer.com', 'mail2delaware.com', 'mail2delicious.com', 'mail2demeter.com', 'mail2democrat.com', 'mail2denise.com', 'mail2denmark.com', 'mail2dennis.com', 'mail2dentist.com', 'mail2derek.com', 'mail2desert.com', 'mail2devoted.com', 'mail2devotion.com', 'mail2diamond.com', 'mail2diana.com', 'mail2diane.com', 'mail2diehard.com', 'mail2dilemma.com', 'mail2dillon.com', 'mail2dinner.com', 'mail2dinosaur.com', 'mail2dionysos.com', 'mail2diplomat.com', 'mail2director.com', 'mail2dirk.com', 'mail2disco.com', 'mail2dive.com', 'mail2diver.com', 'mail2divorced.com', 'mail2djibouti.com', 'mail2doctor.com', 'mail2doglover.com', 'mail2dominic.com', 'mail2dominica.com', 'mail2dominicanrepublic.com', 'mail2don.com', 'mail2donald.com', 'mail2donna.com', 'mail2doris.com', 'mail2dorothy.com', 'mail2doug.com', 'mail2dough.com', 'mail2douglas.com', 'mail2dow.com', 'mail2downtown.com', 'mail2dream.com', 'mail2dreamer.com', 'mail2dude.com', 'mail2dustin.com', 'mail2dyke.com', 'mail2dylan.com', 'mail2earl.com', 'mail2earth.com', 'mail2eastend.com', 'mail2eat.com', 'mail2economist.com', 'mail2ecuador.com', 'mail2eddie.com', 'mail2edgar.com', 'mail2edwin.com', 'mail2egypt.com', 'mail2electron.com', 'mail2eli.com', 'mail2elizabeth.com', 'mail2ellen.com', 'mail2elliot.com', 'mail2elsalvador.com', 'mail2elvis.com', 'mail2emergency.com', 'mail2emily.com', 'mail2engineer.com', 'mail2english.com', 'mail2environmentalist.com', 'mail2eos.com', 'mail2eric.com', 'mail2erica.com', 'mail2erin.com', 'mail2erinyes.com', 'mail2eris.com', 'mail2eritrea.com', 'mail2ernie.com', 'mail2eros.com', 'mail2estonia.com', 'mail2ethan.com', 'mail2ethiopia.com', 'mail2eu.com', 'mail2europe.com', 'mail2eurus.com', 'mail2eva.com', 'mail2evan.com', 'mail2evelyn.com', 'mail2everything.com', 'mail2exciting.com', 'mail2expert.com', 'mail2fairy.com', 'mail2faith.com', 'mail2fanatic.com', 'mail2fancy.com', 'mail2fantasy.com', 'mail2farm.com', 'mail2farmer.com', 'mail2fashion.com', 'mail2fat.com', 'mail2feeling.com', 'mail2female.com', 'mail2fever.com', 'mail2fighter.com', 'mail2fiji.com', 'mail2filmfestival.com', 'mail2films.com', 'mail2finance.com', 'mail2finland.com', 'mail2fireman.com', 'mail2firm.com', 'mail2fisherman.com', 'mail2flexible.com', 'mail2florence.com', 'mail2florida.com', 'mail2floyd.com', 'mail2fly.com', 'mail2fond.com', 'mail2fondness.com', 'mail2football.com', 'mail2footballfan.com', 'mail2found.com', 'mail2france.com', 'mail2frank.com', 'mail2frankfurt.com', 'mail2franklin.com', 'mail2fred.com', 'mail2freddie.com', 'mail2free.com', 'mail2freedom.com', 'mail2french.com', 'mail2freudian.com', 'mail2friendship.com', 'mail2from.com', 'mail2fun.com', 'mail2gabon.com', 'mail2gabriel.com', 'mail2gail.com', 'mail2galaxy.com', 'mail2gambia.com', 'mail2games.com', 'mail2gary.com', 'mail2gavin.com', 'mail2gemini.com', 'mail2gene.com', 'mail2genes.com', 'mail2geneva.com', 'mail2george.com', 'mail2georgia.com', 'mail2gerald.com', 'mail2german.com', 'mail2germany.com', 'mail2ghana.com', 'mail2gilbert.com', 'mail2gina.com', 'mail2girl.com', 'mail2glen.com', 'mail2gloria.com', 'mail2goddess.com', 'mail2gold.com', 'mail2golfclub.com', 'mail2golfer.com', 'mail2gordon.com', 'mail2government.com', 'mail2grab.com', 'mail2grace.com', 'mail2graham.com', 'mail2grandma.com', 'mail2grandpa.com', 'mail2grant.com', 'mail2greece.com', 'mail2green.com', 'mail2greg.com', 'mail2grenada.com', 'mail2gsm.com', 'mail2guard.com', 'mail2guatemala.com', 'mail2guy.com', 'mail2hades.com', 'mail2haiti.com', 'mail2hal.com', 'mail2handhelds.com', 'mail2hank.com', 'mail2hannah.com', 'mail2harold.com', 'mail2harry.com', 'mail2hawaii.com', 'mail2headhunter.com', 'mail2heal.com', 'mail2heather.com', 'mail2heaven.com', 'mail2hebe.com', 'mail2hecate.com', 'mail2heidi.com', 'mail2helen.com', 'mail2hell.com', 'mail2help.com', 'mail2helpdesk.com', 'mail2henry.com', 'mail2hephaestus.com', 'mail2hera.com', 'mail2hercules.com', 'mail2herman.com', 'mail2hermes.com', 'mail2hespera.com', 'mail2hestia.com', 'mail2highschool.com', 'mail2hindu.com', 'mail2hip.com', 'mail2hiphop.com', 'mail2holland.com', 'mail2holly.com', 'mail2hollywood.com', 'mail2homer.com', 'mail2honduras.com', 'mail2honey.com', 'mail2hongkong.com', 'mail2hope.com', 'mail2horse.com', 'mail2hot.com', 'mail2hotel.com', 'mail2houston.com', 'mail2howard.com', 'mail2hugh.com', 'mail2human.com', 'mail2hungary.com', 'mail2hungry.com', 'mail2hygeia.com', 'mail2hyperspace.com', 'mail2hypnos.com', 'mail2ian.com', 'mail2ice-cream.com', 'mail2iceland.com', 'mail2idaho.com', 'mail2idontknow.com', 'mail2illinois.com', 'mail2imam.com', 'mail2in.com', 'mail2india.com', 'mail2indian.com', 'mail2indiana.com', 'mail2indonesia.com', 'mail2infinity.com', 'mail2intense.com', 'mail2iowa.com', 'mail2iran.com', 'mail2iraq.com', 'mail2ireland.com', 'mail2irene.com', 'mail2iris.com', 'mail2irresistible.com', 'mail2irving.com', 'mail2irwin.com', 'mail2isaac.com', 'mail2israel.com', 'mail2italian.com', 'mail2italy.com', 'mail2jackie.com', 'mail2jacob.com', 'mail2jail.com', 'mail2jaime.com', 'mail2jake.com', 'mail2jamaica.com', 'mail2james.com', 'mail2jamie.com', 'mail2jan.com', 'mail2jane.com', 'mail2janet.com', 'mail2janice.com', 'mail2japan.com', 'mail2japanese.com', 'mail2jasmine.com', 'mail2jason.com', 'mail2java.com', 'mail2jay.com', 'mail2jazz.com', 'mail2jed.com', 'mail2jeffrey.com', 'mail2jennifer.com', 'mail2jenny.com', 'mail2jeremy.com', 'mail2jerry.com', 'mail2jessica.com', 'mail2jessie.com', 'mail2jesus.com', 'mail2jew.com', 'mail2jeweler.com', 'mail2jim.com', 'mail2jimmy.com', 'mail2joan.com', 'mail2joann.com', 'mail2joanna.com', 'mail2jody.com', 'mail2joe.com', 'mail2joel.com', 'mail2joey.com', 'mail2john.com', 'mail2join.com', 'mail2jon.com', 'mail2jonathan.com', 'mail2jones.com', 'mail2jordan.com', 'mail2joseph.com', 'mail2josh.com', 'mail2joy.com', 'mail2juan.com', 'mail2judge.com', 'mail2judy.com', 'mail2juggler.com', 'mail2julian.com', 'mail2julie.com', 'mail2jumbo.com', 'mail2junk.com', 'mail2justin.com', 'mail2justme.com', 'mail2kansas.com', 'mail2karate.com', 'mail2karen.com', 'mail2karl.com', 'mail2karma.com', 'mail2kathleen.com', 'mail2kathy.com', 'mail2katie.com', 'mail2kay.com', 'mail2kazakhstan.com', 'mail2keen.com', 'mail2keith.com', 'mail2kelly.com', 'mail2kelsey.com', 'mail2ken.com', 'mail2kendall.com', 'mail2kennedy.com', 'mail2kenneth.com', 'mail2kenny.com', 'mail2kentucky.com', 'mail2kenya.com', 'mail2kerry.com', 'mail2kevin.com', 'mail2kim.com', 'mail2kimberly.com', 'mail2king.com', 'mail2kirk.com', 'mail2kiss.com', 'mail2kosher.com', 'mail2kristin.com', 'mail2kurt.com', 'mail2kuwait.com', 'mail2kyle.com', 'mail2kyrgyzstan.com', 'mail2la.com', 'mail2lacrosse.com', 'mail2lance.com', 'mail2lao.com', 'mail2larry.com', 'mail2latvia.com', 'mail2laugh.com', 'mail2laura.com', 'mail2lauren.com', 'mail2laurie.com', 'mail2lawrence.com', 'mail2lawyer.com', 'mail2lebanon.com', 'mail2lee.com', 'mail2leo.com', 'mail2leon.com', 'mail2leonard.com', 'mail2leone.com', 'mail2leslie.com', 'mail2letter.com', 'mail2liberia.com', 'mail2libertarian.com', 'mail2libra.com', 'mail2libya.com', 'mail2liechtenstein.com', 'mail2life.com', 'mail2linda.com', 'mail2linux.com', 'mail2lionel.com', 'mail2lipstick.com', 'mail2liquid.com', 'mail2lisa.com', 'mail2lithuania.com', 'mail2litigator.com', 'mail2liz.com', 'mail2lloyd.com', 'mail2lois.com', 'mail2lola.com', 'mail2london.com', 'mail2looking.com', 'mail2lori.com', 'mail2lost.com', 'mail2lou.com', 'mail2louis.com', 'mail2louisiana.com', 'mail2lovable.com', 'mail2love.com', 'mail2lucky.com', 'mail2lucy.com', 'mail2lunch.com', 'mail2lust.com', 'mail2luxembourg.com', 'mail2luxury.com', 'mail2lyle.com', 'mail2lynn.com', 'mail2madagascar.com', 'mail2madison.com', 'mail2madrid.com', 'mail2maggie.com', 'mail2mail4.com', 'mail2maine.com', 'mail2malawi.com', 'mail2malaysia.com', 'mail2maldives.com', 'mail2mali.com', 'mail2malta.com', 'mail2mambo.com', 'mail2man.com', 'mail2mandy.com', 'mail2manhunter.com', 'mail2mankind.com', 'mail2many.com', 'mail2marc.com', 'mail2marcia.com', 'mail2margaret.com', 'mail2margie.com', 'mail2marhaba.com', 'mail2maria.com', 'mail2marilyn.com', 'mail2marines.com', 'mail2mark.com', 'mail2marriage.com', 'mail2married.com', 'mail2marries.com', 'mail2mars.com', 'mail2marsha.com', 'mail2marshallislands.com', 'mail2martha.com', 'mail2martin.com', 'mail2marty.com', 'mail2marvin.com', 'mail2mary.com', 'mail2maryland.com', 'mail2mason.com', 'mail2massachusetts.com', 'mail2matt.com', 'mail2matthew.com', 'mail2maurice.com', 'mail2mauritania.com', 'mail2mauritius.com', 'mail2max.com', 'mail2maxwell.com', 'mail2maybe.com', 'mail2mba.com', 'mail2me4u.com', 'mail2mechanic.com', 'mail2medieval.com', 'mail2megan.com', 'mail2mel.com', 'mail2melanie.com', 'mail2melissa.com', 'mail2melody.com', 'mail2member.com', 'mail2memphis.com', 'mail2methodist.com', 'mail2mexican.com', 'mail2mexico.com', 'mail2mgz.com', 'mail2miami.com', 'mail2michael.com', 'mail2michelle.com', 'mail2michigan.com', 'mail2mike.com', 'mail2milan.com', 'mail2milano.com', 'mail2mildred.com', 'mail2milkyway.com', 'mail2millennium.com', 'mail2millionaire.com', 'mail2milton.com', 'mail2mime.com', 'mail2mindreader.com', 'mail2mini.com', 'mail2minister.com', 'mail2minneapolis.com', 'mail2minnesota.com', 'mail2miracle.com', 'mail2missionary.com', 'mail2mississippi.com', 'mail2missouri.com', 'mail2mitch.com', 'mail2model.com', 'mail2moldova.commail2molly.com', 'mail2mom.com', 'mail2monaco.com', 'mail2money.com', 'mail2mongolia.com', 'mail2monica.com', 'mail2montana.com', 'mail2monty.com', 'mail2moon.com', 'mail2morocco.com', 'mail2morpheus.com', 'mail2mors.com', 'mail2moscow.com', 'mail2moslem.com', 'mail2mouseketeer.com', 'mail2movies.com', 'mail2mozambique.com', 'mail2mp3.com', 'mail2mrright.com', 'mail2msright.com', 'mail2museum.com', 'mail2music.com', 'mail2musician.com', 'mail2muslim.com', 'mail2my.com', 'mail2myboat.com', 'mail2mycar.com', 'mail2mycell.com', 'mail2mygsm.com', 'mail2mylaptop.com', 'mail2mymac.com', 'mail2mypager.com', 'mail2mypalm.com', 'mail2mypc.com', 'mail2myphone.com', 'mail2myplane.com', 'mail2namibia.com', 'mail2nancy.com', 'mail2nasdaq.com', 'mail2nathan.com', 'mail2nauru.com', 'mail2navy.com', 'mail2neal.com', 'mail2nebraska.com', 'mail2ned.com', 'mail2neil.com', 'mail2nelson.com', 'mail2nemesis.com', 'mail2nepal.com', 'mail2netherlands.com', 'mail2network.com', 'mail2nevada.com', 'mail2newhampshire.com', 'mail2newjersey.com', 'mail2newmexico.com', 'mail2newyork.com', 'mail2newzealand.com', 'mail2nicaragua.com', 'mail2nick.com', 'mail2nicole.com', 'mail2niger.com', 'mail2nigeria.com', 'mail2nike.com', 'mail2no.com', 'mail2noah.com', 'mail2noel.com', 'mail2noelle.com', 'mail2normal.com', 'mail2norman.com', 'mail2northamerica.com', 'mail2northcarolina.com', 'mail2northdakota.com', 'mail2northpole.com', 'mail2norway.com', 'mail2notus.com', 'mail2noway.com', 'mail2nowhere.com', 'mail2nuclear.com', 'mail2nun.com', 'mail2ny.com', 'mail2oasis.com', 'mail2oceanographer.com', 'mail2ohio.com', 'mail2ok.com', 'mail2oklahoma.com', 'mail2oliver.com', 'mail2oman.com', 'mail2one.com', 'mail2onfire.com', 'mail2online.com', 'mail2oops.com', 'mail2open.com', 'mail2ophthalmologist.com', 'mail2optometrist.com', 'mail2oregon.com', 'mail2oscars.com', 'mail2oslo.com', 'mail2painter.com', 'mail2pakistan.com', 'mail2palau.com', 'mail2pan.com', 'mail2panama.com', 'mail2paraguay.com', 'mail2paralegal.com', 'mail2paris.com', 'mail2park.com', 'mail2parker.com', 'mail2party.com', 'mail2passion.com', 'mail2pat.com', 'mail2patricia.com', 'mail2patrick.com', 'mail2patty.com', 'mail2paul.com', 'mail2paula.com', 'mail2pay.com', 'mail2peace.com', 'mail2pediatrician.com', 'mail2peggy.com', 'mail2pennsylvania.com', 'mail2perry.com', 'mail2persephone.com', 'mail2persian.com', 'mail2peru.com', 'mail2pete.com', 'mail2peter.com', 'mail2pharmacist.com', 'mail2phil.com', 'mail2philippines.com', 'mail2phoenix.com', 'mail2phonecall.com', 'mail2phyllis.com', 'mail2pickup.com', 'mail2pilot.com', 'mail2pisces.com', 'mail2planet.com', 'mail2platinum.com', 'mail2plato.com', 'mail2pluto.com', 'mail2pm.com', 'mail2podiatrist.com', 'mail2poet.com', 'mail2poland.com', 'mail2policeman.com', 'mail2policewoman.com', 'mail2politician.com', 'mail2pop.com', 'mail2pope.com', 'mail2popular.com', 'mail2portugal.com', 'mail2poseidon.com', 'mail2potatohead.com', 'mail2power.com', 'mail2presbyterian.com', 'mail2president.com', 'mail2priest.com', 'mail2prince.com', 'mail2princess.com', 'mail2producer.com', 'mail2professor.com', 'mail2protect.com', 'mail2psychiatrist.com', 'mail2psycho.com', 'mail2psychologist.com', 'mail2qatar.com', 'mail2queen.com', 'mail2rabbi.com', 'mail2race.com', 'mail2racer.com', 'mail2rachel.com', 'mail2rage.com', 'mail2rainmaker.com', 'mail2ralph.com', 'mail2randy.com', 'mail2rap.com', 'mail2rare.com', 'mail2rave.com', 'mail2ray.com', 'mail2raymond.com', 'mail2realtor.com', 'mail2rebecca.com', 'mail2recruiter.com', 'mail2recycle.com', 'mail2redhead.com', 'mail2reed.com', 'mail2reggie.com', 'mail2register.com', 'mail2rent.com', 'mail2republican.com', 'mail2resort.com', 'mail2rex.com', 'mail2rhodeisland.com', 'mail2rich.com', 'mail2richard.com', 'mail2ricky.com', 'mail2ride.com', 'mail2riley.com', 'mail2rita.com', 'mail2rob.com', 'mail2robert.com', 'mail2roberta.com', 'mail2robin.com', 'mail2rock.com', 'mail2rocker.com', 'mail2rod.com', 'mail2rodney.com', 'mail2romania.com', 'mail2rome.com', 'mail2ron.com', 'mail2ronald.com', 'mail2ronnie.com', 'mail2rose.com', 'mail2rosie.com', 'mail2roy.com', 'mail2rudy.com', 'mail2rugby.com', 'mail2runner.com', 'mail2russell.com', 'mail2russia.com', 'mail2russian.com', 'mail2rusty.com', 'mail2ruth.com', 'mail2rwanda.com', 'mail2ryan.com', 'mail2sa.com', 'mail2sabrina.com', 'mail2safe.com', 'mail2sagittarius.com', 'mail2sail.com', 'mail2sailor.com', 'mail2sal.com', 'mail2salaam.com', 'mail2sam.com', 'mail2samantha.com', 'mail2samoa.com', 'mail2samurai.com', 'mail2sandra.com', 'mail2sandy.com', 'mail2sanfrancisco.com', 'mail2sanmarino.com', 'mail2santa.com', 'mail2sara.com', 'mail2sarah.com', 'mail2sat.com', 'mail2saturn.com', 'mail2saudi.com', 'mail2saudiarabia.com', 'mail2save.com', 'mail2savings.com', 'mail2school.com', 'mail2scientist.com', 'mail2scorpio.com', 'mail2scott.com', 'mail2sean.com', 'mail2search.com', 'mail2seattle.com', 'mail2secretagent.com', 'mail2senate.com', 'mail2senegal.com', 'mail2sensual.com', 'mail2seth.com', 'mail2sevenseas.com', 'mail2sexy.com', 'mail2seychelles.com', 'mail2shane.com', 'mail2sharon.com', 'mail2shawn.com', 'mail2ship.com', 'mail2shirley.com', 'mail2shoot.com', 'mail2shuttle.com', 'mail2sierraleone.com', 'mail2simon.com', 'mail2singapore.com', 'mail2single.com', 'mail2site.com', 'mail2skater.com', 'mail2skier.com', 'mail2sky.com', 'mail2sleek.com', 'mail2slim.com', 'mail2slovakia.com', 'mail2slovenia.com', 'mail2smile.com', 'mail2smith.com', 'mail2smooth.com', 'mail2soccer.com', 'mail2soccerfan.com', 'mail2socialist.com', 'mail2soldier.com', 'mail2somalia.com', 'mail2son.com', 'mail2song.com', 'mail2sos.com', 'mail2sound.com', 'mail2southafrica.com', 'mail2southamerica.com', 'mail2southcarolina.com', 'mail2southdakota.com', 'mail2southkorea.com', 'mail2southpole.com', 'mail2spain.com', 'mail2spanish.com', 'mail2spare.com', 'mail2spectrum.com', 'mail2splash.com', 'mail2sponsor.com', 'mail2sports.com', 'mail2srilanka.com', 'mail2stacy.com', 'mail2stan.com', 'mail2stanley.com', 'mail2star.com', 'mail2state.com', 'mail2stephanie.com', 'mail2steve.com', 'mail2steven.com', 'mail2stewart.com', 'mail2stlouis.com', 'mail2stock.com', 'mail2stockholm.com', 'mail2stockmarket.com', 'mail2storage.com', 'mail2store.com', 'mail2strong.com', 'mail2student.com', 'mail2studio.com', 'mail2studio54.com', 'mail2stuntman.com', 'mail2subscribe.com', 'mail2sudan.com', 'mail2superstar.com', 'mail2surfer.com', 'mail2suriname.com', 'mail2susan.com', 'mail2suzie.com', 'mail2swaziland.com', 'mail2sweden.com', 'mail2sweetheart.com', 'mail2swim.com', 'mail2swimmer.com', 'mail2swiss.com', 'mail2switzerland.com', 'mail2sydney.com', 'mail2sylvia.com', 'mail2syria.com', 'mail2taboo.com', 'mail2taiwan.com', 'mail2tajikistan.com', 'mail2tammy.com', 'mail2tango.com', 'mail2tanya.com', 'mail2tanzania.com', 'mail2tara.com', 'mail2taurus.com', 'mail2taxi.com', 'mail2taxidermist.com', 'mail2taylor.com', 'mail2taz.com', 'mail2teacher.com', 'mail2technician.com', 'mail2ted.com', 'mail2telephone.com', 'mail2teletubbie.com', 'mail2tenderness.com', 'mail2tennessee.com', 'mail2tennis.com', 'mail2tennisfan.com', 'mail2terri.com', 'mail2terry.com', 'mail2test.com', 'mail2texas.com', 'mail2thailand.com', 'mail2therapy.com', 'mail2think.com', 'mail2tickets.com', 'mail2tiffany.com', 'mail2tim.com', 'mail2time.com', 'mail2timothy.com', 'mail2tina.com', 'mail2titanic.com', 'mail2toby.com', 'mail2todd.com', 'mail2togo.com', 'mail2tom.com', 'mail2tommy.com', 'mail2tonga.com', 'mail2tony.com', 'mail2touch.com', 'mail2tourist.com', 'mail2tracey.com', 'mail2tracy.com', 'mail2tramp.com', 'mail2travel.com', 'mail2traveler.com', 'mail2travis.com', 'mail2trekkie.com', 'mail2trex.com', 'mail2triallawyer.com', 'mail2trick.com', 'mail2trillionaire.com', 'mail2troy.com', 'mail2truck.com', 'mail2trump.com', 'mail2try.com', 'mail2tunisia.com', 'mail2turbo.com', 'mail2turkey.com', 'mail2turkmenistan.com', 'mail2tv.com', 'mail2tycoon.com', 'mail2tyler.com', 'mail2u4me.com', 'mail2uae.com', 'mail2uganda.com', 'mail2uk.com', 'mail2ukraine.com', 'mail2uncle.com', 'mail2unsubscribe.com', 'mail2uptown.com', 'mail2uruguay.com', 'mail2usa.com', 'mail2utah.com', 'mail2uzbekistan.com', 'mail2v.com', 'mail2vacation.com', 'mail2valentines.com', 'mail2valerie.com', 'mail2valley.com', 'mail2vamoose.com', 'mail2vanessa.com', 'mail2vanuatu.com', 'mail2venezuela.com', 'mail2venous.com', 'mail2venus.com', 'mail2vermont.com', 'mail2vickie.com', 'mail2victor.com', 'mail2victoria.com', 'mail2vienna.com', 'mail2vietnam.com', 'mail2vince.com', 'mail2virginia.com', 'mail2virgo.com', 'mail2visionary.com', 'mail2vodka.com', 'mail2volleyball.com', 'mail2waiter.com', 'mail2wallstreet.com', 'mail2wally.com', 'mail2walter.com', 'mail2warren.com', 'mail2washington.com', 'mail2wave.com', 'mail2way.com', 'mail2waycool.com', 'mail2wayne.com', 'mail2webmaster.com', 'mail2webtop.com', 'mail2webtv.com', 'mail2weird.com', 'mail2wendell.com', 'mail2wendy.com', 'mail2westend.com', 'mail2westvirginia.com', 'mail2whether.com', 'mail2whip.com', 'mail2white.com', 'mail2whitehouse.com', 'mail2whitney.com', 'mail2why.com', 'mail2wilbur.com', 'mail2wild.com', 'mail2willard.com', 'mail2willie.com', 'mail2wine.com', 'mail2winner.com', 'mail2wired.com', 'mail2wisconsin.com', 'mail2woman.com', 'mail2wonder.com', 'mail2world.com', 'mail2worship.com', 'mail2wow.com', 'mail2www.com', 'mail2wyoming.com', 'mail2xfiles.com', 'mail2xox.com', 'mail2yachtclub.com', 'mail2yahalla.com', 'mail2yemen.com', 'mail2yes.com', 'mail2yugoslavia.com', 'mail2zack.com', 'mail2zambia.com', 'mail2zenith.com', 'mail2zephir.com', 'mail2zeus.com', 'mail2zipper.com', 'mail2zoo.com', 'mail2zoologist.com', 'mail2zurich.com', 'mail3000.com', 'mail333.com', 'mailandftp.com', 'mailandnews.com', 'mailas.com', 'mailasia.com', 'mailbolt.com', 'mailbomb.net', 'mailboom.com', 'mailbox.as', 'mailbox.co.za', 'mailbox.gr', 'mailbox.hu', 'mailbr.com.br', 'mailc.net', 'mailcan.com', 'mailcc.com', 'mailchoose.co', 'mailcity.com', 'mailclub.fr', 'mailclub.net', 'mailexcite.com', 'mailforce.net', 'mailftp.com', 'mailgate.gr', 'mailgenie.net', 'mailhaven.com', 'mailhood.com', 'mailingweb.com', 'mailisent.com', 'mailite.com', 'mailme.dk', 'mailmight.com', 'mailmij.nl', 'mailnew.com', 'mailops.com', 'mailoye.com', 'mailpanda.com', 'mailpost.zzn.com', 'mailpride.com', 'mailpuppy.com', 'mailroom.com', 'mailru.com', 'mailsent.net', 'mailshuttle.com', 'mailstart.com', 'mailstartplus.com', 'mailsurf.com', 'mailtag.com', 'mailto.de', 'mailup.net', 'mailwire.com', 'maktoob.com', 'malayalamtelevision.net', 'manager.de', 'mantrafreenet.com', 'mantramail.com', 'mantraonline.com', 'marchmail.com', 'mariah-carey.ml.org', 'mariahc.com', 'marijuana.nl', 'marketing.lu', 'married-not.com', 'marsattack.com', 'martindalemail.com', 'masrawy.com', 'matmail.com', 'mauimail.com', 'mauritius.com', 'maxleft.com', 'maxmail.co.uk', 'mbox.com.au', 'mchsi.com', 'mciworldcom.net', 'me-mail.hu', 'me.com', 'medical.net.au', 'medione.net', 'medmail.com', 'medscape.com', 'meetingmall.com', 'megago.com', 'megamail.pt', 'megapathdsl.net', 'megapoint.com', 'mehrani.com', 'mehtaweb.com', 'mekhong.com', 'melodymail.com', 'meloo.com', 'members.student.com', 'message.hu', 'messages.to', 'metacrawler.com', 'metalfan.com', 'metta.lk', 'miatadriver.com', 'miesto.sk', 'mighty.co.za', 'miho-nakayama.com', 'mikrotamanet.com', 'millionaireintraining.com', 'milmail.com', 'mindless.com', 'mindspring.com', 'mini-mail.com', 'misery.net', 'mittalweb.com', 'mixmail.com', 'mjfrogmail.com', 'ml1.net', 'mobilbatam.com', 'mochamail.com', 'mohammed.com', 'moldova.cc', 'moldova.com', 'moldovacc.com', 'money.net', 'montevideo.com.uy', 'moonman.com', 'moose-mail.com', 'mortaza.com', 'mosaicfx.com', 'most-wanted.com', 'mostlysunny.com', 'motormania.com', 'movemail.com', 'movieluver.com', 'mp4.it', 'mr-potatohead.com', 'mrpost.com', 'mscold.com', 'msgbox.com', 'msn.com', 'mttestdriver.com', 'mundomail.net', 'munich.com', 'music.com', 'musician.org', 'musicscene.org', 'mybox.it', 'mycabin.com', 'mycampus.com', 'mycity.com', 'mycool.com', 'mydomain.com', 'mydotcomaddress.com', 'myfamily.com', 'mygo.com', 'myiris.com', 'mynamedot.com', 'mynetaddress.com', 'myownemail.com', 'myownfriends.com', 'mypad.com', 'mypersonalemail.com', 'myplace.com', 'myrealbox.com', 'myremarq.com', 'myself.com', 'mystupidjob.com', 'mythirdage.com', 'myway.com', 'myworldmail.com', 'n2.com', 'n2business.com', 'n2mail.com', 'n2software.com', 'nabc.biz', 'nafe.com', 'nagpal.net', 'nakedgreens.com', 'name.com', 'nameplanet.com', 'nandomail.com', 'naplesnews.net', 'naseej.com', 'nate.com', 'nativestar.net', 'nativeweb.net', 'naui.net', 'nauticom.net', 'naver.com', 'navigator.lv', 'navy.org', 'naz.com', 'nchoicemail.com', 'neeva.net', 'nemra1.com', 'nenter.com', 'neo.rr.com', 'nervhq.org', 'net-pager.net', 'net4b.pt', 'net4you.at', 'netbounce.com', 'netbroadcaster.com', 'netby.dk', 'netcenter-vn.net', 'netcom.ca', 'netcom.com', 'netcourrier.com', 'netexecutive.com', 'netexpressway.com', 'netgenie.com', 'netian.com', 'netizen.com.ar', 'netlane.com', 'netlimit.com', 'netmanor.com', 'netmongol.com', 'netnet.com.sg', 'netpiper.com', 'netposta.net', 'netradiomail.com', 'netralink.com', 'netscape.com', 'netscape.net', 'netscapeonline.co.uk', 'netsero.net', 'netspeedway.com', 'netsquare.com', 'netster.com', 'nettaxi.com', 'netzero.com', 'netzero.net', 'neuf.fr', 'newmail.com', 'newmail.net', 'newmail.ru', 'newyork.com', 'nexxmail.com', 'nfmail.com', 'nhmail.com', 'nicebush.com', 'nicegal.com', 'nicholastse.net', 'nicolastse.com', 'nightmail.com', 'nikopage.com', 'nimail.com', 'nirvanafan.com', 'noavar.com', 'norika-fujiwara.com', 'norikomail.com', 'northgates.net', 'nospammail.net', 'ntlworld.com', 'ntscan.com', 'ny.com', 'nyc.com', 'nycmail.com', 'nzoomail.com', 'o-tay.com', 'o2.co.uk', 'oaklandas-fan.com', 'oceanfree.net', 'oddpost.com', 'odmail.com', 'office-email.com', 'officedomain.com', 'offroadwarrior.com', 'oi.com.br', 'oicexchange.com', 'okbank.com', 'okhuman.com', 'okmad.com', 'okmagic.com', 'okname.net', 'okuk.com', 'oldies1041.com', 'oldies104mail.com', 'ole.com', 'olemail.com', 'olg.com', 'olympist.net', 'omaninfo.com', 'onebox.com', 'onenet.com.ar', 'onet.pl', 'oninet.pt', 'online.de', 'online.ie', 'onlinewiz.com', 'onmilwaukee.com', 'onobox.com', 'onvillage.com', 'operafan.com', 'operamail.com', 'optician.com', 'optonline.net', 'optusnet.com.au', 'orange.fr', 'orange.net', 'orbitel.bg', 'orgmail.net', 'osite.com.br', 'oso.com', 'otakumail.com', 'our-computer.com', 'our-office.com', 'our.st', 'ourbrisbane.com', 'ournet.md', 'outel.com', 'outgun.com', 'outlook.com', 'outlook.com.br', 'over-the-rainbow.com', 'ownmail.net', 'ozbytes.net.au', 'ozemail.com.au', 'pacbell.net', 'pacific-re.com', 'packersfan.com', 'pagina.de', 'pagons.org', 'pakistanoye.com', 'palestinemail.com', 'parkjiyoon.com', 'parrot.com', 'parsmail.com', 'partlycloudy.com', 'partynight.at', 'parvazi.com', 'passwordmail.com', 'pathfindermail.com', 'patmedia.net', 'pconnections.net', 'pcpostal.com', 'pcsrock.com', 'peachworld.com', 'pediatrician.com', 'pemail.net', 'penpen.com', 'peoplepc.com', 'peopleweb.com', 'perfectmail.com', 'personal.ro', 'personales.com', 'petml.com', 'pettypool.com', 'pezeshkpour.com', 'phayze.com', 'phreaker.net', 'pickupman.com', 'picusnet.com', 'pigpig.net', 'pinoymail.com', 'pipeline.com', 'piracha.net', 'pisem.net', 'planet-mail.com', 'planet.nl', 'planetaccess.com', 'planetall.com', 'planetarymotion.net', 'planetdirect.com', 'planetearthinter.net', 'planetout.com', 'plasa.com', 'playersodds.com', 'playful.com', 'plusmail.com.br', 'pmail.net', 'pobox.com', 'pobox.hu', 'pobox.sk', 'pochta.ru', 'poczta.fm', 'poetic.com', 'polbox.com', 'policeoffice.com', 'pool-sharks.com', 'poond.com', 'popaccount.com', 'popmail.com', 'popsmail.com', 'popstar.com', 'populus.net', 'portableoffice.com', 'portugalmail.com', 'portugalmail.pt', 'portugalnet.com', 'positive-thinking.com', 'post.com', 'post.cz', 'post.sk', 'posta.net', 'posta.ro', 'postaccesslite.com', 'postafree.com', 'postaweb.com', 'poste.it', 'postinbox.com', 'postino.ch', 'postmark.net', 'postmaster.co.uk', 'postpro.net', 'pousa.com', 'powerfan.com', 'praize.com', 'premiumservice.com', 'presidency.com', 'press.co.jp', 'priest.com', 'primposta.com', 'primposta.hu', 'pro.hu', 'probemail.com', 'prodigy.net', 'prodigy.net.mx', 'progetplus.it', 'programmer.net', 'programozo.hu', 'proinbox.com', 'project2k.com', 'prolaunch.com', 'promessage.com', 'prontomail.com', 'protonmail.com', 'psi.net', 'psv-supporter.com', 'ptd.net', 'public.usa.com', 'publicist.com', 'pulp-fiction.com', 'punkass.com', 'qatarmail.com', 'qis.net', 'qprfans.com', 'qq.com', 'qrio.com', 'quackquack.com', 'quakemail.com', 'qudsmail.com', 'quepasa.com', 'quickwebmail.com', 'quiklinks.com', 'quikmail.com', 'qwest.net', 'qwestoffice.net', 'r-o-o-t.com', 'r7.com', 'raakim.com', 'racedriver.com', 'racefanz.com', 'racingfan.com.au', 'racingmail.com', 'radicalz.com', 'ragingbull.com', 'rambler.ru', 'ranmamail.com', 'rastogi.net', 'ratt-n-roll.com', 'rattle-snake.com', 'ravearena.com', 'ravemail.com', 'razormail.com', 'rccgmail.org', 'rcn.com', 'realemail.net', 'reallyfast.biz', 'realradiomail.com', 'recycler.com', 'rediffmail.com', 'rediffmailpro.com', 'rednecks.com', 'redseven.de', 'redsfans.com', 'reggafan.com', 'registerednurses.com', 'repairman.com', 'reply.hu', 'representative.com', 'rescueteam.com', 'resumemail.com', 'rezai.com', 'richmondhill.com', 'rickymail.com', 'rin.ru', 'riopreto.com.br', 'rn.com', 'roadrunner.com', 'roanokemail.com', 'rock.com', 'rocketmail.com', 'rockfan.com', 'rodrun.com', 'rome.com', 'roosh.com', 'rotfl.com', 'roughnet.com', 'rr.com', 'rrohio.com', 'rsub.com', 'rubyridge.com', 'runbox.com', 'rushpost.com', 'ruttolibero.com', 'rvshop.com', 's-mail.com', 'sabreshockey.com', 'sacbeemail.com', 'safarimail.com', 'safe-mail.net', 'sagra.lu', 'sailormoon.com', 'saintly.com', 'saintmail.net', 'sale-sale-sale.com', 'salehi.net', 'samerica.com', 'samilan.net', 'sammimail.com', 'sanfranmail.com', 'sanook.com', 'sapo.pt', 'sativa.ro.org', 'saudia.com', 'sayhi.net', 'sbcglobal.net', 'scandalmail.com', 'schizo.com', 'schoolemail.com', 'schoolmail.com', 'schoolsucks.com', 'schweiz.org', 'sci.fi', 'science.com.au', 'scientist.com', 'scifianime.com', 'scottishmail.co.uk', 'scubadiving.com', 'seanet.com', 'searchwales.com', 'sebil.com', 'secret-police.com', 'secretservices.net', 'seductive.com', 'seekstoyboy.com', 'seguros.com.br', 'send.hu', 'sendme.cz', 'sent.com', 'sentrismail.com', 'serga.com.ar', 'servemymail.com', 'sesmail.com', 'sexmagnet.com', 'seznam.cz', 'sfr.fr', 'shahweb.net', 'shaniastuff.com', 'sharewaredevelopers.com', 'sharmaweb.com', 'shaw.ca', 'she.com', 'shootmail.com', 'shotgun.hu', 'shuf.com', 'sialkotcity.com', 'sialkotian.com', 'sialkotoye.com', 'sify.com', 'silkroad.net', 'sina.cn', 'sina.com', 'sinamail.com', 'singapore.com', 'singmail.com', 'singnet.com.sg', 'singpost.com', 'skafan.com', 'skim.com', 'skizo.hu', 'sky.com', 'skynet.be', 'slamdunkfan.com', 'slingshot.com', 'slo.net', 'slotter.com', 'smapxsmap.net', 'smileyface.comsmithemail.net', 'smoothmail.com', 'snail-mail.net', 'snail-mail.ney', 'snakemail.com', 'sndt.net', 'sneakemail.com', 'snet.net', 'snip.net', 'sniper.hu', 'snoopymail.com', 'snowboarding.com', 'snowdonia.net', 'socamail.com', 'socceramerica.net', 'soccermail.com', 'soccermomz.com', 'sociologist.com', 'softhome.net', 'sol.dk', 'soldier.hu', 'soon.com', 'soulfoodcookbook.com', 'sp.nl', 'space-bank.com', 'space-man.com', 'space-ship.com', 'space-travel.com', 'space.com', 'spaceart.com', 'spacebank.com', 'spacemart.com', 'spacetowns.com', 'spacewar.com', 'spamex.com', 'spartapiet.com', 'spazmail.com', 'speedemail.net', 'speedpost.net', 'speedrules.com', 'speedrulz.com', 'speedy.com.ar', 'spils.com', 'spinfinder.com', 'sportemail.com', 'sportsmail.com', 'sporttruckdriver.com', 'spray.no', 'spray.se', 'sprintmail.com', 'sprynet.com', 'spymac.com', 'srilankan.net', 'st-davids.net', 'stade.fr', 'stalag13.com', 'stargateradio.com', 'starmail.com', 'starmail.org', 'starmedia.com', 'starplace.com', 'starpower.net', 'starspath.com', 'start.com.au', 'starting-point.com', 'startrekmail.com', 'stealthmail.com', 'stockracer.com', 'stones.com', 'stopdropandroll.com', 'storksite.com', 'stribmail.com', 'strompost.com', 'strongguy.com', 'studentcenter.org', 'subnetwork.com', 'subram.com', 'sudanmail.net', 'suhabi.com', 'suisse.org', 'sukhumvit.net', 'sunpoint.net', 'sunrise-sunset.com', 'sunsgame.com', 'sunumail.sn', 'superdada.com', 'supereva.it', 'supermail.ru', 'surat.com', 'surf3.net', 'surfree.com', 'surfy.net', 'surimail.com', 'survivormail.com', 'swbell.net', 'sweb.cz', 'swiftdesk.com', 'swingeasyhithard.com', 'swingfan.com', 'swipermail.zzn.com', 'swirve.com', 'swissinfo.org', 'swissmail.net', 'switchboardmail.com', 'switzerland.org', 'swva.net', 'sx172.com', 'sympatico.ca', 'syom.com', 'syriamail.com', 't-online.de', 't2mail.com', 'takuyakimura.com', 'talk21.com', 'talkcity.com', 'talktalk.co.uk', 'tamil.com', 'tampabay.rr.com', 'tatanova.com', 'tbwt.com', 'tds.net', 'teamdiscovery.com', 'teamtulsa.net', 'tech4peace.org', 'techemail.com', 'techie.com', 'technisamail.co.za', 'technologist.com', 'techpointer.com', 'techscout.com', 'techseek.com', 'techspot.com', 'teenagedirtbag.com', 'telebot.com', 'telebot.net', 'teleline.es', 'telenet.be', 'telerymd.com', 'teleserve.dynip.com', 'teletu.it', 'telinco.net', 'telkom.net', 'telpage.net', 'telus.net', 'temtulsa.net', 'tenchiclub.com', 'tenderkiss.com', 'tennismail.com', 'terra.cl', 'terra.com', 'terra.com.ar', 'terra.com.br', 'terra.es', 'tfanus.com.er', 'tfz.net', 'thai.com', 'thaimail.com', 'thaimail.net', 'the-african.com', 'the-airforce.com', 'the-aliens.com', 'the-american.com', 'the-animal.com', 'the-army.com', 'the-astronaut.com', 'the-beauty.com', 'the-big-apple.com', 'the-biker.com', 'the-boss.com', 'the-brazilian.com', 'the-canadian.com', 'the-canuck.com', 'the-captain.com', 'the-chinese.com', 'the-country.com', 'the-cowboy.com', 'the-davis-home.com', 'the-dutchman.com', 'the-eagles.com', 'the-englishman.com', 'the-fastest.net', 'the-fool.com', 'the-frenchman.com', 'the-galaxy.net', 'the-genius.com', 'the-gentleman.com', 'the-german.com', 'the-gremlin.com', 'the-hooligan.com', 'the-italian.com', 'the-japanese.com', 'the-lair.com', 'the-madman.com', 'the-mailinglist.com', 'the-marine.com', 'the-master.com', 'the-mexican.com', 'the-ministry.com', 'the-monkey.com', 'the-newsletter.net', 'the-pentagon.com', 'the-police.com', 'the-prayer.com', 'the-professional.com', 'the-quickest.com', 'the-russian.com', 'the-snake.com', 'the-spaceman.com', 'the-stock-market.com', 'the-student.net', 'the-whitehouse.net', 'the-wild-west.com', 'the18th.com', 'thecoolguy.com', 'thecriminals.com', 'thedoghousemail.com', 'thedorm.com', 'theend.hu', 'theglobe.com', 'thegolfcourse.com', 'thegooner.com', 'theheadoffice.com', 'thelanddownunder.com', 'themillionare.net', 'theoffice.net', 'thepokerface.com', 'thepostmaster.net', 'theraces.com', 'theracetrack.com', 'thestreetfighter.com', 'theteebox.com', 'thewatercooler.com', 'thewebpros.co.uk', 'thewizzard.com', 'thewizzkid.com', 'thezhangs.net', 'thirdage.com', 'thisgirl.com', 'thoic.com', 'thundermail.com', 'tidni.com', 'timein.net', 'tin.it', 'tiscali.at', 'tiscali.be', 'tiscali.co.uk', 'tiscali.it', 'tiscali.lu', 'tiscali.se', 'tkcity.com', 'toolsource.com', 'topchat.com', 'topgamers.co.uk', 'topletter.com', 'topmail.com.ar', 'topsurf.com', 'topteam.bg', 'torchmail.com', 'tot.net', 'totalmusic.net', 'toughguy.net', 'tpg.com.au', 'travel.li', 'trialbytrivia.com', 'tritium.net', 'trmailbox.com', 'tropicalstorm.com', 'truckers.com', 'truckerz.com', 'truckracer.com', 'trust-me.com', 'tsamail.co.za', 'ttml.co.in', 'tunisiamail.com', 'turkey.com', 'tvcablenet.be', 'twinstarsmail.com', 'tycoonmail.com', 'typemail.com', 'u2club.com', 'uae.ac', 'uaemail.com', 'ubbi.com', 'ubbi.com.br', 'uboot.com', 'uk2k.com', 'uk2net.com', 'uk7.net', 'uk8.net', 'ukbuilder.com', 'ukcool.com', 'ukdreamcast.com', 'ukmail.org', 'ukmax.com', 'ukr.net', 'uku.co.uk', 'ultapulta.com', 'ultrapostman.com', 'ummah.org', 'umpire.com', 'unbounded.com', 'unforgettable.com', 'uni.de', 'unican.es', 'unihome.com', 'universal.pt', 'uno.ee', 'uno.it', 'unofree.it', 'unomail.com', 'uol.com.ar', 'uol.com.br', 'uol.com.co', 'uol.com.mx', 'uol.com.ve', 'uole.com', 'uole.com.ve', 'uolmail.com', 'uomail.com', 'upf.org', 'ureach.com', 'urgentmail.biz', 'usa.com', 'usa.net', 'usaaccess.net', 'usanetmail.com', 'usermail.com', 'usit.net', 'usma.net', 'usmc.net', 'uswestmail.net', 'uu.net', 'uymail.com', 'uyuyuy.com', 'v-sexi.com', 'vahoo.com', 'varbizmail.com', 'vcmail.com', 'velnet.co.uk', 'velocall.com', 'verizon.net', 'verizonmail.com', 'veryfast.biz', 'veryspeedy.net', 'videotron.ca', 'violinmakers.co.uk', 'vip.gr', 'vipmail.ru', 'virgilio.it', 'virgin.net', 'virginmedia.com', 'virtualactive.com', 'virtualmail.com', 'visitmail.com', 'visitweb.com', 'visto.com', 'visualcities.com', 'vivavelocity.com', 'vivianhsu.net', 'vjmail.com', 'vjtimail.com', 'vlmail.com', 'vnn.vn', 'voila.fr', 'volcanomail.com', 'voo.be', 'vote-democrats.com', 'vote-hillary.com', 'vote-republicans.com', 'vote4gop.org', 'votenet.com', 'vr9.com', 'w3.to', 'wahoye.com', 'wales2000.net', 'wam.co.za', 'wanadoo.co.uk', 'wanadoo.es', 'wanadoo.fr', 'warmmail.com', 'warpmail.net', 'warrior.hu', 'waumail.com', 'wbdet.com', 'wearab.net', 'web-mail.com.ar', 'web-police.com', 'web.de', 'webave.com', 'webcammail.com', 'webcity.ca', 'webdream.com', 'webinbox.com', 'webindia123.com', 'webjump.com', 'webmail.bellsouth.net', 'webmail.co.yu', 'webmail.co.za', 'webmail.hu', 'webmails.com', 'webprogramming.com', 'webstable.net', 'webstation.com', 'websurfer.co.za', 'webtopmail.com', 'weedmail.com', 'weekmail.com', 'weekonline.com', 'wehshee.com', 'welsh-lady.com', 'whale-mail.com', 'whartontx.com', 'wheelweb.com', 'whipmail.com', 'whoever.com', 'whoopymail.com', 'wickedmail.com', 'wideopenwest.com', 'wildmail.com', 'windrivers.net', 'windstream.net', 'wingnutz.com', 'winmail.com.au', 'winning.com', 'witty.com', 'wiz.cc', 'wkbwmail.com', 'woh.rr.com', 'wolf-web.com', 'wombles.com', 'wonder-net.com', 'wongfaye.com', 'wooow.it', 'workmail.com', 'worldemail.com', 'worldmailer.com', 'worldnet.att.net', 'wosaddict.com', 'wouldilie.com', 'wow.com', 'wowgirl.com', 'wowmail.com', 'wowway.com', 'wp.pl', 'wptamail.com', 'wrestlingpages.com', 'wrexham.net', 'writeme.com', 'writemeback.com', 'wrongmail.com', 'wtvhmail.com', 'wwdg.com', 'www.com', 'www2000.net', 'wx88.net', 'wxs.net', 'wyrm.supernews.com', 'x-mail.net', 'x-networks.net', 'x5g.com', 'xmastime.com', 'xmsg.com', 'xoom.com', 'xoommail.com', 'xpressmail.zzn.com', 'xsmail.com', 'xuno.com', 'xzapmail.com', 'ya.ru', 'yada-yada.com', 'yaho.com', 'yahoo.ca', 'yahoo.co.id', 'yahoo.co.in', 'yahoo.co.jp', 'yahoo.co.kr', 'yahoo.co.nz', 'yahoo.co.uk', 'yahoo.com', 'yahoo.com.ar', 'yahoo.com.au', 'yahoo.com.br', 'yahoo.com.cn', 'yahoo.com.hk', 'yahoo.com.is', 'yahoo.com.mx', 'yahoo.com.ph', 'yahoo.com.ru', 'yahoo.com.sg', 'yahoo.de', 'yahoo.dk', 'yahoo.es', 'yahoo.fr', 'yahoo.ie', 'yahoo.in', 'yahoo.it', 'yahoo.jp', 'yahoo.ru', 'yahoo.se', 'yahoofs.com', 'yalla.com', 'yalla.com.lb', 'yalook.com', 'yam.com', 'yandex.com', 'yandex.ru', 'yapost.com', 'yawmail.com', 'yclub.com', 'yebox.com', 'yehaa.com', 'yehey.com', 'yemenmail.com', 'yepmail.net', 'yesbox.net', 'ygm.com', 'yifan.net', 'ymail.com', 'ynnmail.com', 'yogotemail.com', 'yopolis.com', 'youareadork.com', 'youpy.com', 'your-house.com', 'yourinbox.com', 'yourlover.net', 'yourname.ddns.org', 'yourname.freeservers.com', 'yournightmare.com', 'yours.com', 'yourssincerely.com', 'yoursubdomain.findhere.com', 'yoursubdomain.zzn.com', 'yourteacher.net', 'yourwap.com', 'youvegotmail.net', 'yuuhuu.net', 'yyhmail.com', 'zahadum.com', 'zcities.com', 'zdnetmail.com', 'zeeks.com', 'zeepost.nl', 'zensearch.net', 'zhaowei.net', 'zionweb.org', 'zip.net', 'zipido.com', 'ziplink.net', 'ziplip.com', 'zipmail.com', 'zipmail.com.br', 'zipmax.com', 'zmail.ru', 'zoho.com', 'zonnet.nl', 'zoominternet.net', 'zubee.com', 'zuvio.com', 'zuzzurello.com', 'zwallet.com', 'zybermail.com', 'zydecofan.com', 'zzn.com', 'zzom.co.uk'];
389
+
252
390
  const validateInput = (field, value) => {
391
+ var _field$validations, _field$validations$re;
392
+
253
393
  const isRequired = field.validations && field.validations.required;
254
394
  const minLength = field.validations && field.validations.minLength;
255
395
  const maxLength = field.validations && field.validations.maxLength;
256
- const regex = field.validations && field.validations.regex;
396
+ const hasRegex = field !== null && field !== void 0 && (_field$validations = field.validations) !== null && _field$validations !== void 0 && (_field$validations$re = _field$validations.regex) !== null && _field$validations$re !== void 0 && _field$validations$re.pattern ? true : false;
257
397
  const integer = field.dataType === 'integer';
258
398
  const decimal = field.dataType === 'decimal';
399
+ const isBusinessEmail = field.id === 'businessEmail';
259
400
 
260
401
  if (isRequired && !value) {
261
- const errorMessage = isRequired.message ? isRequired.message['en-GB'] : `${field.id} is required`;
402
+ var _isRequired$message, _field$name;
403
+
404
+ 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`;
262
405
  return {
263
406
  fieldId: field.id,
264
407
  groupId: field.groupId,
@@ -283,17 +426,28 @@ const validateInput = (field, value) => {
283
426
  message: errorMessage
284
427
  };
285
428
  }
429
+ /** Check Regex and Business Emails */
430
+
431
+
432
+ if (hasRegex && (value === null || value === void 0 ? void 0 : value.length) > 0) {
433
+ var _r$message;
286
434
 
287
- if (regex && value.length > 0) {
288
- //Had to make the string raw, as a string ususually is wrapped as '' and Regex couldnt use the regex patter as the string variant
289
- const regexPattern = RegExp(regex.pattern.raw);
435
+ const r = field.validations.regex;
436
+ 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`;
290
437
 
291
- if (!regexPattern.test(value)) {
292
- const errorMessage = regex.message ? regex.message['en-GB'] : `${field.id} is invalid`;
438
+ if (isValidRegex(field, value) && isBusinessEmail) {
439
+ if (!isBusinessEmailValid(field, value)) {
440
+ return {
441
+ fieldId: field.id,
442
+ groupId: field.groupId,
443
+ message: 'You must enter a business email address.'
444
+ };
445
+ }
446
+ } else if (!isValidRegex(field, value)) {
293
447
  return {
294
448
  fieldId: field.id,
295
449
  groupId: field.groupId,
296
- message: errorMessage
450
+ message: msg
297
451
  };
298
452
  }
299
453
  }
@@ -325,6 +479,45 @@ const validateInput = (field, value) => {
325
479
  }
326
480
  };
327
481
 
482
+ const isValidRegex = (field, value) => {
483
+ const regex = field.validations.regex.pattern;
484
+ const regexPattern = RegExp(regex);
485
+ if (!regexPattern.test(value)) return false;else return true;
486
+ };
487
+
488
+ const isBusinessEmailValid = (field, value) => {
489
+ const domain = value.split('@').pop();
490
+ if (!domains.includes(domain)) return true;else return false;
491
+ };
492
+
493
+ const MakeFieldType = field => {
494
+ var _field$editor, _field$editor$propert;
495
+
496
+ if (!field) return null;
497
+
498
+ if (field.dataType === 'string' && field.editor && field.editor.id === 'multiline') {
499
+ return 'textarea';
500
+ } else if (field.dataType === 'string' && field.editor && field.editor.id === 'list-dropdown') {
501
+ return 'dropdown';
502
+ } else if (field !== null && field !== void 0 && (_field$editor = field.editor) !== null && _field$editor !== void 0 && (_field$editor$propert = _field$editor.properties) !== null && _field$editor$propert !== void 0 && _field$editor$propert.readOnly || (field === null || field === void 0 ? void 0 : field.groupId) === 'private' || (field === null || field === void 0 ? void 0 : field.groupId) === 'settings') {
503
+ return 'hidden';
504
+ } else if (field.dataType === 'stringArray' || field.dataType === 'boolean') {
505
+ return 'checkbox';
506
+ } else if (field.dataType === 'string' && field.validations && field.validations.allowedValues) {
507
+ return 'radio';
508
+ } else if (field.dataType === 'integer') {
509
+ return 'number';
510
+ } else if (field.dataType === 'dateTime') {
511
+ return 'date';
512
+ } else if (field.dataFormat === 'daterange') {
513
+ return 'dateRange';
514
+ } else if (field.dataFormat === 'entry') {
515
+ return 'entryPicker';
516
+ } else {
517
+ return 'textfield';
518
+ }
519
+ };
520
+
328
521
  const formV2Sagas = [effects.takeEvery(SUBMIT_FORM_SUCCESS, formSuccess), effects.takeEvery(SUBMIT_FORM_FOR_VALIDATION, validateForm), effects.takeEvery(SUBMIT_FORM, submitForm$1), effects.takeEvery(SET_FORM_ID, fetchForm), effects.takeLatest(VALIDATE_FIELD, validateField$1), effects.takeEvery(PAGE_FORWARD, togglePage), effects.takeEvery(PAGE_BACK, togglePage), effects.takeEvery(SET_FORM_DATA, getEntryPickerData), effects.takeLatest(SET_FORM_DATA, setDefaultValueFields)];
329
522
 
330
523
  function* validateForm(action) {
@@ -349,7 +542,8 @@ function* validateField$1(action) {
349
542
 
350
543
  function* validateGroupfields(formId, groupId) {
351
544
  const state = yield effects.select();
352
- const postData = selectPostData(state, formId);
545
+ const selectPostData = makeSelectFormPostData(formId);
546
+ const postData = selectPostData(state);
353
547
  const selectFormFields = makeSelectFormFields(formId);
354
548
  const fields = selectFormFields(state);
355
549
  const groupFields = fields.filter(f => f.groupid == groupId);
@@ -373,7 +567,8 @@ function* validateGroupfields(formId, groupId) {
373
567
 
374
568
  function* validateAllfields(formId) {
375
569
  const state = yield effects.select();
376
- const postData = selectPostData(state, formId);
570
+ const selectPostData = makeSelectFormPostData(formId);
571
+ const postData = selectPostData(state);
377
572
  const selectFormFields = makeSelectFormFields(formId);
378
573
  const fields = selectFormFields(state);
379
574
  let newErrors = [];
@@ -398,8 +593,9 @@ function* validateSingleField(formId, fieldId, value) {
398
593
  const state = yield effects.select();
399
594
  const selectFormFields = makeSelectFormFields(formId);
400
595
  const fields = selectFormFields(state);
596
+ const selectFormFieldErrors = makeSelectFormFieldErrors(formId);
597
+ const errors = selectFormFieldErrors(state);
401
598
  const fieldData = fields.find(f => f.id == fieldId);
402
- const errors = selectFieldErrors(state, formId);
403
599
  const newErrors = []; //loop through current errors to remove any of the item we currently edit
404
600
 
405
601
  errors.forEach(error => {
@@ -423,7 +619,8 @@ function* togglePage(action) {
423
619
  pageIndex
424
620
  } = action;
425
621
  const state = yield effects.select();
426
- const formGroups = selectFormGroups(state, formId);
622
+ const selectFormGroups = makeSelectFormGroup(formId);
623
+ const formGroups = selectFormGroups(state);
427
624
 
428
625
  if (action.type === PAGE_FORWARD) {
429
626
  yield validateGroupfields(formId, formGroups[pageIndex].id);
@@ -439,12 +636,16 @@ function* togglePage(action) {
439
636
  }
440
637
 
441
638
  function* fetchForm(action) {
639
+ var _schema$groups;
640
+
442
641
  const formId = action.formId;
443
642
  const schema = yield getFormSchema(formId);
444
- const groups = schema.groups && schema.groups.length > 0 && schema.groups.filter(group => group.id !== 'private');
643
+ 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');
445
644
 
446
645
  if (formId && schema) {
447
- if (schema.groups && schema.groups.length > 0) {
646
+ var _schema$groups2, _submitButtonText$def;
647
+
648
+ if ((schema === null || schema === void 0 ? void 0 : (_schema$groups2 = schema.groups) === null || _schema$groups2 === void 0 ? void 0 : _schema$groups2.length) > 0) {
448
649
  yield effects.put({
449
650
  type: SET_CURRENT_PAGE,
450
651
  formId: formId,
@@ -454,12 +655,21 @@ function* fetchForm(action) {
454
655
  });
455
656
  }
456
657
 
658
+ const submitButtonText = schema.fields.find(f => f.id === 'submitButtonText');
659
+ const fields = schema === null || schema === void 0 ? void 0 : schema.fields.map(field => {
660
+ return { ...field,
661
+ type: MakeFieldType(field)
662
+ };
663
+ });
457
664
  yield effects.put({
458
665
  type: SET_FORM_DATA,
459
666
  formId: formId,
460
- fields: schema.fields,
667
+ fields,
461
668
  groups: groups,
462
- defaultLanguage: schema.defaultLanguage
669
+ defaultLanguage: schema.defaultLanguage,
670
+ settings: {
671
+ submitButtonText: submitButtonText === null || submitButtonText === void 0 ? void 0 : (_submitButtonText$def = submitButtonText.default) === null || _submitButtonText$def === void 0 ? void 0 : _submitButtonText$def['en-GB']
672
+ }
463
673
  });
464
674
  }
465
675
  }
@@ -471,11 +681,11 @@ function* formSuccess(action) {
471
681
  const redirect = fields.find(f => f.id === 'formSettingsRedirect');
472
682
  const message = fields.find(f => f.id === 'formSettingsMessage');
473
683
 
474
- if (redirect && redirect.default) {
684
+ if (redirect !== null && redirect !== void 0 && redirect.default) {
475
685
  window.location.href = redirect.default['en-GB'];
476
686
  }
477
687
 
478
- if (message && message.default) {
688
+ if (message !== null && message !== void 0 && message.default) {
479
689
  yield effects.put({
480
690
  type: SET_SUCCESS_MESSAGE,
481
691
  message: message.default['en-GB'],
@@ -485,25 +695,31 @@ function* formSuccess(action) {
485
695
  }
486
696
 
487
697
  function* submitForm$1(action) {
698
+ const {
699
+ formId
700
+ } = action || {};
488
701
  const state = yield effects.select();
489
- const errors = selectFieldErrors(state, action.formId);
490
- const canSubmit = errors && errors.length == 0;
702
+ const selectFormFieldErrors = makeSelectFormFieldErrors(formId);
703
+ const errors = selectFormFieldErrors(state);
704
+ const canSubmit = (errors === null || errors === void 0 ? void 0 : errors.length) === 0;
491
705
 
492
706
  if (canSubmit) {
707
+ var _formResObj$sys;
708
+
493
709
  yield effects.put({
494
710
  type: SET_SUBMITTING_FORM,
495
711
  isSubmitting: true,
496
712
  formId: action.formId
497
713
  });
498
714
  const forms = yield effects.select(selectForms);
499
- const rawData = forms.get(action.formId);
715
+ const rawData = forms[action.formId];
500
716
  const formObj = {
501
717
  contentType: action.formId,
502
718
  formPost: rawData.data
503
719
  };
504
720
  const formResObj = yield postForm(formObj);
505
721
 
506
- if (formResObj && formResObj.sys && formResObj.sys.id) {
722
+ if (formResObj !== null && formResObj !== void 0 && (_formResObj$sys = formResObj.sys) !== null && _formResObj$sys !== void 0 && _formResObj$sys.id) {
507
723
  yield effects.put({
508
724
  type: SUBMIT_FORM_SUCCESS,
509
725
  formId: action.formId
@@ -523,7 +739,7 @@ function* setDefaultValueFields(action) {
523
739
  fields,
524
740
  defaultLanguage
525
741
  } = action;
526
- const entryId = yield effects.select(state => state.getIn(['routing', 'entry', 'sys', 'id']));
742
+ const entryId = yield effects.select(routing.selectors.selectRouteEntryEntryId);
527
743
  let fieldObj = {};
528
744
  fields.forEach(field => {
529
745
  if (field.dataType == 'string' && field.default) {
@@ -575,14 +791,56 @@ function* getEntryPickerData(action) {
575
791
  }
576
792
  }
577
793
 
578
- const toJS = WrappedComponent => wrappedComponentProps => {
579
- const KEY = 0;
580
- const VALUE = 1;
581
- const propsJS = Object.entries(wrappedComponentProps).reduce((newProps, wrappedComponentProp) => {
582
- newProps[wrappedComponentProp[KEY]] = immutable.Iterable.isIterable(wrappedComponentProp[VALUE]) ? wrappedComponentProp[VALUE].toJS() : wrappedComponentProp[VALUE];
583
- return newProps;
584
- }, {});
585
- return /*#__PURE__*/React__default["default"].createElement(WrappedComponent, propsJS);
794
+ const action = (type, payload = {}) => ({
795
+ type,
796
+ ...payload
797
+ });
798
+
799
+ const submitForm = formId => action(SUBMIT_FORM_FOR_VALIDATION, {
800
+ formId
801
+ });
802
+ const setFormId = formId => action(SET_FORM_ID, {
803
+ formId
804
+ });
805
+ const setValue = (formId, id, value) => action(SET_FIELD_VALUE, {
806
+ formId,
807
+ id,
808
+ value
809
+ });
810
+ const setCheckboxValue = (formId, id, value, isChecked) => action(SET_CHECKBOX_VALUE, {
811
+ formId,
812
+ id,
813
+ value,
814
+ isChecked
815
+ });
816
+ const setDateRangeValues = (formId, id, dateType, value) => action(SET_DATE_RANGE_VALUES, {
817
+ formId,
818
+ id,
819
+ dateType,
820
+ value
821
+ });
822
+ const validateField = (formId, id, value) => action(VALIDATE_FIELD, {
823
+ formId,
824
+ id,
825
+ value
826
+ });
827
+ const togglePageForward = (formId, pageIndex) => action(PAGE_FORWARD, {
828
+ formId,
829
+ pageIndex
830
+ });
831
+ const togglePageBack = (formId, pageIndex) => action(PAGE_BACK, {
832
+ formId,
833
+ pageIndex
834
+ });
835
+ const actions = {
836
+ submitForm,
837
+ setFormId,
838
+ setValue,
839
+ setCheckboxValue,
840
+ setDateRangeValues,
841
+ validateField,
842
+ togglePageForward,
843
+ togglePageBack
586
844
  };
587
845
 
588
846
  //Brand
@@ -620,7 +878,7 @@ const FormStyled = styled__default["default"].form.withConfig({
620
878
  })(["", ";"], ({
621
879
  useDefaultTheme
622
880
  }) => {
623
- 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;}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;max-width:320px;width:100%;}textarea{height:200px;resize:none;}"], colors.error, colors.neutrals.base_white, colors.border));
881
+ 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;max-width:320px;width:100%;}textarea{height:200px;resize:none;}"], colors.error, colors.neutrals.base_white, colors.border));
624
882
  });
625
883
 
626
884
  const Label = ({
@@ -1026,7 +1284,7 @@ Dropdown.propTypes = {
1026
1284
 
1027
1285
  const CheckboxStyled = styled__default["default"].div.withConfig({
1028
1286
  displayName: "Checkbox__CheckboxStyled",
1029
- componentId: "s8ewuf-0"
1287
+ componentId: "sc-s8ewuf-0"
1030
1288
  })(["", ";"], ({
1031
1289
  useDefaultTheme
1032
1290
  }) => {
@@ -1305,7 +1563,7 @@ SingleDate.propTypes = {
1305
1563
 
1306
1564
  const DateRangeStyled = styled__default["default"].div.withConfig({
1307
1565
  displayName: "DateRange__DateRangeStyled",
1308
- componentId: "hnzg32-0"
1566
+ componentId: "sc-hnzg32-0"
1309
1567
  })(["", ";"], ({
1310
1568
  useDefaultTheme
1311
1569
  }) => {
@@ -1409,7 +1667,7 @@ DateRange.propTypes = {
1409
1667
 
1410
1668
  const EntryPickerStyled = styled__default["default"].div.withConfig({
1411
1669
  displayName: "EntryPicker__EntryPickerStyled",
1412
- componentId: "svnu18-0"
1670
+ componentId: "sc-svnu18-0"
1413
1671
  })(["", ";"], ({
1414
1672
  useDefaultTheme
1415
1673
  }) => {
@@ -1497,8 +1755,7 @@ const FormComposer = ({
1497
1755
  entries,
1498
1756
  setCheckboxValue
1499
1757
  }) => {
1500
- if (!fields || fields.length < 1) return null; //const arrayOfFields = Object.entries(fields).map(f => f[1]);
1501
-
1758
+ if (!fields || fields.length < 1) return null;
1502
1759
  return fields.map((field, idx) => {
1503
1760
  if (!field) return null;
1504
1761
 
@@ -1664,14 +1921,53 @@ FormComposer.propTypes = {
1664
1921
  setCheckboxValue: PropTypes__default["default"].func
1665
1922
  };
1666
1923
 
1924
+ const LoadingSpinner = ({
1925
+ className,
1926
+ color = '#fff',
1927
+ width = 20,
1928
+ height = 20
1929
+ }) => {
1930
+ return /*#__PURE__*/React__default["default"].createElement("svg", {
1931
+ className: className,
1932
+ width: `${width}px`,
1933
+ height: `${height}px`,
1934
+ viewBox: "0 0 100 100",
1935
+ preserveAspectRatio: "xMidYMid"
1936
+ }, /*#__PURE__*/React__default["default"].createElement("circle", {
1937
+ cx: "50",
1938
+ cy: "50",
1939
+ fill: "none",
1940
+ stroke: color,
1941
+ strokeWidth: "10",
1942
+ r: "35",
1943
+ strokeDasharray: "164.93361431346415 56.97787143782138",
1944
+ style: {
1945
+ animationPlayState: 'running',
1946
+ animationDelay: '0s'
1947
+ },
1948
+ transform: "rotate(311.547 50 50)"
1949
+ }, /*#__PURE__*/React__default["default"].createElement("animateTransform", {
1950
+ attributeName: "transform",
1951
+ type: "rotate",
1952
+ repeatCount: "indefinite",
1953
+ dur: "1s",
1954
+ values: "0 50 50;360 50 50",
1955
+ keyTimes: "0;1",
1956
+ style: {
1957
+ animationPlayState: 'running',
1958
+ animationDelay: '0s'
1959
+ }
1960
+ })));
1961
+ };
1962
+
1667
1963
  const ButtonStyled = styled__default["default"].button.withConfig({
1668
1964
  displayName: "Button__ButtonStyled",
1669
- componentId: "hr2oup-0"
1965
+ componentId: "sc-hr2oup-0"
1670
1966
  })(["", ";"], ({
1671
1967
  theme,
1672
1968
  useDefaultTheme
1673
1969
  }) => {
1674
- return styled.css(["", ""], useDefaultTheme && styled.css(["display:inline-block;cursor:pointer;margin:16px 0 0 0;padding:8px 16px;border-radius:3px;border:1px solid ", ";font-family:inherit;transition:opacity 200ms ease;&:hover{opacity:0.7;}"], theme.colors.border));
1970
+ return styled.css(["", ""], useDefaultTheme && styled.css(["display:inline-flex;align-items:center;justify-content:center;cursor:pointer;margin:16px 0 0 0;padding:8px 16px;border-radius:3px;border:1px solid ", ";font-family:inherit;transition:opacity 200ms ease;&:disabled{opacity:0.7;cursor:not-allowed;border-color:#f0f0f0;background:#f0f0f0;color:#dbdbdb;svg{margin-left:4px;circle{stroke:#dbdbdb;}}}&:hover{opacity:0.7;}"], theme.colors.border));
1675
1971
  });
1676
1972
 
1677
1973
  const Button = ({
@@ -1679,24 +1975,30 @@ const Button = ({
1679
1975
  type,
1680
1976
  text,
1681
1977
  action,
1978
+ loading,
1682
1979
  useDefaultTheme
1683
1980
  }) => {
1684
1981
  return /*#__PURE__*/React__default["default"].createElement(ButtonStyled, {
1685
1982
  className: `${className ? className : ''} btnSubmit`,
1686
1983
  type: type,
1687
1984
  onClick: () => action(),
1985
+ disabled: loading,
1688
1986
  useDefaultTheme: useDefaultTheme
1689
- }, text);
1987
+ }, text, loading && /*#__PURE__*/React__default["default"].createElement(LoadingSpinner, {
1988
+ height: 18,
1989
+ width: 18
1990
+ }));
1690
1991
  };
1691
1992
  Button.propTypes = {
1692
1993
  className: PropTypes__default["default"].string,
1693
1994
  type: PropTypes__default["default"].string,
1694
1995
  text: PropTypes__default["default"].string,
1695
1996
  action: PropTypes__default["default"].func,
1997
+ loading: PropTypes__default["default"].bool,
1696
1998
  useDefaultTheme: PropTypes__default["default"].bool
1697
1999
  };
1698
2000
 
1699
- const ThemeContext = React.createContext();
2001
+ const ThemeContext = /*#__PURE__*/React.createContext();
1700
2002
 
1701
2003
  const ThemeProvider = ({
1702
2004
  children,
@@ -1785,499 +2087,164 @@ const defaultTheme = {
1785
2087
  colors
1786
2088
  };
1787
2089
 
1788
- const divStyles = {
1789
- display: 'flex',
1790
- height: '100vh',
1791
- alignItems: 'center',
1792
- justifyContent: 'center',
1793
- flexDirection: 'Column'
1794
- };
1795
- const svgStyles = {
1796
- width: '80px',
1797
- height: '80px'
1798
- };
1799
- const headingStyles = {
1800
- margin: '0',
1801
- fontSize: '16px'
1802
- };
1803
- const Loading = () => {
1804
- return /*#__PURE__*/React__default["default"].createElement("div", {
1805
- style: divStyles
1806
- }, /*#__PURE__*/React__default["default"].createElement("h3", {
1807
- style: headingStyles
1808
- }, "Loading..."), /*#__PURE__*/React__default["default"].createElement("svg", {
1809
- xmlns: "http://www.w3.org/2000/svg",
1810
- className: "lds-spinner",
1811
- preserveAspectRatio: "xMidYMid",
1812
- viewBox: "0 0 100 100",
1813
- style: svgStyles
1814
- }, /*#__PURE__*/React__default["default"].createElement("rect", {
1815
- width: "6",
1816
- height: "12",
1817
- x: "47",
1818
- y: "24",
1819
- fill: "#DE1C8F",
1820
- rx: "9",
1821
- ry: "5"
1822
- }, /*#__PURE__*/React__default["default"].createElement("animate", {
1823
- attributeName: "opacity",
1824
- begin: "-0.9166666666666666s",
1825
- dur: "1s",
1826
- keyTimes: "0;1",
1827
- repeatCount: "indefinite",
1828
- values: "1;0"
1829
- })), /*#__PURE__*/React__default["default"].createElement("rect", {
1830
- width: "6",
1831
- height: "12",
1832
- x: "47",
1833
- y: "24",
1834
- fill: "#DE1C8F",
1835
- rx: "9",
1836
- ry: "5",
1837
- transform: "rotate(30 50 50)"
1838
- }, /*#__PURE__*/React__default["default"].createElement("animate", {
1839
- attributeName: "opacity",
1840
- begin: "-0.8333333333333334s",
1841
- dur: "1s",
1842
- keyTimes: "0;1",
1843
- repeatCount: "indefinite",
1844
- values: "1;0"
1845
- })), /*#__PURE__*/React__default["default"].createElement("rect", {
1846
- width: "6",
1847
- height: "12",
1848
- x: "47",
1849
- y: "24",
1850
- fill: "#DE1C8F",
1851
- rx: "9",
1852
- ry: "5",
1853
- transform: "rotate(60 50 50)"
1854
- }, /*#__PURE__*/React__default["default"].createElement("animate", {
1855
- attributeName: "opacity",
1856
- begin: "-0.75s",
1857
- dur: "1s",
1858
- keyTimes: "0;1",
1859
- repeatCount: "indefinite",
1860
- values: "1;0"
1861
- })), /*#__PURE__*/React__default["default"].createElement("rect", {
1862
- width: "6",
1863
- height: "12",
1864
- x: "47",
1865
- y: "24",
1866
- fill: "#DE1C8F",
1867
- rx: "9",
1868
- ry: "5",
1869
- transform: "rotate(90 50 50)"
1870
- }, /*#__PURE__*/React__default["default"].createElement("animate", {
1871
- attributeName: "opacity",
1872
- begin: "-0.6666666666666666s",
1873
- dur: "1s",
1874
- keyTimes: "0;1",
1875
- repeatCount: "indefinite",
1876
- values: "1;0"
1877
- })), /*#__PURE__*/React__default["default"].createElement("rect", {
1878
- width: "6",
1879
- height: "12",
1880
- x: "47",
1881
- y: "24",
1882
- fill: "#DE1C8F",
1883
- rx: "9",
1884
- ry: "5",
1885
- transform: "rotate(120 50 50)"
1886
- }, /*#__PURE__*/React__default["default"].createElement("animate", {
1887
- attributeName: "opacity",
1888
- begin: "-0.5833333333333334s",
1889
- dur: "1s",
1890
- keyTimes: "0;1",
1891
- repeatCount: "indefinite",
1892
- values: "1;0"
1893
- })), /*#__PURE__*/React__default["default"].createElement("rect", {
1894
- width: "6",
1895
- height: "12",
1896
- x: "47",
1897
- y: "24",
1898
- fill: "#DE1C8F",
1899
- rx: "9",
1900
- ry: "5",
1901
- transform: "rotate(150 50 50)"
1902
- }, /*#__PURE__*/React__default["default"].createElement("animate", {
1903
- attributeName: "opacity",
1904
- begin: "-0.5s",
1905
- dur: "1s",
1906
- keyTimes: "0;1",
1907
- repeatCount: "indefinite",
1908
- values: "1;0"
1909
- })), /*#__PURE__*/React__default["default"].createElement("rect", {
1910
- width: "6",
1911
- height: "12",
1912
- x: "47",
1913
- y: "24",
1914
- fill: "#DE1C8F",
1915
- rx: "9",
1916
- ry: "5",
1917
- transform: "rotate(180 50 50)"
1918
- }, /*#__PURE__*/React__default["default"].createElement("animate", {
1919
- attributeName: "opacity",
1920
- begin: "-0.4166666666666667s",
1921
- dur: "1s",
1922
- keyTimes: "0;1",
1923
- repeatCount: "indefinite",
1924
- values: "1;0"
1925
- })), /*#__PURE__*/React__default["default"].createElement("rect", {
1926
- width: "6",
1927
- height: "12",
1928
- x: "47",
1929
- y: "24",
1930
- fill: "#DE1C8F",
1931
- rx: "9",
1932
- ry: "5",
1933
- transform: "rotate(210 50 50)"
1934
- }, /*#__PURE__*/React__default["default"].createElement("animate", {
1935
- attributeName: "opacity",
1936
- begin: "-0.3333333333333333s",
1937
- dur: "1s",
1938
- keyTimes: "0;1",
1939
- repeatCount: "indefinite",
1940
- values: "1;0"
1941
- })), /*#__PURE__*/React__default["default"].createElement("rect", {
1942
- width: "6",
1943
- height: "12",
1944
- x: "47",
1945
- y: "24",
1946
- fill: "#DE1C8F",
1947
- rx: "9",
1948
- ry: "5",
1949
- transform: "rotate(240 50 50)"
1950
- }, /*#__PURE__*/React__default["default"].createElement("animate", {
1951
- attributeName: "opacity",
1952
- begin: "-0.25s",
1953
- dur: "1s",
1954
- keyTimes: "0;1",
1955
- repeatCount: "indefinite",
1956
- values: "1;0"
1957
- })), /*#__PURE__*/React__default["default"].createElement("rect", {
1958
- width: "6",
1959
- height: "12",
1960
- x: "47",
1961
- y: "24",
1962
- fill: "#DE1C8F",
1963
- rx: "9",
1964
- ry: "5",
1965
- transform: "rotate(270 50 50)"
1966
- }, /*#__PURE__*/React__default["default"].createElement("animate", {
1967
- attributeName: "opacity",
1968
- begin: "-0.16666666666666666s",
1969
- dur: "1s",
1970
- keyTimes: "0;1",
1971
- repeatCount: "indefinite",
1972
- values: "1;0"
1973
- })), /*#__PURE__*/React__default["default"].createElement("rect", {
1974
- width: "6",
1975
- height: "12",
1976
- x: "47",
1977
- y: "24",
1978
- fill: "#DE1C8F",
1979
- rx: "9",
1980
- ry: "5",
1981
- transform: "rotate(300 50 50)"
1982
- }, /*#__PURE__*/React__default["default"].createElement("animate", {
1983
- attributeName: "opacity",
1984
- begin: "-0.08333333333333333s",
1985
- dur: "1s",
1986
- keyTimes: "0;1",
1987
- repeatCount: "indefinite",
1988
- values: "1;0"
1989
- })), /*#__PURE__*/React__default["default"].createElement("rect", {
1990
- width: "6",
1991
- height: "12",
1992
- x: "47",
1993
- y: "24",
1994
- fill: "#DE1C8F",
1995
- rx: "9",
1996
- ry: "5",
1997
- transform: "rotate(330 50 50)"
1998
- }, /*#__PURE__*/React__default["default"].createElement("animate", {
1999
- attributeName: "opacity",
2000
- begin: "0s",
2001
- dur: "1s",
2002
- keyTimes: "0;1",
2003
- repeatCount: "indefinite",
2004
- values: "1;0"
2005
- }))));
2006
- };
2007
- Loading.propTypes = {};
2008
-
2009
- const Form$1 = ({
2090
+ const Form = ({
2010
2091
  className,
2011
2092
  formId,
2012
- fields,
2013
- formData,
2014
- setFormId,
2015
- setValue,
2016
- validateField,
2017
- defaultLanguage,
2018
- errors,
2019
- pagingInfo,
2020
- togglePageForward,
2021
- togglePageBack,
2022
- submitForm,
2023
- status,
2024
- setDateRangeValues,
2025
- useDefaultTheme,
2026
- entries,
2027
- customSubmit,
2028
- setCheckboxValue
2093
+ useDefaultTheme = true,
2094
+ customSubmit
2029
2095
  }) => {
2030
- React.useEffect(() => {
2031
- setFormId(formId);
2032
- }, [formId, setFormId]); // NF change rule of hooks
2096
+ const dispatch = reactRedux.useDispatch();
2097
+
2098
+ const _setFormId = formId => {
2099
+ dispatch(setFormId(formId));
2100
+ };
2101
+
2102
+ const _setValue = (formId, id, value) => {
2103
+ dispatch(setValue(formId, id, value));
2104
+ };
2105
+
2106
+ const _setCheckboxValue = (formId, id, value, isChecked) => {
2107
+ dispatch(setCheckboxValue(formId, id, value, isChecked));
2108
+ };
2109
+
2110
+ const _setDateRangeValues = (formId, id, dateType, value) => {
2111
+ dispatch(setDateRangeValues(formId, id, dateType, value));
2112
+ };
2113
+
2114
+ const _validateField = (formId, id, value) => {
2115
+ dispatch(validateField(formId, id, value));
2116
+ };
2117
+
2118
+ const _togglePageForward = (formId, pageIndex) => {
2119
+ dispatch(togglePageForward(formId, pageIndex));
2120
+ };
2121
+
2122
+ const _togglePageBack = (formId, pageIndex) => {
2123
+ dispatch(togglePageBack(formId, pageIndex));
2124
+ };
2033
2125
 
2034
- if (!formId) return null;
2035
- let formRender;
2126
+ const _submitForm = formId => {
2127
+ dispatch(submitForm(formId));
2128
+ };
2129
+
2130
+ React.useEffect(() => {
2131
+ if (formId) _setFormId(formId);
2132
+ }, [formId]);
2133
+ const selectFormFields = makeSelectPagedFields(formId);
2134
+ const selectFormStatus = makeSelectFormStatus(formId);
2135
+ const selectPagingInfo = makeSelectPagingInfo(formId);
2136
+ const selectDefaultLang = makeSelectDefaultLang(formId);
2137
+ const selectFormSettings = makeSelectFormSettings(formId);
2138
+ const selectFormFieldErrors = makeSelectFormFieldErrors(formId);
2139
+ const selectFormEntries = makeSelectFormEntries(formId);
2140
+ const selectFormPostData = makeSelectFormPostData(formId);
2141
+ const status = reactRedux.useSelector(selectFormStatus);
2142
+ const fields = reactRedux.useSelector(selectFormFields);
2143
+ const pagingInfo = reactRedux.useSelector(selectPagingInfo);
2144
+ const defaultLanguage = reactRedux.useSelector(selectDefaultLang);
2145
+ const settings = reactRedux.useSelector(selectFormSettings);
2146
+ const errors = reactRedux.useSelector(selectFormFieldErrors);
2147
+ const entries = reactRedux.useSelector(selectFormEntries);
2148
+ const formData = reactRedux.useSelector(selectFormPostData);
2036
2149
 
2037
2150
  if (pagingInfo && pagingInfo.pageCount > 1) {
2038
2151
  const isLastPage = pagingInfo.pageCount == pagingInfo.pageIndex + 1;
2039
- formRender = /*#__PURE__*/React__default["default"].createElement(FormStyled, {
2152
+ return /*#__PURE__*/React__default["default"].createElement(ThemeProvider, {
2153
+ theme: defaultTheme
2154
+ }, /*#__PURE__*/React__default["default"].createElement(FormStyled, {
2040
2155
  className: className,
2041
2156
  id: formId,
2042
2157
  useDefaultTheme: useDefaultTheme
2043
- }, status && status.isLoading || status && status.isSubmitting && /*#__PURE__*/React__default["default"].createElement(Loading, {
2044
- className: "loading"
2045
- }), !status || status && !status.isLoading && !status.isSubmitting && !status.hasSuccess && /*#__PURE__*/React__default["default"].createElement(React__default["default"].Fragment, null, pagingInfo.pageIndex > 0 && /*#__PURE__*/React__default["default"].createElement(Button, {
2158
+ }, !status || !(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, {
2046
2159
  type: "button",
2047
2160
  text: "Go Back",
2048
- action: () => togglePageBack(formId, pagingInfo.pageIndex - 1),
2161
+ action: () => _togglePageBack(formId, pagingInfo.pageIndex - 1),
2049
2162
  useDefaultTheme: useDefaultTheme
2050
2163
  }), /*#__PURE__*/React__default["default"].createElement(FormComposer, {
2051
2164
  fields: fields,
2052
2165
  formData: formData,
2053
2166
  formId: formId,
2054
- setValue: setValue,
2055
- validateField: validateField,
2167
+ setValue: _setValue,
2168
+ validateField: _validateField,
2056
2169
  defaultLanguage: defaultLanguage,
2057
2170
  errors: errors,
2058
2171
  pagingInfo: pagingInfo,
2059
2172
  useDefaultTheme: useDefaultTheme,
2060
2173
  entries: entries,
2061
- setDateRangeValues: setDateRangeValues,
2062
- setCheckboxValue: setCheckboxValue
2174
+ setDateRangeValues: _setDateRangeValues,
2175
+ setCheckboxValue: _setCheckboxValue
2063
2176
  }), !isLastPage && /*#__PURE__*/React__default["default"].createElement(Button, {
2064
2177
  type: "button",
2065
2178
  text: "Next",
2066
- action: () => togglePageForward(formId, pagingInfo.pageIndex + 1),
2179
+ action: () => _togglePageForward(formId, pagingInfo.pageIndex + 1),
2067
2180
  useDefaultTheme: useDefaultTheme
2068
2181
  }), isLastPage && /*#__PURE__*/React__default["default"].createElement(Button, {
2069
- text: "Submit",
2182
+ text: (settings === null || settings === void 0 ? void 0 : settings.submitButtonText) || "Submit",
2070
2183
  type: "button",
2184
+ loading: status === null || status === void 0 ? void 0 : status.isLoading,
2071
2185
  action: () => {
2072
- submitForm(formId);
2073
- customSubmit();
2186
+ _submitForm(formId);
2187
+
2188
+ if (customSubmit) customSubmit();
2074
2189
  },
2075
2190
  useDefaultTheme: useDefaultTheme
2076
- })), status && status.hasSuccess && status.successMessage && /*#__PURE__*/React__default["default"].createElement("p", {
2191
+ })) : /*#__PURE__*/React__default["default"].createElement(LoadingSpinner, {
2192
+ className: "loading",
2193
+ height: 24,
2194
+ width: 24,
2195
+ color: "#333"
2196
+ }), (status === null || status === void 0 ? void 0 : status.hasSuccess) && (status === null || status === void 0 ? void 0 : status.successMessage) && /*#__PURE__*/React__default["default"].createElement("p", {
2077
2197
  className: "success-message"
2078
- }, status.successMessage));
2198
+ }, status.successMessage)));
2079
2199
  } else {
2080
- formRender = /*#__PURE__*/React__default["default"].createElement(FormStyled, {
2200
+ return /*#__PURE__*/React__default["default"].createElement(ThemeProvider, {
2201
+ theme: defaultTheme
2202
+ }, /*#__PURE__*/React__default["default"].createElement(FormStyled, {
2081
2203
  className: className,
2082
2204
  id: formId,
2083
2205
  useDefaultTheme: useDefaultTheme
2084
- }, status && status.isLoading || status && status.isSubmitting && /*#__PURE__*/React__default["default"].createElement(Loading, {
2085
- className: "loading"
2086
- }), !status || status && !status.isLoading && !status.isSubmitting && !status.hasSuccess && /*#__PURE__*/React__default["default"].createElement(React__default["default"].Fragment, null, /*#__PURE__*/React__default["default"].createElement(FormComposer, {
2206
+ }, !status || !(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, {
2087
2207
  fields: fields,
2088
2208
  formId: formId,
2089
- setValue: setValue,
2090
- setDateRangeValues: setDateRangeValues,
2091
- validateField: validateField,
2209
+ setValue: _setValue,
2210
+ setDateRangeValues: _setDateRangeValues,
2211
+ validateField: _validateField,
2092
2212
  defaultLanguage: defaultLanguage,
2093
2213
  errors: errors,
2094
2214
  useDefaultTheme: useDefaultTheme,
2095
2215
  entries: entries,
2096
- setCheckboxValue: setCheckboxValue
2216
+ setCheckboxValue: _setCheckboxValue
2097
2217
  }), /*#__PURE__*/React__default["default"].createElement(Button, {
2098
- text: "Submit",
2218
+ loading: status === null || status === void 0 ? void 0 : status.isSubmitting,
2219
+ text: (settings === null || settings === void 0 ? void 0 : settings.submitButtonText) || "Submit",
2099
2220
  type: "button",
2100
2221
  action: () => {
2101
- submitForm(formId);
2102
- customSubmit();
2222
+ _submitForm(formId);
2223
+
2224
+ if (customSubmit) customSubmit();
2103
2225
  },
2104
2226
  useDefaultTheme: useDefaultTheme
2105
- })), status && status.hasSuccess && status.successMessage && /*#__PURE__*/React__default["default"].createElement("p", {
2227
+ })) : /*#__PURE__*/React__default["default"].createElement(LoadingSpinner, {
2228
+ className: "loading",
2229
+ height: 24,
2230
+ width: 24,
2231
+ color: "#333"
2232
+ }), (status === null || status === void 0 ? void 0 : status.hasSuccess) && (status === null || status === void 0 ? void 0 : status.successMessage) && /*#__PURE__*/React__default["default"].createElement("p", {
2106
2233
  className: "success-message"
2107
- }, status.successMessage));
2234
+ }, status.successMessage)));
2108
2235
  }
2109
-
2110
- return /*#__PURE__*/React__default["default"].createElement(ThemeProvider, {
2111
- theme: defaultTheme
2112
- }, formRender);
2113
- };
2114
-
2115
- Form$1.propTypes = {
2116
- className: PropTypes__default["default"].string,
2117
- formId: PropTypes__default["default"].string,
2118
- fields: PropTypes__default["default"].oneOfType([PropTypes__default["default"].array, PropTypes__default["default"].object]),
2119
- formData: PropTypes__default["default"].object,
2120
- entries: PropTypes__default["default"].oneOfType([PropTypes__default["default"].array, PropTypes__default["default"].object]),
2121
- useDefaultTheme: PropTypes__default["default"].bool,
2122
- setFormId: PropTypes__default["default"].func,
2123
- setValue: PropTypes__default["default"].func,
2124
- setDateRangeValues: PropTypes__default["default"].func,
2125
- validateField: PropTypes__default["default"].func,
2126
- defaultLanguage: PropTypes__default["default"].string,
2127
- errors: PropTypes__default["default"].array,
2128
- pagingInfo: PropTypes__default["default"].object,
2129
- togglePageForward: PropTypes__default["default"].func,
2130
- togglePageBack: PropTypes__default["default"].func,
2131
- submitForm: PropTypes__default["default"].func,
2132
- customSubmit: PropTypes__default["default"].func,
2133
- status: PropTypes__default["default"].object,
2134
- setCheckboxValue: PropTypes__default["default"].func
2135
- };
2136
-
2137
- function action(type, payload = {}) {
2138
- return {
2139
- type,
2140
- ...payload
2141
- };
2142
- }
2143
-
2144
- const submitForm = formId => action(SUBMIT_FORM_FOR_VALIDATION, {
2145
- formId
2146
- });
2147
- const setFormId = formId => action(SET_FORM_ID, {
2148
- formId
2149
- });
2150
- const setValue = (formId, id, value) => action(SET_FIELD_VALUE, {
2151
- formId,
2152
- id,
2153
- value
2154
- });
2155
- const setCheckboxValue = (formId, id, value, isChecked) => action(SET_CHECKBOX_VALUE, {
2156
- formId,
2157
- id,
2158
- value,
2159
- isChecked
2160
- });
2161
- const setDateRangeValues = (formId, id, dateType, value) => action(SET_DATE_RANGE_VALUES, {
2162
- formId,
2163
- id,
2164
- dateType,
2165
- value
2166
- });
2167
- const validateField = (formId, id, value) => action(VALIDATE_FIELD, {
2168
- formId,
2169
- id,
2170
- value
2171
- });
2172
- const togglePageForward = (formId, pageIndex) => action(PAGE_FORWARD, {
2173
- formId,
2174
- pageIndex
2175
- });
2176
- const togglePageBack = (formId, pageIndex) => action(PAGE_BACK, {
2177
- formId,
2178
- pageIndex
2179
- });
2180
-
2181
- const FormContainer = ({
2182
- className,
2183
- formId,
2184
- fields,
2185
- formData,
2186
- setFormId,
2187
- setValue,
2188
- setDateRangeValues,
2189
- validateField,
2190
- defaultLanguage,
2191
- errors,
2192
- pagingInfo,
2193
- togglePageForward,
2194
- togglePageBack,
2195
- submitForm,
2196
- status,
2197
- useDefaultTheme = true,
2198
- entries,
2199
- setCheckboxValue,
2200
- customSubmit
2201
- }) => {
2202
- return /*#__PURE__*/React__default["default"].createElement(Form$1, {
2203
- className: className,
2204
- formId: formId,
2205
- fields: fields,
2206
- setFormId: setFormId,
2207
- setValue: setValue,
2208
- setDateRangeValues: setDateRangeValues,
2209
- validateField: validateField,
2210
- defaultLanguage: defaultLanguage,
2211
- errors: errors,
2212
- pagingInfo: pagingInfo,
2213
- togglePageForward: togglePageForward,
2214
- togglePageBack: togglePageBack,
2215
- submitForm: submitForm,
2216
- status: status,
2217
- useDefaultTheme: useDefaultTheme,
2218
- entries: entries,
2219
- formData: formData,
2220
- setCheckboxValue: setCheckboxValue,
2221
- customSubmit: customSubmit
2222
- });
2223
2236
  };
2224
2237
 
2225
- FormContainer.propTypes = {
2238
+ Form.propTypes = {
2226
2239
  className: PropTypes__default["default"].string,
2227
2240
  formId: PropTypes__default["default"].string,
2228
- fields: PropTypes__default["default"].oneOfType([PropTypes__default["default"].array, PropTypes__default["default"].object]),
2229
- formData: PropTypes__default["default"].object,
2230
- entries: PropTypes__default["default"].oneOfType([PropTypes__default["default"].array, PropTypes__default["default"].object]),
2231
- setFormId: PropTypes__default["default"].func,
2232
- setDateRangeValues: PropTypes__default["default"].func,
2233
- setValue: PropTypes__default["default"].func,
2234
2241
  useDefaultTheme: PropTypes__default["default"].bool,
2235
- validateField: PropTypes__default["default"].func,
2236
- defaultLanguage: PropTypes__default["default"].string,
2237
- errors: PropTypes__default["default"].array,
2238
- pagingInfo: PropTypes__default["default"].object,
2239
- togglePageForward: PropTypes__default["default"].func,
2240
- togglePageBack: PropTypes__default["default"].func,
2241
- submitForm: PropTypes__default["default"].func,
2242
- status: PropTypes__default["default"].object,
2243
- setCheckboxValue: PropTypes__default["default"].func,
2244
2242
  customSubmit: PropTypes__default["default"].func
2245
2243
  };
2246
2244
 
2247
- const mapStateToProps = (state, props) => {
2248
- const {
2249
- formId
2250
- } = props;
2251
- const selectFormFields = selectPagedFields(formId);
2252
- const selectIsLoading = makeSelectIsLoading(formId);
2253
- const selectDefaultLang = makeSelectDefaultLang(formId);
2254
- return state => ({
2255
- fields: selectFormFields(state),
2256
- loading: selectIsLoading(state),
2257
- defaultLanguage: selectDefaultLang(state),
2258
- errors: selectFieldErrors(state, formId),
2259
- pagingInfo: selectPagingInfo(state, formId),
2260
- status: selectFormStatus(state, formId),
2261
- entries: selectEntries(state, formId),
2262
- formData: selectPostData(state, formId)
2263
- });
2264
- };
2265
-
2266
- const mapDispatchToProps = dispatch => {
2267
- return {
2268
- setFormId: formId => dispatch(setFormId(formId)),
2269
- setValue: (formId, id, value) => dispatch(setValue(formId, id, value)),
2270
- setCheckboxValue: (formId, id, value, isChecked) => dispatch(setCheckboxValue(formId, id, value, isChecked)),
2271
- setDateRangeValues: (formId, id, dateType, value) => dispatch(setDateRangeValues(formId, id, dateType, value)),
2272
- validateField: (formId, id, value) => dispatch(validateField(formId, id, value)),
2273
- togglePageForward: (formId, pageIndex) => dispatch(togglePageForward(formId, pageIndex)),
2274
- togglePageBack: (formId, pageIndex) => dispatch(togglePageBack(formId, pageIndex)),
2275
- submitForm: formId => dispatch(submitForm(formId))
2276
- };
2277
- };
2278
-
2279
- reactRedux.connect(mapStateToProps, mapDispatchToProps)(toJS(FormContainer));
2280
-
2245
+ exports.actions = actions;
2246
+ exports["default"] = Form;
2281
2247
  exports.reducer = reducer;
2282
2248
  exports.sagas = formV2Sagas;
2249
+ exports.selectors = selectors;
2283
2250
  //# sourceMappingURL=forms.js.map