kwikid-forms 0.0.3 → 0.0.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -176,41 +176,95 @@ var EApiStatusType;
176
176
  var EPatternKey;
177
177
  (function (EPatternKey) {
178
178
  EPatternKey["CUSTOM"] = "CUSTOM";
179
- EPatternKey["IS_PAN_NUMBER"] = "IS_PAN_NUMBER";
180
- EPatternKey["IS_AADHAAR_NUMBER"] = "IS_AADHAAR_NUMBER";
181
- EPatternKey["IS_EMPTY"] = "IS_EMPTY";
182
- EPatternKey["IS_NOT_EMPTY"] = "IS_NOT_EMPTY";
183
- EPatternKey["IS_EMAIL"] = "IS_EMAIL";
184
- EPatternKey["IS_NUMBER"] = "IS_NUMBER";
185
- EPatternKey["IS_INTEGER"] = "IS_INTEGER";
186
- EPatternKey["IS_URL"] = "IS_URL";
179
+ EPatternKey["IS_ADDRESS"] = "IS_ADDRESS";
187
180
  EPatternKey["IS_ALPHA"] = "IS_ALPHA";
188
181
  EPatternKey["IS_ALPHANUMERIC"] = "IS_ALPHANUMERIC";
189
- EPatternKey["IS_UPPERCASE"] = "IS_UPPERCASE";
190
- EPatternKey["IS_LOWERCASE"] = "IS_LOWERCASE";
182
+ EPatternKey["IS_BOOLEAN"] = "IS_BOOLEAN";
183
+ EPatternKey["IS_EMAIL"] = "IS_EMAIL";
184
+ EPatternKey["IS_EMPTY"] = "IS_EMPTY";
185
+ EPatternKey["IS_FALSE"] = "IS_FALSE";
186
+ EPatternKey["IS_HTML"] = "IS_HTML";
187
+ EPatternKey["IS_INTEGER"] = "IS_INTEGER";
191
188
  EPatternKey["IS_IP_ADDRESS"] = "IS_IP_ADDRESS";
192
189
  EPatternKey["IS_JSON"] = "IS_JSON";
193
- EPatternKey["IS_HTML"] = "IS_HTML";
190
+ EPatternKey["IS_LOWERCASE"] = "IS_LOWERCASE";
191
+ EPatternKey["IS_NOT_EMPTY"] = "IS_NOT_EMPTY";
192
+ EPatternKey["IS_NUMBER"] = "IS_NUMBER";
194
193
  EPatternKey["IS_TRUE"] = "IS_TRUE";
194
+ EPatternKey["IS_UPPERCASE"] = "IS_UPPERCASE";
195
+ EPatternKey["IS_URL"] = "IS_URL";
196
+ EPatternKey["IS_AADHAAR_NUMBER"] = "IS_AADHAAR_NUMBER";
197
+ EPatternKey["IS_BANK_ACCOUNT_NO"] = "IS_BANK_ACCOUNT_NO";
198
+ EPatternKey["IS_BANK_SWIFT_CODE"] = "IS_BANK_SWIFT_CODE";
199
+ EPatternKey["IS_BIRTH_CERTIFICATE_NO"] = "IS_BIRTH_CERTIFICATE_NO";
200
+ EPatternKey["IS_CHEQUE_NO"] = "IS_CHEQUE_NO";
201
+ EPatternKey["IS_CIN"] = "IS_CIN";
202
+ EPatternKey["IS_CREDIT_CARD_NO"] = "IS_CREDIT_CARD_NO";
203
+ EPatternKey["IS_DRIVING_LICENSE"] = "IS_DRIVING_LICENSE";
204
+ EPatternKey["IS_GSTIN"] = "IS_GSTIN";
205
+ EPatternKey["IS_IFSC_NO"] = "IS_IFSC_NO";
206
+ EPatternKey["IS_MICR_CODE"] = "IS_MICR_CODE";
207
+ EPatternKey["IS_MOBILE_NO"] = "IS_MOBILE_NO";
208
+ EPatternKey["IS_MOBILE_NO_IN"] = "IS_MOBILE_NO_IN";
209
+ EPatternKey["IS_NEFT_OR_RTGS_NO"] = "IS_NEFT_OR_RTGS_NO";
210
+ EPatternKey["IS_PAN_NUMBER"] = "IS_PAN_NUMBER";
211
+ EPatternKey["IS_PASSPORT"] = "IS_PASSPORT";
212
+ EPatternKey["IS_PHONE_NO"] = "IS_PHONE_NO";
213
+ EPatternKey["IS_PINCODE"] = "IS_PINCODE";
214
+ EPatternKey["IS_PURCHASE_ORDER_NO"] = "IS_PURCHASE_ORDER_NO";
215
+ EPatternKey["IS_RATION_CARD_NO"] = "IS_RATION_CARD_NO";
216
+ EPatternKey["IS_SERVICE_TAX_NO"] = "IS_SERVICE_TAX_NO";
217
+ EPatternKey["IS_SOCIAL_SECURITY_NO"] = "IS_SOCIAL_SECURITY_NO";
218
+ EPatternKey["IS_UPI_TRANSACTION_REFERENCE_NO"] = "IS_UPI_TRANSACTION_REFERENCE_NO";
219
+ EPatternKey["IS_VAT_TIN_NO"] = "IS_VAT_TIN_NO";
220
+ EPatternKey["IS_VEHICLE_REGISTRATION_NO"] = "IS_VEHICLE_REGISTRATION_NO";
221
+ EPatternKey["IS_VOTER_ID"] = "IS_VOTER_ID";
195
222
  })(EPatternKey || (EPatternKey = {}));
196
223
  var EPattern;
197
224
  (function (EPattern) {
198
- EPattern["IS_EMPTY"] = "^$";
199
- EPattern["IS_PAN_NUMBER"] = "^[A-Z]{5}[[0-9]{4}[A-Z]{1}$";
200
- EPattern["IS_AADHAAR_NUMBER"] = "^[0-9]{12}$";
201
- EPattern["IS_NOT_EMPTY"] = "^.+$";
202
- EPattern["IS_EMAIL"] = "^\\w+([\\.-]?\\w+)*@\\w+([\\.-]?\\w+)*(\\.\\w{2,3})+$";
203
- EPattern["IS_NUMBER"] = "^[+-]?d+(.d+)?$";
204
- EPattern["IS_INTEGER"] = "^[+-]?d+$";
205
- EPattern["IS_URL"] = "^(?:http(s)?://)?[w.-]+(?:.[w.-]+)+[w-._~:/?#[]@!$&'()*+,;=.]+$";
206
225
  EPattern["IS_ALPHA"] = "^[a-zA-Z]+$";
226
+ EPattern["IS_ADDRESS"] = "^(\\w*\\s*[#-,/.()&]*)+";
207
227
  EPattern["IS_ALPHANUMERIC"] = "^[a-zA-Z0-9]+$";
208
- EPattern["IS_UPPERCASE"] = "^[A-Z]+$";
209
- EPattern["IS_LOWERCASE"] = "^[a-z]+$";
228
+ EPattern["IS_BOOLEAN"] = "(true|false)";
229
+ EPattern["IS_EMAIL"] = "^\\w+([\\.-]?\\w+)*@\\w+([\\.-]?\\w+)*(\\.\\w{2,3})+$";
230
+ EPattern["IS_EMPTY"] = "^$";
231
+ EPattern["IS_FALSE"] = "false";
232
+ EPattern["IS_HTML"] = "^<([a-z]+)([^<]+)(?:>(.)</\\1>|\\s+/>)$";
233
+ EPattern["IS_INTEGER"] = "^[+-]?d+$";
210
234
  EPattern["IS_IP_ADDRESS"] = "^(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?).){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$";
211
235
  EPattern["IS_JSON"] = "^\\s*({(.|\\s)}|[(.|\\s)])\\s*$";
212
- EPattern["IS_HTML"] = "^<([a-z]+)([^<]+)(?:>(.)</\\1>|\\s+/>)$";
236
+ EPattern["IS_LOWERCASE"] = "^[a-z]+$";
237
+ EPattern["IS_NOT_EMPTY"] = "^.+$";
238
+ EPattern["IS_NUMBER"] = "^[+-]?d+(.d+)?$";
213
239
  EPattern["IS_TRUE"] = "true";
240
+ EPattern["IS_UPPERCASE"] = "^[A-Z]+$";
241
+ EPattern["IS_URL"] = "^(?:http(s)?://)?[w.-]+(?:.[w.-]+)+[w-._~:/?#[]@!$&'()*+,;=.]+$";
242
+ EPattern["IS_AADHAAR_NUMBER"] = "^[0-9]{12}$";
243
+ EPattern["IS_BANK_ACCOUNT_NO"] = "^[0-9]{9,18}$";
244
+ EPattern["IS_BANK_SWIFT_CODE"] = "^[A-Z]{4}[A-Z]{2}[0-9A-Z]{2}[0-9A-Z]{3}$";
245
+ EPattern["IS_BIRTH_CERTIFICATE_NO"] = "^[A-Z]{2}[0-9]{6}[A-Z]{1}[0-9]{2}$";
246
+ EPattern["IS_CHEQUE_NO"] = "^[0-9]{6,14}$";
247
+ EPattern["IS_CIN"] = "^[A-Z]{3}[0-9]{5}[0-9A-Z]{3}$";
248
+ EPattern["IS_CREDIT_CARD_NO"] = "^[0-9]{4}-[0-9]{4}-[0-9]{4}-[0-9]{4}$";
249
+ EPattern["IS_DRIVING_LICENSE"] = "^[A-Z]{2}[0-9]{2}((19|20)[0-9][0-9])[0-9]{7}$";
250
+ EPattern["IS_GSTIN"] = "^[0-9]{2}[A-Z]{5}[0-9]{4}[A-Z]{1}[1-9A-Z]{1}Z[0-9A-Z]{1}$";
251
+ EPattern["IS_IFSC_NO"] = "^[A-Z]{4}[0][A-Z0-9]{6}$";
252
+ EPattern["IS_MICR_CODE"] = "^[0-9]{9}$";
253
+ EPattern["IS_MOBILE_NO"] = "^[6-9]\\d{9}$";
254
+ EPattern["IS_MOBILE_NO_IN"] = "^(\\+91)[6-9]\\d{9}$";
255
+ EPattern["IS_NEFT_OR_RTGS_NO"] = "^[A-Z]{4}[0-9]{7}$";
256
+ EPattern["IS_PAN_NUMBER"] = "^[A-Z]{5}[[0-9]{4}[A-Z]{1}$";
257
+ EPattern["IS_PASSPORT"] = "^[A-PR-WYa-pr-wy][1-9]\\d\\s?\\d{4}[1-9]$";
258
+ EPattern["IS_PHONE_NO"] = "^[6-9]\\d{9}$";
259
+ EPattern["IS_PINCODE"] = "^[1-9][0-9]{5}$";
260
+ EPattern["IS_PURCHASE_ORDER_NO"] = "^[0-9]{1,5}$";
261
+ EPattern["IS_RATION_CARD_NO"] = "^[A-Z]{3}[0-9]{7}$";
262
+ EPattern["IS_SERVICE_TAX_NO"] = "^[A-Z]{5}[0-9]{4}[A-Z]{1}$";
263
+ EPattern["IS_SOCIAL_SECURITY_NO"] = "^[0-9]{3}-[0-9]{2}-[0-9]{4}$";
264
+ EPattern["IS_UPI_TRANSACTION_REFERENCE_NO"] = "^[a-zA-Z0-9]{3,128}@[a-z]{3,9}$";
265
+ EPattern["IS_VAT_TIN_NO"] = "^[0-9]{11}$";
266
+ EPattern["IS_VEHICLE_REGISTRATION_NO"] = "^[A-Z]{2}[0-9]{2}((19|20)[0-9][0-9])[0-9]{6}$";
267
+ EPattern["IS_VOTER_ID"] = "^[A-Z]{3}[0-9]{7}$";
214
268
  })(EPattern || (EPattern = {}));
215
269
  var EMessageType;
216
270
  (function (EMessageType) {
@@ -220,6 +274,21 @@ var EMessageType;
220
274
  EMessageType["WARNING"] = "warning";
221
275
  })(EMessageType || (EMessageType = {}));
222
276
 
277
+ var EFieldType;
278
+ (function (EFieldType) {
279
+ EFieldType["TITLE"] = "title";
280
+ EFieldType["TEXT"] = "text";
281
+ EFieldType["CHECKBOX"] = "checkbox";
282
+ EFieldType["NUMBER"] = "number";
283
+ EFieldType["DATE"] = "date";
284
+ EFieldType["PHONE"] = "phone";
285
+ EFieldType["RADIO"] = "radio";
286
+ EFieldType["DROPDOWN_WITH_SEARCH"] = "dropdown-with-search";
287
+ EFieldType["API_CALL"] = "api-call";
288
+ EFieldType["OTP"] = "otp";
289
+ EFieldType["AADHAAR_NUMBER"] = "aadhaar-number";
290
+ })(EFieldType || (EFieldType = {}));
291
+
223
292
  /**
224
293
  * A function that logs the execution of a method.
225
294
  * @param {any} target - The object the method belongs to.
@@ -362,21 +431,6 @@ const isSingleForm = (formsList) => {
362
431
  return formsList.length === 1;
363
432
  };
364
433
 
365
- var EFieldType;
366
- (function (EFieldType) {
367
- EFieldType["TITLE"] = "title";
368
- EFieldType["TEXT"] = "text";
369
- EFieldType["CHECKBOX"] = "checkbox";
370
- EFieldType["NUMBER"] = "number";
371
- EFieldType["DATE"] = "date";
372
- EFieldType["PHONE"] = "phone";
373
- EFieldType["RADIO"] = "radio";
374
- EFieldType["DROPDOWN_WITH_SEARCH"] = "dropdown-with-search";
375
- EFieldType["API_CALL"] = "api-call";
376
- EFieldType["OTP"] = "otp";
377
- EFieldType["AADHAAR_NUMBER"] = "aadhaar-number";
378
- })(EFieldType || (EFieldType = {}));
379
-
380
434
  const hasKey$1 = (object, key) => {
381
435
  return object.hasOwnProperty(key);
382
436
  };
@@ -879,6 +933,208 @@ __decorate([
879
933
  log
880
934
  ], Defaults.prototype, "getDefaultValue", null);
881
935
 
936
+ const findFieldFromKey = (fields, key) => {
937
+ const field = fields.find((field) => {
938
+ if (field.key === key) {
939
+ return field;
940
+ }
941
+ });
942
+ return field;
943
+ };
944
+ const findFieldIndexFromKey = (fields, key) => {
945
+ let fieldIndex;
946
+ fieldIndex = fields.findIndex((_) => {
947
+ return key === _.key;
948
+ });
949
+ return fieldIndex;
950
+ };
951
+ const getSearchTextOptionsFromRemoteFile = (field, childField, formGroup) => __awaiter(void 0, void 0, void 0, function* () {
952
+ const parentFieldValue = formGroup.controls[field.key].value;
953
+ // Determine the URL of the remote file to fetch
954
+ let fileUrl;
955
+ if (childField.regexToGetJsonRemoteUrlKey) {
956
+ const fileKey = parentFieldValue.match(childField.regexToGetJsonRemoteUrlKey)[0];
957
+ fileUrl = childField.jsonRemoteUrlMapping[fileKey];
958
+ }
959
+ else {
960
+ fileUrl = childField.fileUrl;
961
+ }
962
+ // Return early if there is no file URL
963
+ if (!fileUrl)
964
+ return;
965
+ // Fetch the remote file and parse its JSON data
966
+ const response = yield fetch(fileUrl);
967
+ const data = yield response.json();
968
+ // Return the data for the given parent field value
969
+ return data[parentFieldValue];
970
+ });
971
+ const getSearchTextOptionsFromFieldConfig = (field, childField, formGroup) => {
972
+ let options;
973
+ const fieldValue = formGroup.controls[field.key].value;
974
+ if (isNotEmpty(childField["json"])) {
975
+ options = childField["json"][fieldValue];
976
+ }
977
+ return options;
978
+ };
979
+ const formatSearchTextOptions = (options) => {
980
+ return options.map(({ title }) => title);
981
+ };
982
+ const formatDateToStandardFormat = (date) => {
983
+ let formattedDate;
984
+ let year = date.year;
985
+ let month = date.month;
986
+ let day = date.day;
987
+ formattedDate = `${day}-${month + 1}-${year}`;
988
+ return formattedDate;
989
+ };
990
+ function highlightFieldError(field, error) {
991
+ field.invalid = error;
992
+ field.focus = error;
993
+ // if (!error) {
994
+ // field["messages"] = field["messages"].filter(function (fieldMessage: {
995
+ // type: string;
996
+ // message: string;
997
+ // }) {
998
+ // return fieldMessage.type === "error";
999
+ // });
1000
+ // }
1001
+ return field;
1002
+ }
1003
+ const addMessage = (field, message) => {
1004
+ const isDuplicateMessage = (messages, message) => {
1005
+ return messages.some((fieldMessage) => {
1006
+ return (fieldMessage.type === message.type &&
1007
+ fieldMessage.message === message.message);
1008
+ });
1009
+ };
1010
+ field["messages"] = [];
1011
+ if (hasKey$1(field, "messages")) {
1012
+ if (!isDuplicateMessage(field["messages"], message)) {
1013
+ field["messages"].push({
1014
+ type: message.type,
1015
+ message: message.message
1016
+ });
1017
+ }
1018
+ }
1019
+ else {
1020
+ field["messages"] = [{ type: message.type, message: message.message }];
1021
+ }
1022
+ return field;
1023
+ };
1024
+ const removeMessage = (field, message) => {
1025
+ field["messages"] = field["messages"].filter(function (fieldMessage) {
1026
+ return fieldMessage.type !== message.type;
1027
+ });
1028
+ return field;
1029
+ };
1030
+ function setFieldError(fields, errors, key, error) {
1031
+ const fieldIndex = fields.findIndex((field) => {
1032
+ return field.key === key;
1033
+ });
1034
+ const setErrorMessages = (field, errors) => {
1035
+ const getErrorMessage = (fieldLabel, errorType) => {
1036
+ let errorMessage = "";
1037
+ switch (errorType) {
1038
+ case "required":
1039
+ errorMessage = `${fieldLabel} is required!`;
1040
+ break;
1041
+ case "email":
1042
+ errorMessage = `${fieldLabel} has wrong email format!`;
1043
+ break;
1044
+ case "min":
1045
+ errorMessage = `${fieldLabel} has wrong value! Minimum value: ${field.validators.min}`;
1046
+ break;
1047
+ case "minlength":
1048
+ errorMessage = `${fieldLabel} has wrong length! Required minimum length: ${field.validators.minLength}`;
1049
+ break;
1050
+ case "max":
1051
+ errorMessage = `${fieldLabel} has wrong value! Maximum value: ${field.validators.maxLength}`;
1052
+ break;
1053
+ case "maxlength":
1054
+ errorMessage = `${fieldLabel} has wrong length! Required maximum length: ${field.validators.maxLength}`;
1055
+ break;
1056
+ case "areEqual":
1057
+ errorMessage = `${fieldLabel} must be equal!`;
1058
+ break;
1059
+ case "pattern":
1060
+ errorMessage = `${fieldLabel} is in incorrect format!`;
1061
+ break;
1062
+ default:
1063
+ errorMessage = `${fieldLabel}: ${errorType}`;
1064
+ break;
1065
+ }
1066
+ return errorMessage;
1067
+ };
1068
+ Object.keys(errors).forEach((error) => {
1069
+ field = addMessage(field, {
1070
+ type: "error",
1071
+ message: getErrorMessage(field.label, error)
1072
+ });
1073
+ });
1074
+ return field;
1075
+ };
1076
+ if (error) {
1077
+ fields[fieldIndex] = setErrorMessages(fields[fieldIndex], errors);
1078
+ }
1079
+ else {
1080
+ fields[fieldIndex]["messages"] = [];
1081
+ }
1082
+ fields[fieldIndex] = highlightFieldError(fields[fieldIndex], error);
1083
+ return fields;
1084
+ }
1085
+ const convertValueFromKwikUIFormatToBasicFormat = (type, value) => {
1086
+ let convertedValue = value;
1087
+ switch (type) {
1088
+ case EFieldType.DATE:
1089
+ const convertDateStringToTuiDayFormat = (date) => {
1090
+ const splitDate = date.split("-");
1091
+ const tuiDay = new TuiDay(Number(splitDate[2]), // Year
1092
+ Number(splitDate[1]) - 1, // Month, Why '-1' => Because Taiga-UI Required It, So...
1093
+ Number(splitDate[0]) // Day
1094
+ );
1095
+ return tuiDay;
1096
+ };
1097
+ convertedValue = convertDateStringToTuiDayFormat(value);
1098
+ break;
1099
+ default:
1100
+ break;
1101
+ }
1102
+ return convertedValue;
1103
+ };
1104
+ const convertValueFromBasicFormatToKwikUIFormat = (field, value) => {
1105
+ let convertedValue = value;
1106
+ switch (field.type) {
1107
+ case EFieldType.RADIO:
1108
+ if (hasKey$1(value, "label")) {
1109
+ convertedValue = value.label;
1110
+ }
1111
+ else {
1112
+ convertedValue = "";
1113
+ }
1114
+ break;
1115
+ case EFieldType.DATE:
1116
+ if (isNull(value)) {
1117
+ convertedValue = "";
1118
+ }
1119
+ else {
1120
+ convertedValue = formatDateToStandardFormat(value);
1121
+ }
1122
+ break;
1123
+ case EFieldType.PHONE:
1124
+ let fieldPhone = field;
1125
+ convertedValue = value.replace(String(fieldPhone.properties.countryCode), "");
1126
+ break;
1127
+ case EFieldType.TITLE:
1128
+ break;
1129
+ default:
1130
+ if (isEmpty(value)) {
1131
+ convertedValue = "";
1132
+ }
1133
+ break;
1134
+ }
1135
+ return convertedValue;
1136
+ };
1137
+
882
1138
  class Validations {
883
1139
  constructor(field, formData, previousFormData, allFormsData, takeAction) {
884
1140
  this._field = field;
@@ -940,18 +1196,15 @@ class Validations {
940
1196
  if (hasKey$1(field, "validators") &&
941
1197
  hasKey$1(field.validators, "pattern") &&
942
1198
  isNotEmpty(field.validators.pattern)) {
943
- if (field.validators.pattern.key === EPatternKey.CUSTOM) {
944
- validators.push(Validators.pattern(field.validators.pattern.pattern));
945
- }
946
- else {
947
- validators.push(Validators.pattern(EPattern[field.validators.pattern.key]));
1199
+ if (hasKey$1(field.validators.pattern, "key")) {
1200
+ if (field.validators.pattern.key === EPatternKey.CUSTOM) {
1201
+ validators.push(Validators.pattern(field.validators.pattern.pattern));
1202
+ }
1203
+ else {
1204
+ validators.push(Validators.pattern(EPattern[field.validators.pattern.key]));
1205
+ }
948
1206
  }
949
1207
  }
950
- if (hasKey$1(field, "validators") &&
951
- hasKey$1(field.validators, "nullValidator") &&
952
- isNotEmpty(field.validators.nullValidator)) {
953
- validators.push(Validators.nullValidator(field.validators.nullValidator));
954
- }
955
1208
  return validators;
956
1209
  }
957
1210
  getFormValidationErrors(control) {
@@ -1036,7 +1289,7 @@ class KwikIDFormViewService {
1036
1289
  for (let field of fields) {
1037
1290
  if (field.type !== "title") {
1038
1291
  const defaults = new Defaults(field, allFormsData, formData, previousFormData, takeAction);
1039
- const value = yield defaults.getDefaultValue();
1292
+ const value = convertValueFromBasicFormatToKwikUIFormat(field.type, yield defaults.getDefaultValue());
1040
1293
  const validators = new Validations(field, formData, previousFormData, allFormsData, takeAction).getFieldValidators(field);
1041
1294
  formGroup.addControl(field.key, new FormControl({ value: value, disabled: field.disabled }, { validators: validators }));
1042
1295
  }
@@ -1147,150 +1400,6 @@ __decorate([
1147
1400
  log
1148
1401
  ], Apis.prototype, "validateApiCallResponse", null);
1149
1402
 
1150
- const findFieldFromKey = (fields, key) => {
1151
- const field = fields.find((field) => {
1152
- if (field.key === key) {
1153
- return field;
1154
- }
1155
- });
1156
- return field;
1157
- };
1158
- const findFieldIndexFromKey = (fields, key) => {
1159
- let fieldIndex;
1160
- fieldIndex = fields.findIndex((_) => {
1161
- return key === _.key;
1162
- });
1163
- return fieldIndex;
1164
- };
1165
- const getSearchTextOptionsFromRemoteFile = (field, childField, formGroup) => __awaiter(void 0, void 0, void 0, function* () {
1166
- const parentFieldValue = formGroup.controls[field.key].value;
1167
- // Determine the URL of the remote file to fetch
1168
- let fileUrl;
1169
- if (childField.regexToGetJsonRemoteUrlKey) {
1170
- const fileKey = parentFieldValue.match(childField.regexToGetJsonRemoteUrlKey)[0];
1171
- fileUrl = childField.jsonRemoteUrlMapping[fileKey];
1172
- }
1173
- else {
1174
- fileUrl = childField.fileUrl;
1175
- }
1176
- // Return early if there is no file URL
1177
- if (!fileUrl)
1178
- return;
1179
- // Fetch the remote file and parse its JSON data
1180
- const response = yield fetch(fileUrl);
1181
- const data = yield response.json();
1182
- // Return the data for the given parent field value
1183
- return data[parentFieldValue];
1184
- });
1185
- const getSearchTextOptionsFromFieldConfig = (field, childField, formGroup) => {
1186
- let options;
1187
- const fieldValue = formGroup.controls[field.key].value;
1188
- if (isNotEmpty(childField["json"])) {
1189
- options = childField["json"][fieldValue];
1190
- }
1191
- return options;
1192
- };
1193
- const formatSearchTextOptions = (options) => {
1194
- return options.map(({ title }) => title);
1195
- };
1196
- const formatDateToStandardFormat = (date) => {
1197
- let formattedDate;
1198
- let year = date.year;
1199
- let month = date.month;
1200
- let day = date.day;
1201
- formattedDate = `${day}-${month + 1}-${year}`;
1202
- return formattedDate;
1203
- };
1204
- function highlightFieldError(field, error) {
1205
- field.invalid = error;
1206
- field.focus = error;
1207
- // if (!error) {
1208
- // field["messages"] = field["messages"].filter(function (fieldMessage: {
1209
- // type: string;
1210
- // message: string;
1211
- // }) {
1212
- // return fieldMessage.type === "error";
1213
- // });
1214
- // }
1215
- return field;
1216
- }
1217
- const addMessage = (field, message) => {
1218
- const isDuplicateMessage = (messages, message) => {
1219
- return messages.some((fieldMessage) => {
1220
- return (fieldMessage.type === message.type &&
1221
- fieldMessage.message === message.message);
1222
- });
1223
- };
1224
- field["messages"] = [];
1225
- if (hasKey$1(field, "messages")) {
1226
- if (!isDuplicateMessage(field["messages"], message)) {
1227
- field["messages"].push({
1228
- type: message.type,
1229
- message: message.message
1230
- });
1231
- }
1232
- }
1233
- else {
1234
- field["messages"] = [{ type: message.type, message: message.message }];
1235
- }
1236
- return field;
1237
- };
1238
- const removeMessage = (field, message) => {
1239
- field["messages"] = field["messages"].filter(function (fieldMessage) {
1240
- return fieldMessage.type !== message.type;
1241
- });
1242
- return field;
1243
- };
1244
- function setFieldError(fields, errors, key, error) {
1245
- const fieldIndex = fields.findIndex((field) => {
1246
- return field.key === key;
1247
- });
1248
- const setErrorMessages = (field, errors) => {
1249
- const getErrorMessage = (fieldLabel, errorType) => {
1250
- let errorMessage = "";
1251
- switch (errorType) {
1252
- case "required":
1253
- errorMessage = `${fieldLabel} is required!`;
1254
- break;
1255
- case "pattern":
1256
- errorMessage = `${fieldLabel} has wrong pattern!`;
1257
- break;
1258
- case "email":
1259
- errorMessage = `${fieldLabel} has wrong email format!`;
1260
- break;
1261
- case "minlength":
1262
- errorMessage = `${fieldLabel} has wrong length! Required minimum length: ${field.validators.minLength}`;
1263
- break;
1264
- case "maxlength":
1265
- errorMessage = `${fieldLabel} has wrong length! Required maximum length: ${field.validators.maxLength}`;
1266
- break;
1267
- case "areEqual":
1268
- errorMessage = `${fieldLabel} must be equal!`;
1269
- break;
1270
- default:
1271
- errorMessage = `${fieldLabel}: ${"error.error_name"}: ${"error.error_value"}`;
1272
- break;
1273
- }
1274
- return errorMessage;
1275
- };
1276
- Object.keys(errors).forEach((error) => {
1277
- field = addMessage(field, {
1278
- type: "error",
1279
- message: getErrorMessage(field.label, error)
1280
- });
1281
- });
1282
- return field;
1283
- };
1284
- if (error) {
1285
- fields[fieldIndex] = setErrorMessages(fields[fieldIndex], errors);
1286
- }
1287
- else {
1288
- fields[fieldIndex]["messages"] = [];
1289
- }
1290
- fields[fieldIndex] = highlightFieldError(fields[fieldIndex], error);
1291
- return fields;
1292
- }
1293
-
1294
1403
  class KwikIDFormViewComponent {
1295
1404
  constructor(formViewService) {
1296
1405
  this.formViewService = formViewService;
@@ -1558,16 +1667,26 @@ class KwikIDFormViewComponent {
1558
1667
  handleOnClickSaveForm(e) {
1559
1668
  let formData = this.formGroup.getRawValue();
1560
1669
  for (let field of this.formFields) {
1561
- if (field.type !== "title" &&
1670
+ if (field.type !== EFieldType.TITLE) {
1671
+ if (field.hidden) {
1672
+ delete formData[field.key];
1673
+ }
1674
+ else {
1675
+ formData[field.key] = convertValueFromKwikUIFormatToBasicFormat(field, formData[field.key]);
1676
+ }
1677
+ }
1678
+ }
1679
+ for (let field of this.formFields) {
1680
+ if (field.type !== EFieldType.TITLE &&
1562
1681
  field.validation.triggers.includes("ON_SAVE")) {
1563
- const validations = new Validations(field, this.formData, this.previousFormData, this.allFormsData, this.takeAction.bind(this));
1682
+ const validations = new Validations(field, formData, this.previousFormData, this.allFormsData, this.takeAction.bind(this));
1564
1683
  (() => __awaiter(this, void 0, void 0, function* () {
1565
1684
  yield validations.validateField();
1566
1685
  }))();
1567
1686
  }
1568
1687
  }
1569
1688
  if (this.formGroup.invalid) {
1570
- const controls = new Validations(undefined, this.formData, this.previousFormData, this.allFormsData, this.takeAction.bind(this)).findInvalidControlsRecursive(this.formGroup);
1689
+ const controls = new Validations(undefined, formData, this.previousFormData, this.allFormsData, this.takeAction.bind(this)).findInvalidControlsRecursive(this.formGroup);
1571
1690
  let firstFieldWithError = "";
1572
1691
  for (let control of controls) {
1573
1692
  if (control.invalid && isEmpty(firstFieldWithError)) {
@@ -1577,35 +1696,6 @@ class KwikIDFormViewComponent {
1577
1696
  }
1578
1697
  return;
1579
1698
  }
1580
- // Need to have an API Validator as well here.
1581
- // if(apiCallSuccess()) { then only proceed further, else highlight the button to click to call api}
1582
- for (let field of this.formFields) {
1583
- switch (field.type) {
1584
- case "radio":
1585
- if (hasKey$1(formData[field.key], "label")) {
1586
- formData[field.key] = formData[field.key].label;
1587
- }
1588
- else {
1589
- formData[field.key] = "";
1590
- }
1591
- break;
1592
- case "date":
1593
- if (isNull(formData[field.key])) {
1594
- formData[field.key] = "";
1595
- }
1596
- else {
1597
- formData[field.key] = formatDateToStandardFormat(formData[field.key]);
1598
- }
1599
- break;
1600
- case "title":
1601
- break;
1602
- default:
1603
- if (isEmpty(formData[field.key])) {
1604
- formData[field.key] = "";
1605
- }
1606
- break;
1607
- }
1608
- }
1609
1699
  Object.keys(formData).map((key) => {
1610
1700
  if (isEmpty(formData[key])) {
1611
1701
  formData[key] = "";
@@ -1928,6 +2018,7 @@ const hasKey = (object, key) => {
1928
2018
 
1929
2019
  class KwikIDFormsListComponent {
1930
2020
  constructor() {
2021
+ this.showFormFields = {};
1931
2022
  this.userConfig = {};
1932
2023
  this.formsList = [];
1933
2024
  this.formsListCompleted = [];
@@ -1936,21 +2027,39 @@ class KwikIDFormsListComponent {
1936
2027
  this.onClickHideFormsList = new EventEmitter();
1937
2028
  this.onClickSubmitForms = new EventEmitter();
1938
2029
  this.selectedForm = "";
2030
+ this.isAllFormsCompleted = true;
2031
+ }
2032
+ ngOnInit() {
2033
+ this.isAllFormsCompleted = this.checkIsAllFormsCompleted(this.formsList);
1939
2034
  }
1940
- ngOnInit() { }
1941
2035
  ngOnChanges(changes) {
1942
2036
  const verifyChange = (key) => {
1943
2037
  return hasKey(changes, key) && !changes[key].firstChange;
1944
2038
  };
2039
+ if (verifyChange("showFormFields")) {
2040
+ this.showFormFields = changes.showFormFields.currentValue;
2041
+ }
1945
2042
  if (verifyChange("formsList")) {
1946
2043
  this.formsList = changes.formsList.currentValue;
2044
+ this.isAllFormsCompleted = this.checkIsAllFormsCompleted(this.formsList);
1947
2045
  }
1948
2046
  if (verifyChange("isMobileView")) {
1949
2047
  this.isMobileView = changes.isMobileView.currentValue;
1950
2048
  }
1951
2049
  }
2050
+ checkIsAllFormsCompleted(formsList) {
2051
+ let isAllFormsCompleted = true;
2052
+ for (let forms of formsList) {
2053
+ if (forms.status !== "completed") {
2054
+ isAllFormsCompleted = false;
2055
+ break;
2056
+ }
2057
+ }
2058
+ return isAllFormsCompleted;
2059
+ }
1952
2060
  handleOnClickSetActiveForm(selectedForm) {
1953
- if (this.selectedForm !== selectedForm) {
2061
+ if (this.selectedForm !== selectedForm ||
2062
+ (this.isAllFormsCompleted && !this.showFormFields)) {
1954
2063
  this.selectedForm = selectedForm;
1955
2064
  this.onClickSetActiveForm.emit(selectedForm);
1956
2065
  }
@@ -1960,7 +2069,7 @@ class KwikIDFormsListComponent {
1960
2069
  }
1961
2070
  }
1962
2071
  /** @nocollapse */ KwikIDFormsListComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: KwikIDFormsListComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
1963
- /** @nocollapse */ KwikIDFormsListComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.16", type: KwikIDFormsListComponent, selector: "kwikid-forms-list", inputs: { userConfig: "userConfig", formsList: "formsList", formsListCompleted: "formsListCompleted", isMobileView: "isMobileView" }, outputs: { onClickSetActiveForm: "onClickSetActiveForm", onClickHideFormsList: "onClickHideFormsList", onClickSubmitForms: "onClickSubmitForms" }, usesOnChanges: true, ngImport: i0, template: "<div id=\"sidebar-container\">\r\n <div id=\"sidebar\">\r\n <div ngClass=\"kwikid-form-header\">\r\n <div id=\"uf-header\">\r\n <div id=\"uf-header-logo-container\">\r\n <img\r\n id=\"uf-header-logo\"\r\n src=\"{{ this.userConfig.theme.clientLogo }}\"\r\n [ngClass]=\"'large-icon'\"\r\n />\r\n </div>\r\n </div>\r\n <hr />\r\n </div>\r\n <div id=\"uf-progress\">\r\n <div id=\"uf-progress-steps\">\r\n {{ this.formsListCompleted.length }} / {{ this.formsList.length }} Steps\r\n Completed\r\n </div>\r\n <kwikui-progress-segmented\r\n [max]=\"this.formsList.length\"\r\n size=\"m\"\r\n [value]=\"this.formsListCompleted.length\"\r\n ></kwikui-progress-segmented>\r\n </div>\r\n <div id=\"uf-sections-container\">\r\n <div\r\n *ngFor=\"let form of formsList; let i = index\"\r\n [class]=\"'uf-section-item'\"\r\n [class.completed]=\"form.status === 'completed' && !form.disabled\"\r\n [class.edit]=\"form.status !== 'completed' && !form.disabled\"\r\n [class.locked]=\"form.status !== 'completed' && form.disabled\"\r\n (click)=\"\r\n form.status !== 'completed' && form.disabled\r\n ? undefined\r\n : handleOnClickSetActiveForm(form.key)\r\n \"\r\n >\r\n <div class=\"uf-form-section-card-title\">\r\n {{ form.title }}\r\n </div>\r\n <div class=\"uf-form-section-card-action\">\r\n <div\r\n *ngIf=\"form.status === 'completed' && !form.disabled\"\r\n class=\"uf-form-section-card-action-img completed\"\r\n >\r\n <tui-svg src=\"tuiIconCheckLarge\"></tui-svg>\r\n </div>\r\n <div\r\n *ngIf=\"form.status !== 'completed' && !form.disabled\"\r\n class=\"uf-form-section-card-action-img edit\"\r\n >\r\n <tui-svg src=\"tuiIconEdit\"></tui-svg>\r\n </div>\r\n <div\r\n *ngIf=\"form.status !== 'completed' && form.disabled\"\r\n class=\"uf-form-section-card-action-img locked\"\r\n >\r\n <tui-svg src=\"tuiIconLock\"></tui-svg>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div id=\"submit-sidebar-btn-container\">\r\n <kwikui-button\r\n [disabled]=\"false\"\r\n id=\"\"\r\n label=\"Submit\"\r\n [showLoader]=\"false\"\r\n styles=\"\"\r\n class=\"\"\r\n type=\"button\"\r\n appearance=\"primary\"\r\n icon=\"\"\r\n iconRight=\"\"\r\n shape=\"null\"\r\n size=\"m\"\r\n styles=\"width: 100%\"\r\n (onClick)=\"handleOnSubmitForms($event)\"\r\n ></kwikui-button>\r\n </div>\r\n </div>\r\n</div>\r\n", styles: ["::-webkit-scrollbar{width:8px}::-webkit-scrollbar-track{border-radius:10px}::-webkit-scrollbar-thumb{background:lightgray;border-radius:10px}::-webkit-scrollbar-thumb:hover{background:gray}#sidebar-container{width:100%;height:100%;margin:0 auto;display:flex;flex-direction:column;justify-content:flex-start;align-items:stretch;align-content:center}#sidebar{width:100%;height:100%;display:flex;flex-direction:column;align-content:center;justify-content:flex-start;align-items:stretch}.uf-section-item{width:100%;display:flex;flex-direction:row;align-items:center;justify-content:space-between;align-content:center;padding:1rem;grid-gap:1rem;gap:1rem;cursor:pointer;box-shadow:0 .1rem .5rem -.25rem gray;border-radius:.5rem;background-color:var(--tui-base-02)}.uf-section-item:hover{box-shadow:0 .2rem .75rem -.5rem #656565}#submit-sidebar-btn-container{width:100%;bottom:0px;z-index:1;padding:1rem;display:flex;flex-direction:row;align-content:center;justify-content:center;align-items:center;grid-gap:1rem;gap:1rem}#submit-sidebar-btn-container *{flex-grow:1}#uf-sections-container{display:flex;flex-direction:column;height:100%;grid-row-gap:20px;row-gap:20px;padding:1rem;overflow-y:auto}.uf-form-section-card{display:flex;flex-direction:row;align-content:center;justify-content:space-between;align-items:center;grid-column-gap:10px;column-gap:10px;border:none;border-radius:8px;background-color:#e9e9e9;height:-moz-fit-content;height:fit-content;min-height:60px;padding:10px 15px;width:100%;max-width:350px;margin:0 auto}.uf-section-item.locked{-webkit-user-select:none;user-select:none;cursor:not-allowed}.uf-form-section-card .uf-form-section-card-title{font-size:1.2em;text-align:left;line-height:1.25em}.uf-form-section-card .uf-form-section-card-action{width:30px;height:30px;display:flex;flex-direction:row;align-content:center;justify-content:center;align-items:center}.uf-form-section-card .uf-form-section-card-action .uf-form-section-card-action-img{width:30px;height:30px;display:flex;flex-direction:row;align-content:center;justify-content:center;align-items:center;border-radius:100%;color:#fff;font-weight:bold}.uf-form-section-card-action-img.completed{background-color:#228b22;padding:.25rem;border-radius:50%;color:#fff}.uf-form-section-card-action-img.edit{background-color:#dc143c;padding:.25rem;border-radius:50%;color:#fff}.uf-form-section-card-action-img.locked{background-color:gray;padding:.25rem;border-radius:50%;color:#fff}#uf-progress{display:flex;padding:1rem;flex-direction:column;align-content:center;justify-content:center;align-items:stretch;grid-gap:.5rem;gap:.5rem}#uf-progress-steps{font-size:1em;text-align:right;color:#3d3d3d}.uf-form-section-card-title{font-size:1em;font-weight:bold;color:#121212}@media screen and (max-width: 600px){#sidebar-container{max-width:unset}}.kwikid-form-header{height:70px;z-index:6}.kwikid-form-header hr{width:calc(100% - 1rem);margin-left:auto;margin-right:auto}#uf-header{display:flex;flex-direction:row;align-content:center;align-items:center;justify-content:flex-start;grid-column-gap:10px;column-gap:10px;padding:10px 20px;width:100%;max-width:calc(400px + 50vw + 2rem);margin:0 auto;height:70px;z-index:1}#uf-header #uf-header-goback-container{display:none}#uf-header #uf-header-goback-container:hover{border-radius:50%;background-color:#d3d3d3}#uf-header #uf-header-goback-container #uf-header-goback{width:100%;height:auto}#uf-header #uf-header-logo-container{display:flex;flex-direction:row;align-content:center;justify-content:center;align-items:center}#uf-header #uf-header-logo-container #uf-header-logo.small-icon{width:100%;height:50px}#uf-header #uf-header-logo-container #uf-header-logo.large-icon{width:100%;height:50px}#uf-header #uf-header-title-container{display:flex;flex-direction:column;justify-content:center;align-items:flex-start;grid-row-gap:4px;row-gap:4px}#uf-header #uf-header-title-container #uf-header-title{font-size:1.4em;color:#121212}#uf-header #uf-header-title-container #uf-header-subtitle{font-size:1.2em;color:#121212}\n"], components: [{ type: i2.KwikUIProgressSegmentedComponent, selector: "kwikui-progress-segmented", inputs: ["value", "max", "size", "colors"] }, { type: i3.TuiSvgComponent, selector: "tui-svg", inputs: ["src"] }, { type: i2.KwikUIButtonComponent, selector: "kwikui-button", inputs: ["disabled", "id", "label", "showLoader", "styles", "class", "type", "appearance", "icon", "iconRight", "shape", "size"], outputs: ["onClick"] }], directives: [{ type: i4.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { type: i4.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }] });
2072
+ /** @nocollapse */ KwikIDFormsListComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.16", type: KwikIDFormsListComponent, selector: "kwikid-forms-list", inputs: { showFormFields: "showFormFields", userConfig: "userConfig", formsList: "formsList", formsListCompleted: "formsListCompleted", isMobileView: "isMobileView" }, outputs: { onClickSetActiveForm: "onClickSetActiveForm", onClickHideFormsList: "onClickHideFormsList", onClickSubmitForms: "onClickSubmitForms" }, usesOnChanges: true, ngImport: i0, template: "<div id=\"sidebar-container\">\r\n <div id=\"sidebar\">\r\n <div ngClass=\"kwikid-form-header\">\r\n <div id=\"uf-header\">\r\n <div id=\"uf-header-logo-container\">\r\n <img\r\n id=\"uf-header-logo\"\r\n src=\"{{ this.userConfig.theme.clientLogo }}\"\r\n [ngClass]=\"'large-icon'\"\r\n />\r\n </div>\r\n </div>\r\n <hr />\r\n </div>\r\n <div id=\"uf-progress\">\r\n <div id=\"uf-progress-steps\">\r\n {{ this.formsListCompleted.length }} / {{ this.formsList.length }} Steps\r\n Completed\r\n </div>\r\n <kwikui-progress-segmented\r\n [max]=\"this.formsList.length\"\r\n size=\"m\"\r\n [value]=\"this.formsListCompleted.length\"\r\n ></kwikui-progress-segmented>\r\n </div>\r\n <div id=\"uf-sections-container\">\r\n <div\r\n *ngFor=\"let form of formsList; let i = index\"\r\n [class]=\"'uf-section-item'\"\r\n [class.completed]=\"form.status === 'completed' && !form.disabled\"\r\n [class.edit]=\"form.status === 'editable' && !form.disabled\"\r\n [class.locked]=\"form.status === 'locked' && form.disabled\"\r\n (click)=\"\r\n form.status === 'locked' && form.disabled\r\n ? undefined\r\n : handleOnClickSetActiveForm(form.key)\r\n \"\r\n >\r\n <div class=\"uf-form-section-card-title\">\r\n {{ form.title }}\r\n </div>\r\n <div class=\"uf-form-section-card-action\">\r\n <div\r\n *ngIf=\"form.status === 'completed' && !form.disabled\"\r\n class=\"uf-form-section-card-action-img completed\"\r\n >\r\n <tui-svg src=\"tuiIconCheckLarge\"></tui-svg>\r\n </div>\r\n <div\r\n *ngIf=\"form.status !== 'completed' && !form.disabled\"\r\n class=\"uf-form-section-card-action-img edit\"\r\n >\r\n <tui-svg src=\"tuiIconEdit\"></tui-svg>\r\n </div>\r\n <div\r\n *ngIf=\"form.status !== 'completed' && form.disabled\"\r\n class=\"uf-form-section-card-action-img locked\"\r\n >\r\n <tui-svg src=\"tuiIconLock\"></tui-svg>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div id=\"submit-sidebar-btn-container\">\r\n <kwikui-button\r\n [disabled]=\"false\"\r\n id=\"\"\r\n label=\"Submit\"\r\n [showLoader]=\"false\"\r\n styles=\"\"\r\n class=\"\"\r\n type=\"button\"\r\n appearance=\"primary\"\r\n icon=\"\"\r\n iconRight=\"\"\r\n shape=\"null\"\r\n size=\"m\"\r\n styles=\"width: 100%\"\r\n (onClick)=\"handleOnSubmitForms($event)\"\r\n ></kwikui-button>\r\n </div>\r\n </div>\r\n</div>\r\n", styles: ["::-webkit-scrollbar{width:8px}::-webkit-scrollbar-track{border-radius:10px}::-webkit-scrollbar-thumb{background:lightgray;border-radius:10px}::-webkit-scrollbar-thumb:hover{background:gray}#sidebar-container{width:100%;height:100%;margin:0 auto;display:flex;flex-direction:column;justify-content:flex-start;align-items:stretch;align-content:center}#sidebar{width:100%;height:100%;display:flex;flex-direction:column;align-content:center;justify-content:flex-start;align-items:stretch}.uf-section-item{width:100%;display:flex;flex-direction:row;align-items:center;justify-content:space-between;align-content:center;padding:1rem;grid-gap:1rem;gap:1rem;cursor:pointer;box-shadow:0 .1rem .5rem -.25rem gray;border-radius:.5rem;background-color:var(--tui-base-02)}.uf-section-item:hover{box-shadow:0 .2rem .75rem -.5rem #656565}#submit-sidebar-btn-container{width:100%;bottom:0px;z-index:1;padding:1rem;display:flex;flex-direction:row;align-content:center;justify-content:center;align-items:center;grid-gap:1rem;gap:1rem}#submit-sidebar-btn-container *{flex-grow:1}#uf-sections-container{display:flex;flex-direction:column;height:100%;grid-row-gap:20px;row-gap:20px;padding:1rem;overflow-y:auto}.uf-form-section-card{display:flex;flex-direction:row;align-content:center;justify-content:space-between;align-items:center;grid-column-gap:10px;column-gap:10px;border:none;border-radius:8px;background-color:#e9e9e9;height:-moz-fit-content;height:fit-content;min-height:60px;padding:10px 15px;width:100%;max-width:350px;margin:0 auto}.uf-section-item.locked{-webkit-user-select:none;user-select:none;cursor:not-allowed}.uf-form-section-card .uf-form-section-card-title{font-size:1.2em;text-align:left;line-height:1.25em}.uf-form-section-card .uf-form-section-card-action{width:30px;height:30px;display:flex;flex-direction:row;align-content:center;justify-content:center;align-items:center}.uf-form-section-card .uf-form-section-card-action .uf-form-section-card-action-img{width:30px;height:30px;display:flex;flex-direction:row;align-content:center;justify-content:center;align-items:center;border-radius:100%;color:#fff;font-weight:bold}.uf-form-section-card-action-img.completed{background-color:#228b22;padding:.25rem;border-radius:50%;color:#fff}.uf-form-section-card-action-img.edit{background-color:#dc143c;padding:.25rem;border-radius:50%;color:#fff}.uf-form-section-card-action-img.locked{background-color:gray;padding:.25rem;border-radius:50%;color:#fff}#uf-progress{display:flex;padding:1rem;flex-direction:column;align-content:center;justify-content:center;align-items:stretch;grid-gap:.5rem;gap:.5rem}#uf-progress-steps{font-size:1em;text-align:right;color:#3d3d3d}.uf-form-section-card-title{font-size:1em;font-weight:bold;color:#121212}@media screen and (max-width: 600px){#sidebar-container{max-width:unset}}.kwikid-form-header{height:70px;z-index:6}.kwikid-form-header hr{width:calc(100% - 1rem);margin-left:auto;margin-right:auto}#uf-header{display:flex;flex-direction:row;align-content:center;align-items:center;justify-content:flex-start;grid-column-gap:10px;column-gap:10px;padding:10px 20px;width:100%;max-width:calc(400px + 50vw + 2rem);margin:0 auto;height:70px;z-index:1}#uf-header #uf-header-goback-container{display:none}#uf-header #uf-header-goback-container:hover{border-radius:50%;background-color:#d3d3d3}#uf-header #uf-header-goback-container #uf-header-goback{width:100%;height:auto}#uf-header #uf-header-logo-container{display:flex;flex-direction:row;align-content:center;justify-content:center;align-items:center}#uf-header #uf-header-logo-container #uf-header-logo.small-icon{width:100%;height:50px}#uf-header #uf-header-logo-container #uf-header-logo.large-icon{width:100%;height:50px}#uf-header #uf-header-title-container{display:flex;flex-direction:column;justify-content:center;align-items:flex-start;grid-row-gap:4px;row-gap:4px}#uf-header #uf-header-title-container #uf-header-title{font-size:1.4em;color:#121212}#uf-header #uf-header-title-container #uf-header-subtitle{font-size:1.2em;color:#121212}\n"], components: [{ type: i2.KwikUIProgressSegmentedComponent, selector: "kwikui-progress-segmented", inputs: ["value", "max", "size", "colors"] }, { type: i3.TuiSvgComponent, selector: "tui-svg", inputs: ["src"] }, { type: i2.KwikUIButtonComponent, selector: "kwikui-button", inputs: ["disabled", "id", "label", "showLoader", "styles", "class", "type", "appearance", "icon", "iconRight", "shape", "size"], outputs: ["onClick"] }], directives: [{ type: i4.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { type: i4.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }] });
1964
2073
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: KwikIDFormsListComponent, decorators: [{
1965
2074
  type: Component,
1966
2075
  args: [{
@@ -1968,7 +2077,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.16", ngImpo
1968
2077
  templateUrl: "./forms-list.component.html",
1969
2078
  styleUrls: ["./forms-list.component.scss"]
1970
2079
  }]
1971
- }], ctorParameters: function () { return []; }, propDecorators: { userConfig: [{
2080
+ }], ctorParameters: function () { return []; }, propDecorators: { showFormFields: [{
2081
+ type: Input
2082
+ }], userConfig: [{
1972
2083
  type: Input
1973
2084
  }], formsList: [{
1974
2085
  type: Input
@@ -2198,7 +2309,6 @@ class Converter {
2198
2309
  return { field: field, connectedFieldMapping: connectedFieldMapping };
2199
2310
  };
2200
2311
  const getConnectedElementParentFieldMapping = (field, connectedFieldMapping) => {
2201
- console.log(field, connectedFieldMapping);
2202
2312
  if (hasKey$2(connectedFieldMapping["child"], field.key)) {
2203
2313
  for (let connectedParentKey of connectedFieldMapping["child"][field.key]) {
2204
2314
  if (hasKey$2(connectedFieldMapping["parent"], connectedParentKey["key"])) {
@@ -2234,37 +2344,48 @@ class Converter {
2234
2344
  return field;
2235
2345
  };
2236
2346
  const updateFieldValidatorConfig = (field) => {
2347
+ var _a, _b, _c, _d, _e;
2237
2348
  if (field.type !== "title") {
2238
2349
  const validators = hasKey$2(field, "validators") ? field.validators : {};
2239
2350
  field = this.setMissingFieldKeyValue(field, "validators", {});
2240
2351
  field = this.setFieldKeyValue(field, "validators", Object.assign(Object.assign({}, field["validators"]), { min: hasKey$2(validators, "min")
2241
- ? validators.min
2352
+ ? isNotEmpty$1(validators.min)
2353
+ ? Number(validators.min)
2354
+ : null
2242
2355
  : hasKey$2(field, "min")
2243
- ? field.min
2244
- : undefined, max: hasKey$2(validators, "max")
2245
- ? validators.max
2356
+ ? Number(field.min)
2357
+ : null, max: hasKey$2(validators, "max")
2358
+ ? isNotEmpty$1(validators.max)
2359
+ ? Number(validators.max)
2360
+ : null
2246
2361
  : hasKey$2(field, "max")
2247
- ? field.max
2248
- : undefined, required: hasKey$2(validators, "required")
2249
- ? validators.required
2362
+ ? Number(field.max)
2363
+ : null, required: hasKey$2(validators, "required")
2364
+ ? Boolean(validators.required)
2250
2365
  : hasKey$2(field, "required")
2251
- ? field.required
2252
- : undefined, minLength: hasKey$2(validators, "minLength")
2253
- ? validators.minLength
2366
+ ? Boolean(field.required)
2367
+ : false, minLength: hasKey$2(validators, "minLength")
2368
+ ? isNotEmpty$1(validators.minLength)
2369
+ ? Number(validators.minLength)
2370
+ : null
2254
2371
  : hasKey$2(field, "minLength")
2255
- ? field.minLength
2256
- : undefined, maxLength: hasKey$2(validators, "maxLength")
2257
- ? validators.maxLength
2372
+ ? Number(field.minLength)
2373
+ : null, maxLength: hasKey$2(validators, "maxLength")
2374
+ ? isNotEmpty$1(validators.maxLength)
2375
+ ? Number(validators.maxLength)
2376
+ : null
2258
2377
  : hasKey$2(field, "length")
2259
- ? field.length
2378
+ ? Number(field.length)
2260
2379
  : hasKey$2(field, "maxLength")
2261
- ? field.maxLength
2262
- : undefined, pattern: hasKey$2(field.validators, "pattern")
2263
- ? field.validators.pattern
2380
+ ? Number(field.maxLength)
2381
+ : null, pattern: hasKey$2(validators, "pattern")
2382
+ ? isNotEmpty$1(validators.pattern)
2383
+ ? validators.pattern
2384
+ : undefined
2264
2385
  : hasKey$2(field, "pattern")
2265
- ? field.pattern
2386
+ ? { key: "CUSTOM", pattern: String(field.pattern) }
2266
2387
  : hasKey$2(field, "regex")
2267
- ? field.regex
2388
+ ? { key: "CUSTOM", pattern: String(field.regex) }
2268
2389
  : undefined }));
2269
2390
  delete field.min;
2270
2391
  delete field.max;
@@ -2274,6 +2395,29 @@ class Converter {
2274
2395
  delete field.maxLength;
2275
2396
  delete field.pattern;
2276
2397
  delete field.regex;
2398
+ switch (field.type) {
2399
+ case "text":
2400
+ delete field.validators.min;
2401
+ delete field.validators.max;
2402
+ break;
2403
+ default:
2404
+ break;
2405
+ }
2406
+ if (isEmpty$1((_a = field.validators) === null || _a === void 0 ? void 0 : _a.min)) {
2407
+ delete field.validators.min;
2408
+ }
2409
+ if (isEmpty$1((_b = field.validators) === null || _b === void 0 ? void 0 : _b.max)) {
2410
+ delete field.validators.min;
2411
+ }
2412
+ if (isEmpty$1((_c = field.validators) === null || _c === void 0 ? void 0 : _c.minLength)) {
2413
+ delete field.validators.minLength;
2414
+ }
2415
+ if (isEmpty$1((_d = field.validators) === null || _d === void 0 ? void 0 : _d.maxLength)) {
2416
+ delete field.validators.maxLength;
2417
+ }
2418
+ if (isEmpty$1((_e = field.validators) === null || _e === void 0 ? void 0 : _e.pattern)) {
2419
+ delete field.validators.pattern;
2420
+ }
2277
2421
  }
2278
2422
  return field;
2279
2423
  };
@@ -2770,7 +2914,7 @@ class KwikIDFormsRendererComponent {
2770
2914
  }
2771
2915
  }
2772
2916
  /** @nocollapse */ KwikIDFormsRendererComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: KwikIDFormsRendererComponent, deps: [{ token: KwikIDRendererService }, { token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Component });
2773
- /** @nocollapse */ KwikIDFormsRendererComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.16", type: KwikIDFormsRendererComponent, selector: "kwikid-forms-renderer", inputs: { userConfig: "userConfig", formsData: "formsData", apiCallResponse: "apiCallResponse" }, outputs: { onClickSubmit: "onClickSubmit", getFormData: "getFormData", onClickApiCall: "onClickApiCall" }, host: { listeners: { "window:resize": "windowResizeWatcher($event)" } }, providers: [KwikIDRendererService], usesOnChanges: true, ngImport: i0, template: "<div ngClass=\"kwikid-renderer\">\r\n <div\r\n ngClass=\"kwikid-layout-container\"\r\n *ngIf=\"!loading\"\r\n >\r\n <div\r\n ngClass=\"kwikid-sections-container\"\r\n *ngIf=\"showFormSections\"\r\n class=\"active\"\r\n [class.active]=\"showFormSections\"\r\n [class.mobile]=\"rendererService.isMobileView\"\r\n >\r\n <kwikid-forms-list\r\n [userConfig]=\"this.userConfig\"\r\n [formsList]=\"this.rendererService.formsList\"\r\n [formsListCompleted]=\"this.rendererService.formsListCompleted\"\r\n [isMobileView]=\"this.rendererService.isMobileView\"\r\n (onClickSetActiveForm)=\"this.handleOnClickSetActiveForm($event)\"\r\n (onClickSubmitForms)=\"this.handleOnClickSubmitForms($event)\"\r\n ></kwikid-forms-list>\r\n </div>\r\n <div\r\n ngClass=\"kwikid-forms-container\"\r\n *ngIf=\"this.showForm && this.showFormFields\"\r\n [class.active]=\"showFormFields\"\r\n [class.mobile]=\"rendererService.isMobileView\"\r\n [@panelInOut]\r\n >\r\n <kwikid-form-view\r\n [formConfig]=\"this.rendererService.activeFormConfig\"\r\n [formData]=\"this.rendererService.activeFormData\"\r\n [apiCallResponse]=\"this.apiCallResponse\"\r\n [formsList]=\"this.rendererService.formsList\"\r\n [allFormsData]=\"this.rendererService.allFormsData\"\r\n [isMobileView]=\"this.rendererService.isMobileView\"\r\n (onClickApiCall)=\"this.handleOnClickApiCall($event)\"\r\n (onClickViewForms)=\"this.handleOnClickViewForms($event)\"\r\n (onClickSaveForm)=\"this.handleOnClickSaveForm($event)\"\r\n (getActiveFormData)=\"this.handleGetActiveFormData($event)\"\r\n ></kwikid-form-view>\r\n </div>\r\n </div>\r\n</div>\r\n", styles: [".kwikid-root{width:100%;height:100%}.kwikid-renderer{display:flex;flex-direction:column;justify-content:flex-start;align-items:stretch;align-content:center;width:100%;height:100%}.kwikid-layout-container{display:flex;flex-direction:row;padding:0 1rem;height:100%;justify-content:center;align-items:stretch;background:var(--tui-secondary);position:relative}.kwikid-sections-container{display:block;width:100%;max-width:400px;height:calc(100% - 2rem);padding:.25rem .5rem 0;border-radius:1rem;background-color:var(--tui-base-01);margin:auto 1rem auto 0;box-shadow:0 0 12px -8px var(--tui-primary)}.kwikid-sections-container.mobile{position:absolute;top:0;left:0;z-index:5;opacity:1;visibility:visible;transition:all 1s}.kwikid-forms-container{display:block;width:100%;max-width:50vw;margin:auto 0;height:calc(100% - 2rem);padding:.25rem .5rem 0;border-radius:1rem;background-color:var(--tui-base-01);box-shadow:0 0 12px -8px var(--tui-primary)}.kwikid-forms-container.mobile{position:absolute;top:0;left:0;z-index:5;opacity:1;visibility:visible;transition:all 1s}@media screen and (max-width: 600px){.kwikid-layout-container{padding:0;background:transparent}.kwikid-sections-container{position:absolute;max-width:100%;bottom:-10000px;left:-10000px;opacity:0;padding:0;visibility:hidden}.kwikid-sections-container.active{visibility:visible}.kwikid-sections-container.mobile{height:100%;opacity:1;visibility:visible;transition:all 2s;border-radius:0;box-shadow:none;top:0px;margin:0;position:absolute}.kwikid-forms-container{display:none;max-width:100%;height:100%;padding:0;border-radius:0;box-shadow:none}.kwikid-forms-container.mobile{height:100%;opacity:1;visibility:visible;transition:all 2s;border-radius:0;box-shadow:none;top:0px;margin:0;position:absolute}.kwikid-forms-container.active{display:block}}\n"], components: [{ type: KwikIDFormsListComponent, selector: "kwikid-forms-list", inputs: ["userConfig", "formsList", "formsListCompleted", "isMobileView"], outputs: ["onClickSetActiveForm", "onClickHideFormsList", "onClickSubmitForms"] }, { type: KwikIDFormViewComponent, selector: "kwikid-form-view", inputs: ["formConfig", "formData", "apiCallResponse", "isMobileView", "allFormsData", "formsList"], outputs: ["onClickViewForms", "onClickSaveForm", "onClickApiCall", "getActiveFormData"] }], directives: [{ type: i4.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }], animations: [
2917
+ /** @nocollapse */ KwikIDFormsRendererComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.16", type: KwikIDFormsRendererComponent, selector: "kwikid-forms-renderer", inputs: { userConfig: "userConfig", formsData: "formsData", apiCallResponse: "apiCallResponse" }, outputs: { onClickSubmit: "onClickSubmit", getFormData: "getFormData", onClickApiCall: "onClickApiCall" }, host: { listeners: { "window:resize": "windowResizeWatcher($event)" } }, providers: [KwikIDRendererService], usesOnChanges: true, ngImport: i0, template: "<div ngClass=\"kwikid-renderer\">\r\n <div\r\n ngClass=\"kwikid-layout-container\"\r\n *ngIf=\"!loading\"\r\n >\r\n <div\r\n ngClass=\"kwikid-sections-container\"\r\n *ngIf=\"showFormSections\"\r\n class=\"active\"\r\n [class.active]=\"showFormSections\"\r\n [class.mobile]=\"rendererService.isMobileView\"\r\n >\r\n <kwikid-forms-list\r\n [showFormFields]=\"this.showFormFields\"\r\n [userConfig]=\"this.userConfig\"\r\n [formsList]=\"this.rendererService.formsList\"\r\n [formsListCompleted]=\"this.rendererService.formsListCompleted\"\r\n [isMobileView]=\"this.rendererService.isMobileView\"\r\n (onClickSetActiveForm)=\"this.handleOnClickSetActiveForm($event)\"\r\n (onClickSubmitForms)=\"this.handleOnClickSubmitForms($event)\"\r\n ></kwikid-forms-list>\r\n </div>\r\n <div\r\n ngClass=\"kwikid-forms-container\"\r\n *ngIf=\"this.showForm && this.showFormFields\"\r\n [class.active]=\"showFormFields\"\r\n [class.mobile]=\"rendererService.isMobileView\"\r\n [@panelInOut]\r\n >\r\n <kwikid-form-view\r\n [formConfig]=\"this.rendererService.activeFormConfig\"\r\n [formData]=\"this.rendererService.activeFormData\"\r\n [apiCallResponse]=\"this.apiCallResponse\"\r\n [formsList]=\"this.rendererService.formsList\"\r\n [allFormsData]=\"this.rendererService.allFormsData\"\r\n [isMobileView]=\"this.rendererService.isMobileView\"\r\n (onClickApiCall)=\"this.handleOnClickApiCall($event)\"\r\n (onClickViewForms)=\"this.handleOnClickViewForms($event)\"\r\n (onClickSaveForm)=\"this.handleOnClickSaveForm($event)\"\r\n (getActiveFormData)=\"this.handleGetActiveFormData($event)\"\r\n ></kwikid-form-view>\r\n </div>\r\n </div>\r\n</div>\r\n", styles: [".kwikid-root{width:100%;height:100%}.kwikid-renderer{display:flex;flex-direction:column;justify-content:flex-start;align-items:stretch;align-content:center;width:100%;height:100%}.kwikid-layout-container{display:flex;flex-direction:row;padding:0 1rem;height:100%;justify-content:center;align-items:stretch;background:var(--tui-secondary);position:relative}.kwikid-sections-container{display:block;width:100%;max-width:400px;height:calc(100% - 2rem);padding:.25rem .5rem 0;border-radius:1rem;background-color:var(--tui-base-01);margin:auto 1rem auto 0;box-shadow:0 0 12px -8px var(--tui-primary)}.kwikid-sections-container.mobile{position:absolute;top:0;left:0;z-index:5;opacity:1;visibility:visible;transition:all 1s;height:100%;border-radius:0;max-width:unset}.kwikid-forms-container{display:block;width:100%;max-width:50%;margin:auto 0;height:calc(100% - 2rem);padding:.25rem .5rem 0;border-radius:1rem;background-color:var(--tui-base-01);box-shadow:0 0 12px -8px var(--tui-primary)}.kwikid-forms-container.mobile{position:absolute;top:0;left:0;z-index:5;opacity:1;visibility:visible;transition:all 1s;height:100%;border-radius:0;max-width:unset}@media screen and (max-width: 600px){.kwikid-layout-container{padding:0;background:transparent}.kwikid-sections-container{position:absolute;max-width:100%;bottom:-10000px;left:-10000px;opacity:0;padding:0;visibility:hidden}.kwikid-sections-container.active{visibility:visible}.kwikid-sections-container.mobile{height:100%;opacity:1;visibility:visible;transition:all 2s;border-radius:0;box-shadow:none;top:0px;margin:0;position:absolute}.kwikid-forms-container{display:none;max-width:100%;height:100%;padding:0;border-radius:0;box-shadow:none}.kwikid-forms-container.mobile{height:100%;opacity:1;visibility:visible;transition:all 2s;border-radius:0;box-shadow:none;top:0px;margin:0;position:absolute}.kwikid-forms-container.active{display:block}}\n"], components: [{ type: KwikIDFormsListComponent, selector: "kwikid-forms-list", inputs: ["showFormFields", "userConfig", "formsList", "formsListCompleted", "isMobileView"], outputs: ["onClickSetActiveForm", "onClickHideFormsList", "onClickSubmitForms"] }, { type: KwikIDFormViewComponent, selector: "kwikid-form-view", inputs: ["formConfig", "formData", "apiCallResponse", "isMobileView", "allFormsData", "formsList"], outputs: ["onClickViewForms", "onClickSaveForm", "onClickApiCall", "getActiveFormData"] }], directives: [{ type: i4.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }], animations: [
2774
2918
  trigger("panelInOut", [
2775
2919
  transition(":enter", [
2776
2920
  style({ transform: "translateY(100%)" }),