@bigbinary/neeto-form-frontend 4.4.6 → 4.4.8

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 (54) hide show
  1. package/README.md +4 -1
  2. package/app/javascript/src/translations/en.json +10 -1
  3. package/dist/BuildForm.js +51 -9
  4. package/dist/BuildForm.js.map +1 -1
  5. package/dist/ExternalForm.js +19 -11
  6. package/dist/ExternalForm.js.map +1 -1
  7. package/dist/Submission.js +1 -1
  8. package/dist/UrlBuilder.js +12 -4
  9. package/dist/UrlBuilder.js.map +1 -1
  10. package/dist/{buildForm-D-epUrZG.js → buildForm-CrOWLvLE.js} +2 -2
  11. package/dist/{buildForm-D-epUrZG.js.map → buildForm-CrOWLvLE.js.map} +1 -1
  12. package/dist/{buildForm-CgofRtEN.js → buildForm-DfMpfuSp.js} +2 -2
  13. package/dist/{buildForm-CgofRtEN.js.map → buildForm-DfMpfuSp.js.map} +1 -1
  14. package/dist/cjs/BuildForm.js +51 -9
  15. package/dist/cjs/BuildForm.js.map +1 -1
  16. package/dist/cjs/ExternalForm.js +19 -11
  17. package/dist/cjs/ExternalForm.js.map +1 -1
  18. package/dist/cjs/Submission.js +1 -1
  19. package/dist/cjs/UrlBuilder.js +12 -4
  20. package/dist/cjs/UrlBuilder.js.map +1 -1
  21. package/dist/cjs/hooks.js +4 -4
  22. package/dist/cjs/index.js +8 -7
  23. package/dist/cjs/index.js.map +1 -1
  24. package/dist/{constants-BNfHPNOx.js → constants-Cj0XxE8a.js} +2 -1
  25. package/dist/constants-Cj0XxE8a.js.map +1 -0
  26. package/dist/{constants-CfUZ9B6N.js → constants-D5JlvWws.js} +2 -1
  27. package/dist/constants-D5JlvWws.js.map +1 -0
  28. package/dist/hooks.js +4 -4
  29. package/dist/{index-0m1EzLFY.js → index-Beo6ztaM.js} +2 -2
  30. package/dist/{index-0m1EzLFY.js.map → index-Beo6ztaM.js.map} +1 -1
  31. package/dist/{index-y4GiXx7o.js → index-DhtQJpD_.js} +2 -2
  32. package/dist/{index-y4GiXx7o.js.map → index-DhtQJpD_.js.map} +1 -1
  33. package/dist/index.js +8 -7
  34. package/dist/index.js.map +1 -1
  35. package/dist/{useFormSubmission-DyS5Dm1q.js → useFormSubmission-D3O7sDHp.js} +2 -2
  36. package/dist/{useFormSubmission-DyS5Dm1q.js.map → useFormSubmission-D3O7sDHp.js.map} +1 -1
  37. package/dist/{useFormSubmission-Cx63P761.js → useFormSubmission-PLRMfzJ3.js} +2 -2
  38. package/dist/{useFormSubmission-Cx63P761.js.map → useFormSubmission-PLRMfzJ3.js.map} +1 -1
  39. package/dist/{utils-C9nDMm4c.js → utils-CI844li1.js} +112 -46
  40. package/dist/utils-CI844li1.js.map +1 -0
  41. package/dist/{utils-DEBFghm4.js → utils-baAzU7l8.js} +112 -46
  42. package/dist/utils-baAzU7l8.js.map +1 -0
  43. package/dist/{yup-Dx1WK2_p.js → yup-CSYHMEsr.js} +26 -7
  44. package/dist/yup-CSYHMEsr.js.map +1 -0
  45. package/dist/{yup-CMEoabdy.js → yup-DMlViLLB.js} +27 -6
  46. package/dist/yup-DMlViLLB.js.map +1 -0
  47. package/package.json +5 -5
  48. package/types.d.ts +1 -0
  49. package/dist/constants-BNfHPNOx.js.map +0 -1
  50. package/dist/constants-CfUZ9B6N.js.map +0 -1
  51. package/dist/utils-C9nDMm4c.js.map +0 -1
  52. package/dist/utils-DEBFghm4.js.map +0 -1
  53. package/dist/yup-CMEoabdy.js.map +0 -1
  54. package/dist/yup-Dx1WK2_p.js.map +0 -1
@@ -1,13 +1,13 @@
1
1
  import { useEffect, useState, useImperativeHandle, memo, Fragment as Fragment$1 } from 'react';
2
2
  import { useFormikContext, useField, Field as Field$1, FastField } from 'formik';
3
3
  import { isPresent, isNotEmpty, findBy, filterBy, findById, isNotPresent, hyphenate, noop, toLabelAndValue, getRandomInt, randomPick, slugify, notEqualsDeep } from '@bigbinary/neeto-cist';
4
- import { i as isFunction, b as isEmptyValues, f as fieldWithFallback } from './index-y4GiXx7o.js';
4
+ import { i as isFunction, b as isEmptyValues, f as fieldWithFallback } from './index-DhtQJpD_.js';
5
5
  import { dayjs, getFromLocalStorage, setToLocalStorage, removeFromLocalStorage, withEventTargetValue, buildUrl } from '@bigbinary/neeto-commons-frontend/utils';
6
6
  import { parsePhoneNumber } from 'libphonenumber-js';
7
7
  import { pick, mergeRight, omit, isEmpty, max, when, is, last, includes, __, mergeLeft, isNil, clamp, prop, trim, map, zipObj, identity, pluck, values, pipe, dec, equals } from 'ramda';
8
8
  import _defineProperty from '@babel/runtime/helpers/defineProperty';
9
9
  import EditorContent from '@bigbinary/neeto-editor/EditorContent';
10
- import { Q as QUESTION_TYPES, C as CAPTCHA_TYPES, E as EMAIL_VERIFICATIONS_CREATE_URL, j as EMAIL_VERIFICATIONS_VERIFY_URL } from './constants-BNfHPNOx.js';
10
+ import { Q as QUESTION_TYPES, C as CAPTCHA_TYPES, E as EMAIL_VERIFICATIONS_CREATE_URL, j as EMAIL_VERIFICATIONS_VERIFY_URL } from './constants-Cj0XxE8a.js';
11
11
  import _slicedToArray from '@babel/runtime/helpers/slicedToArray';
12
12
  import Plus from '@bigbinary/neeto-icons/Plus';
13
13
  import Button from '@bigbinary/neetoui/Button';
@@ -20,7 +20,7 @@ import { isEditorEmpty } from '@bigbinary/neeto-editor/utils';
20
20
  import { validation, PhoneNumberInput } from '@bigbinary/neeto-molecules/PhoneNumber';
21
21
  import i18next from 'i18next';
22
22
  import { jsx, jsxs, Fragment } from 'react/jsx-runtime';
23
- import { a as QUESTION_KIND, P as PARENTHESES_REGEX, R as RATING_VALUES, E as EMAIL_REGEX, S as SCHEMA_LESS_QUESTION_KINDS, c as SIX_DIGIT_NUMBER_REGEX, A as ADDRESS_FIELD_TYPES, d as ADDRESS_FIELD_WIDTHS, e as LABEL_FIELDS, g as generateArray, D as DEFAULT_CHOICE_QUESTION_ATTRIBUTES, f as RADIO_DESELECT_KEYS, h as RATING_OPTIONS, I as ICONS_MAP } from './yup-Dx1WK2_p.js';
23
+ import { a as QUESTION_KIND, S as SPOT_QUESTION_DEFAULT_VALUE, P as PARENTHESES_REGEX, R as RATING_VALUES, E as EMAIL_REGEX, c as SCHEMA_LESS_QUESTION_KINDS, d as SIX_DIGIT_NUMBER_REGEX, A as ADDRESS_FIELD_TYPES, e as ADDRESS_FIELD_WIDTHS, f as LABEL_FIELDS, g as generateArray, D as DEFAULT_CHOICE_QUESTION_ATTRIBUTES, h as RADIO_DESELECT_KEYS, i as RATING_OPTIONS, I as ICONS_MAP } from './yup-CSYHMEsr.js';
24
24
  import _toArray from '@babel/runtime/helpers/toArray';
25
25
  import * as yup from 'yup';
26
26
  import classnames from 'classnames';
@@ -44,7 +44,9 @@ import Label from '@bigbinary/neetoui/Label';
44
44
  import Radio from '@bigbinary/neetoui/Radio';
45
45
  import Image from '@bigbinary/neeto-icons/Image';
46
46
  import NeetoEditor from '@bigbinary/neeto-editor/Editor';
47
+ import Info from '@bigbinary/neeto-icons/Info';
47
48
  import Textarea from '@bigbinary/neetoui/Textarea';
49
+ import Tag from '@bigbinary/neetoui/Tag';
48
50
 
49
51
  var clientI18nInstance = i18next.cloneInstance();
50
52
 
@@ -339,6 +341,11 @@ var getNameFromUrl = function getNameFromUrl(_ref7, fieldCodes) {
339
341
  lastName: lastName
340
342
  };
341
343
  };
344
+ var isValidSpotValue = function isValidSpotValue(value, remainingSlotsCount) {
345
+ var num = Number(value);
346
+ if (!Number.isInteger(num) || num <= 0) return false;
347
+ return !(typeof remainingSlotsCount === "number" && remainingSlotsCount >= 0 && num > remainingSlotsCount);
348
+ };
342
349
  var buildEmailVerificationEntries = function buildEmailVerificationEntries() {
343
350
  var questions = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [];
344
351
  var emailQuestionsRequiringVerification = filterBy({
@@ -361,7 +368,8 @@ var generateInitValues = function generateInitValues(_ref9) {
361
368
  _ref9$localValues = _ref9.localValues,
362
369
  localValues = _ref9$localValues === void 0 ? {} : _ref9$localValues,
363
370
  _ref9$fieldCodes = _ref9.fieldCodes,
364
- fieldCodes = _ref9$fieldCodes === void 0 ? {} : _ref9$fieldCodes;
371
+ fieldCodes = _ref9$fieldCodes === void 0 ? {} : _ref9$fieldCodes,
372
+ remainingSlotsCount = _ref9.remainingSlotsCount;
365
373
  var initValues = {};
366
374
  var valuesMap = {};
367
375
  if (initialValues) {
@@ -414,21 +422,35 @@ var generateInitValues = function generateInitValues(_ref9) {
414
422
  case QUESTION_KIND.DROPDOWN.value:
415
423
  {
416
424
  var _optionsAttributes$fi;
417
- initValues[id] = ((_optionsAttributes$fi = optionsAttributes.find(function (option) {
425
+ var optionFromValues = optionsAttributes === null || optionsAttributes === void 0 || (_optionsAttributes$fi = optionsAttributes.find(function (option) {
418
426
  var _valuesMap$id3;
419
427
  return (_valuesMap$id3 = valuesMap[id]) === null || _valuesMap$id3 === void 0 || (_valuesMap$id3 = _valuesMap$id3.optionIds) === null || _valuesMap$id3 === void 0 ? void 0 : _valuesMap$id3.includes(option.id);
420
- })) === null || _optionsAttributes$fi === void 0 ? void 0 : _optionsAttributes$fi.id) || getOptionFromURL({
428
+ })) === null || _optionsAttributes$fi === void 0 ? void 0 : _optionsAttributes$fi.id;
429
+ var optionFromUrl = getOptionFromURL({
421
430
  optionsAttributes: optionsAttributes,
422
431
  fieldCodes: fieldCodes,
423
432
  fieldCode: fieldCode
424
433
  });
434
+ initValues[id] = optionFromValues || optionFromUrl;
435
+ return;
436
+ }
437
+ case QUESTION_KIND.SPOT.value:
438
+ {
439
+ var _valuesMap$id$value2, _valuesMap3;
440
+ var urlValue = getNumberFromUrl({
441
+ fieldCodes: fieldCodes,
442
+ fieldCode: fieldCode,
443
+ kind: QUESTION_KIND.INTEGER.value
444
+ });
445
+ var candidateValue = (_valuesMap$id$value2 = (_valuesMap3 = valuesMap) === null || _valuesMap3 === void 0 || (_valuesMap3 = _valuesMap3[id]) === null || _valuesMap3 === void 0 ? void 0 : _valuesMap3.value) !== null && _valuesMap$id$value2 !== void 0 ? _valuesMap$id$value2 : urlValue !== "" ? urlValue : SPOT_QUESTION_DEFAULT_VALUE;
446
+ initValues[id] = isValidSpotValue(candidateValue, remainingSlotsCount) ? candidateValue : SPOT_QUESTION_DEFAULT_VALUE;
425
447
  return;
426
448
  }
427
449
  case QUESTION_KIND.INTEGER.value:
428
450
  case QUESTION_KIND.DECIMAL.value:
429
451
  {
430
- var _valuesMap3;
431
- initValues[id] = ((_valuesMap3 = valuesMap) === null || _valuesMap3 === void 0 || (_valuesMap3 = _valuesMap3[id]) === null || _valuesMap3 === void 0 ? void 0 : _valuesMap3.value) || getNumberFromUrl({
452
+ var _valuesMap4;
453
+ initValues[id] = ((_valuesMap4 = valuesMap) === null || _valuesMap4 === void 0 || (_valuesMap4 = _valuesMap4[id]) === null || _valuesMap4 === void 0 ? void 0 : _valuesMap4.value) || getNumberFromUrl({
432
454
  fieldCodes: fieldCodes,
433
455
  fieldCode: fieldCode,
434
456
  kind: kind
@@ -437,8 +459,8 @@ var generateInitValues = function generateInitValues(_ref9) {
437
459
  }
438
460
  case QUESTION_KIND.RATING.value:
439
461
  {
440
- var _valuesMap4;
441
- initValues[id] = ((_valuesMap4 = valuesMap) === null || _valuesMap4 === void 0 || (_valuesMap4 = _valuesMap4[id]) === null || _valuesMap4 === void 0 ? void 0 : _valuesMap4.value) || getRatingFromUrl({
462
+ var _valuesMap5;
463
+ initValues[id] = ((_valuesMap5 = valuesMap) === null || _valuesMap5 === void 0 || (_valuesMap5 = _valuesMap5[id]) === null || _valuesMap5 === void 0 ? void 0 : _valuesMap5.value) || getRatingFromUrl({
442
464
  fieldCodes: fieldCodes,
443
465
  fieldCode: fieldCode
444
466
  });
@@ -451,24 +473,24 @@ var generateInitValues = function generateInitValues(_ref9) {
451
473
  }
452
474
  case QUESTION_KIND.FILE_UPLOAD.value:
453
475
  {
454
- var _valuesMap$id$value2, _valuesMap5;
476
+ var _valuesMap$id$value3, _valuesMap6;
455
477
  initValues[id] = {
456
- files: (_valuesMap$id$value2 = (_valuesMap5 = valuesMap) === null || _valuesMap5 === void 0 || (_valuesMap5 = _valuesMap5[id]) === null || _valuesMap5 === void 0 ? void 0 : _valuesMap5.value) !== null && _valuesMap$id$value2 !== void 0 ? _valuesMap$id$value2 : []
478
+ files: (_valuesMap$id$value3 = (_valuesMap6 = valuesMap) === null || _valuesMap6 === void 0 || (_valuesMap6 = _valuesMap6[id]) === null || _valuesMap6 === void 0 ? void 0 : _valuesMap6.value) !== null && _valuesMap$id$value3 !== void 0 ? _valuesMap$id$value3 : []
457
479
  };
458
480
  return;
459
481
  }
460
482
  case QUESTION_KIND.PHONE.value:
461
483
  case QUESTION_KIND.SMS_REMINDER.value:
462
484
  {
463
- var _valuesMap$id$value3, _valuesMap6;
464
- initValues[id] = (_valuesMap$id$value3 = (_valuesMap6 = valuesMap) === null || _valuesMap6 === void 0 || (_valuesMap6 = _valuesMap6[id]) === null || _valuesMap6 === void 0 ? void 0 : _valuesMap6.value) !== null && _valuesMap$id$value3 !== void 0 ? _valuesMap$id$value3 : getPhoneNumberFromUrl(fieldCodes, fieldCode);
485
+ var _valuesMap$id$value4, _valuesMap7;
486
+ initValues[id] = (_valuesMap$id$value4 = (_valuesMap7 = valuesMap) === null || _valuesMap7 === void 0 || (_valuesMap7 = _valuesMap7[id]) === null || _valuesMap7 === void 0 ? void 0 : _valuesMap7.value) !== null && _valuesMap$id$value4 !== void 0 ? _valuesMap$id$value4 : getPhoneNumberFromUrl(fieldCodes, fieldCode);
465
487
  return;
466
488
  }
467
489
  case QUESTION_KIND.STAR_RATING.value:
468
490
  case QUESTION_KIND.OPINION_SCALE.value:
469
491
  {
470
- var _valuesMap$id$value4, _valuesMap7;
471
- initValues[id] = (_valuesMap$id$value4 = (_valuesMap7 = valuesMap) === null || _valuesMap7 === void 0 || (_valuesMap7 = _valuesMap7[id]) === null || _valuesMap7 === void 0 ? void 0 : _valuesMap7.value) !== null && _valuesMap$id$value4 !== void 0 ? _valuesMap$id$value4 : getStarRatingOrOpinionScaleFromUrl({
492
+ var _valuesMap$id$value5, _valuesMap8;
493
+ initValues[id] = (_valuesMap$id$value5 = (_valuesMap8 = valuesMap) === null || _valuesMap8 === void 0 || (_valuesMap8 = _valuesMap8[id]) === null || _valuesMap8 === void 0 ? void 0 : _valuesMap8.value) !== null && _valuesMap$id$value5 !== void 0 ? _valuesMap$id$value5 : getStarRatingOrOpinionScaleFromUrl({
472
494
  minValue: minValue,
473
495
  maxValue: maxValue,
474
496
  fieldCodes: fieldCodes,
@@ -478,14 +500,14 @@ var generateInitValues = function generateInitValues(_ref9) {
478
500
  }
479
501
  case QUESTION_KIND.NAME.value:
480
502
  {
481
- var _valuesMap$id$value5, _valuesMap8;
482
- initValues[id] = (_valuesMap$id$value5 = (_valuesMap8 = valuesMap) === null || _valuesMap8 === void 0 || (_valuesMap8 = _valuesMap8[id]) === null || _valuesMap8 === void 0 ? void 0 : _valuesMap8.value) !== null && _valuesMap$id$value5 !== void 0 ? _valuesMap$id$value5 : getNameFromUrl(question, fieldCodes);
503
+ var _valuesMap$id$value6, _valuesMap9;
504
+ initValues[id] = (_valuesMap$id$value6 = (_valuesMap9 = valuesMap) === null || _valuesMap9 === void 0 || (_valuesMap9 = _valuesMap9[id]) === null || _valuesMap9 === void 0 ? void 0 : _valuesMap9.value) !== null && _valuesMap$id$value6 !== void 0 ? _valuesMap$id$value6 : getNameFromUrl(question, fieldCodes);
483
505
  return;
484
506
  }
485
507
  case QUESTION_KIND.ADDRESS.value:
486
508
  {
487
- var _valuesMap$id$value6, _valuesMap9;
488
- initValues[id] = (_valuesMap$id$value6 = (_valuesMap9 = valuesMap) === null || _valuesMap9 === void 0 || (_valuesMap9 = _valuesMap9[id]) === null || _valuesMap9 === void 0 ? void 0 : _valuesMap9.value) !== null && _valuesMap$id$value6 !== void 0 ? _valuesMap$id$value6 : fields.reduce(function (values, field) {
509
+ var _valuesMap$id$value7, _valuesMap10;
510
+ initValues[id] = (_valuesMap$id$value7 = (_valuesMap10 = valuesMap) === null || _valuesMap10 === void 0 || (_valuesMap10 = _valuesMap10[id]) === null || _valuesMap10 === void 0 ? void 0 : _valuesMap10.value) !== null && _valuesMap$id$value7 !== void 0 ? _valuesMap$id$value7 : fields.reduce(function (values, field) {
489
511
  values[field.id] = "";
490
512
  return values;
491
513
  }, {});
@@ -493,8 +515,8 @@ var generateInitValues = function generateInitValues(_ref9) {
493
515
  }
494
516
  default:
495
517
  {
496
- var _valuesMap$id$value7, _valuesMap10;
497
- initValues[id] = (_valuesMap$id$value7 = (_valuesMap10 = valuesMap) === null || _valuesMap10 === void 0 || (_valuesMap10 = _valuesMap10[id]) === null || _valuesMap10 === void 0 ? void 0 : _valuesMap10.value) !== null && _valuesMap$id$value7 !== void 0 ? _valuesMap$id$value7 : resolveQueryParamValue(fieldCodes[fieldCode] || "");
518
+ var _valuesMap$id$value8, _valuesMap11;
519
+ initValues[id] = (_valuesMap$id$value8 = (_valuesMap11 = valuesMap) === null || _valuesMap11 === void 0 || (_valuesMap11 = _valuesMap11[id]) === null || _valuesMap11 === void 0 ? void 0 : _valuesMap11.value) !== null && _valuesMap$id$value8 !== void 0 ? _valuesMap$id$value8 : resolveQueryParamValue(fieldCodes[fieldCode] || "");
498
520
  return;
499
521
  }
500
522
  }
@@ -520,6 +542,12 @@ var generateFormResponse = function generateFormResponse(response, questions) {
520
542
  kind: kind
521
543
  });
522
544
  }
545
+ } else if (kind === QUESTION_KIND.SPOT.value) {
546
+ formResponse.push({
547
+ questionId: id,
548
+ value: responseValue,
549
+ kind: kind
550
+ });
523
551
  } else if (kind === QUESTION_KIND.CHECKBOX.value) {
524
552
  responseValue.forEach(function (isChecked, index) {
525
553
  if (!isChecked) return;
@@ -625,12 +653,30 @@ var isEmailFromBlacklistedDomain = function isEmailFromBlacklistedDomain(email,
625
653
  var validateTextField = function validateTextField(_ref) {
626
654
  var kind = _ref.kind,
627
655
  label = _ref.label,
628
- isRequired = _ref.isRequired;
656
+ isRequired = _ref.isRequired,
657
+ remainingSlotsCount = _ref.remainingSlotsCount;
629
658
  var schema = yup.string().typeError(getInvalidTypeError(label, "string"));
630
659
  if (isPhoneNumberField(kind)) {
631
660
  schema = validation(getInvalidFieldError(t("neetoForm.common.phoneNumberValidation")));
632
661
  }
633
- if (isRequired) schema = schema.trim().required(getRequiredFieldError(label));
662
+ var requiredError = kind === QUESTION_KIND.SPOT.value ? t("neetoForm.questions.spot.numberOfSpotsRequired") : getRequiredFieldError(label);
663
+ if (isRequired) schema = schema.trim().required(requiredError);
664
+ if (kind === QUESTION_KIND.SPOT.value) {
665
+ schema = schema.test("integer-spots", t("neetoForm.questions.spot.mustBeInteger"), function (value) {
666
+ return isNotPresent(value) || value === "" || Number.isInteger(Number(value));
667
+ }).test("min-spots", t("neetoForm.error.mustBeOrGreaterThanOrEqualTo", {
668
+ value: 1
669
+ }), function (value) {
670
+ return isNotPresent(value) || value === "" || Number(value) > 0;
671
+ });
672
+ if (typeof remainingSlotsCount === "number" && remainingSlotsCount >= 0) {
673
+ schema = schema.test("max-spots", t("neetoForm.questions.spot.exceedsRemainingSpots", {
674
+ count: remainingSlotsCount
675
+ }), function (value) {
676
+ return isNotPresent(value) || value === "" || Number(value) > 0 && Number(value) <= remainingSlotsCount;
677
+ });
678
+ }
679
+ }
634
680
  return schema.trim();
635
681
  };
636
682
  var validateEmailField = function validateEmailField(_ref2) {
@@ -766,7 +812,7 @@ var validateCaptchaField = function validateCaptchaField(_ref17) {
766
812
  return value === "" ? null : value;
767
813
  }).required(t("neetoForm.error.incompleteCaptcha")) : yup.string().trim().required(t("neetoForm.error.incompleteCaptcha"));
768
814
  };
769
- var fieldKindValidatorMap = (_fieldKindValidatorMa = {}, _defineProperty(_defineProperty(_defineProperty(_defineProperty(_defineProperty(_defineProperty(_defineProperty(_defineProperty(_defineProperty(_defineProperty(_fieldKindValidatorMa, QUESTION_KIND.EMAIL.value, validateEmailField), QUESTION_KIND.NAME.value, validateNameField), QUESTION_KIND.PHONE.value, validateTextField), QUESTION_KIND.TEXT.value, validateTextField), QUESTION_KIND.QUESTION.value, validateTextField), QUESTION_KIND.TEXTAREA.value, validateTextField), QUESTION_KIND.DECIMAL.value, validateTextField), QUESTION_KIND.INTEGER.value, validateTextField), QUESTION_KIND.DROPDOWN.value, validateSingleChoiceField), QUESTION_KIND.RADIO.value, validateSingleChoiceField), _defineProperty(_defineProperty(_defineProperty(_defineProperty(_defineProperty(_defineProperty(_defineProperty(_defineProperty(_defineProperty(_defineProperty(_fieldKindValidatorMa, QUESTION_KIND.CHECKBOX.value, validateMultiChoiceField), QUESTION_KIND.RATING.value, validateRatingField), QUESTION_KIND.TERMS.value, validateTermsField), QUESTION_KIND.DATE.value, validateDateField), QUESTION_KIND.STAR_RATING.value, validateStarRatingField), QUESTION_KIND.OPINION_SCALE.value, validateOpinionScaleField), QUESTION_KIND.ADDITIONAL_GUESTS.value, validateMultiEmailField), QUESTION_KIND.RICH_TEXT.value, validateRichTextField), QUESTION_KIND.CONDITION.value, validateConditionField), QUESTION_KIND.FILE_UPLOAD.value, validateFileUploadField), _defineProperty(_defineProperty(_defineProperty(_fieldKindValidatorMa, QUESTION_KIND.CAPTCHA.value, validateCaptchaField), QUESTION_KIND.SMS_REMINDER.value, validateTextField), QUESTION_KIND.ADDRESS.value, validateAddressField));
815
+ var fieldKindValidatorMap = (_fieldKindValidatorMa = {}, _defineProperty(_defineProperty(_defineProperty(_defineProperty(_defineProperty(_defineProperty(_defineProperty(_defineProperty(_defineProperty(_defineProperty(_fieldKindValidatorMa, QUESTION_KIND.EMAIL.value, validateEmailField), QUESTION_KIND.NAME.value, validateNameField), QUESTION_KIND.PHONE.value, validateTextField), QUESTION_KIND.TEXT.value, validateTextField), QUESTION_KIND.QUESTION.value, validateTextField), QUESTION_KIND.TEXTAREA.value, validateTextField), QUESTION_KIND.DECIMAL.value, validateTextField), QUESTION_KIND.INTEGER.value, validateTextField), QUESTION_KIND.DROPDOWN.value, validateSingleChoiceField), QUESTION_KIND.RADIO.value, validateSingleChoiceField), _defineProperty(_defineProperty(_defineProperty(_defineProperty(_defineProperty(_defineProperty(_defineProperty(_defineProperty(_defineProperty(_defineProperty(_fieldKindValidatorMa, QUESTION_KIND.SPOT.value, validateTextField), QUESTION_KIND.CHECKBOX.value, validateMultiChoiceField), QUESTION_KIND.RATING.value, validateRatingField), QUESTION_KIND.TERMS.value, validateTermsField), QUESTION_KIND.DATE.value, validateDateField), QUESTION_KIND.STAR_RATING.value, validateStarRatingField), QUESTION_KIND.OPINION_SCALE.value, validateOpinionScaleField), QUESTION_KIND.ADDITIONAL_GUESTS.value, validateMultiEmailField), QUESTION_KIND.RICH_TEXT.value, validateRichTextField), QUESTION_KIND.CONDITION.value, validateConditionField), _defineProperty(_defineProperty(_defineProperty(_defineProperty(_fieldKindValidatorMa, QUESTION_KIND.FILE_UPLOAD.value, validateFileUploadField), QUESTION_KIND.CAPTCHA.value, validateCaptchaField), QUESTION_KIND.SMS_REMINDER.value, validateTextField), QUESTION_KIND.ADDRESS.value, validateAddressField));
770
816
  var validateFieldValue = function validateFieldValue(_ref18) {
771
817
  var kind = _ref18.kind,
772
818
  customValidator = _ref18.customValidator,
@@ -2555,7 +2601,10 @@ var TextField = function TextField(_ref) {
2555
2601
  var _otherProps$onChange;
2556
2602
  var question = _ref.question,
2557
2603
  customValidator = _ref.customValidator,
2558
- autoComplete = _ref.autoComplete;
2604
+ autoComplete = _ref.autoComplete,
2605
+ remainingSlotsCount = _ref.remainingSlotsCount;
2606
+ var _useTranslation = useTranslation(),
2607
+ t = _useTranslation.t;
2559
2608
  var name = question.id,
2560
2609
  kind = question.kind,
2561
2610
  isRequired = question.isRequired,
@@ -2574,7 +2623,8 @@ var TextField = function TextField(_ref) {
2574
2623
  kind: kind,
2575
2624
  label: label,
2576
2625
  isRequired: isRequired,
2577
- customValidator: customValidator
2626
+ customValidator: customValidator,
2627
+ remainingSlotsCount: remainingSlotsCount
2578
2628
  })
2579
2629
  }),
2580
2630
  _useField2 = _slicedToArray(_useField, 3),
@@ -2586,23 +2636,39 @@ var TextField = function TextField(_ref) {
2586
2636
  setValue = _useField2$2.setValue,
2587
2637
  setTouched = _useField2$2.setTouched;
2588
2638
  var handleFieldChange = withEventTargetValue(setValue);
2589
- return /*#__PURE__*/jsx(Component, _objectSpread(_objectSpread({}, _objectSpread(_objectSpread({
2590
- type: type
2591
- }, field), {}, {
2592
- autoComplete: autoComplete,
2593
- label: label,
2594
- onKeyDown: onKeyDown
2595
- })), {}, {
2596
- disabled: isReadOnly,
2597
- error: touched ? error : "",
2598
- name: slugify(label),
2599
- placeholder: fieldWithFallback(question, "placeholder"),
2600
- required: isRequired,
2601
- onBlur: function onBlur() {
2602
- return setTouched(true);
2603
- },
2604
- onChange: (_otherProps$onChange = otherProps === null || otherProps === void 0 ? void 0 : otherProps.onChange(handleFieldChange)) !== null && _otherProps$onChange !== void 0 ? _otherProps$onChange : handleFieldChange
2605
- }));
2639
+ return /*#__PURE__*/jsxs("div", {
2640
+ className: "w-full flex flex-col gap-2",
2641
+ children: [/*#__PURE__*/jsx(Component, _objectSpread(_objectSpread({}, _objectSpread(_objectSpread({
2642
+ type: type
2643
+ }, field), {}, {
2644
+ autoComplete: autoComplete,
2645
+ label: label,
2646
+ onKeyDown: onKeyDown
2647
+ }, kind === QUESTION_KIND.SPOT.value && _objectSpread({
2648
+ min: 1
2649
+ }, typeof remainingSlotsCount === "number" && remainingSlotsCount >= 0 && {
2650
+ max: remainingSlotsCount
2651
+ }))), {}, {
2652
+ disabled: isReadOnly,
2653
+ error: touched ? error : "",
2654
+ name: slugify(label),
2655
+ placeholder: fieldWithFallback(question, "placeholder"),
2656
+ required: isRequired,
2657
+ onBlur: function onBlur() {
2658
+ return setTouched(true);
2659
+ },
2660
+ onChange: (_otherProps$onChange = otherProps === null || otherProps === void 0 ? void 0 : otherProps.onChange(handleFieldChange)) !== null && _otherProps$onChange !== void 0 ? _otherProps$onChange : handleFieldChange
2661
+ })), kind === QUESTION_KIND.SPOT.value && typeof remainingSlotsCount === "number" && remainingSlotsCount >= 0 && /*#__PURE__*/jsx("div", {
2662
+ className: "flex justify-end",
2663
+ children: /*#__PURE__*/jsx(Tag, {
2664
+ icon: Info,
2665
+ style: "info",
2666
+ label: t("neetoForm.questions.spot.remainingSlotsCount", {
2667
+ count: remainingSlotsCount
2668
+ })
2669
+ })
2670
+ })]
2671
+ });
2606
2672
  };
2607
2673
 
2608
2674
  var _QUESTION_TO_COMPONEN;
@@ -2611,7 +2677,7 @@ var QUESTION_TO_COMPONENT_MAP = (_QUESTION_TO_COMPONEN = {}, _defineProperty(_de
2611
2677
  return /*#__PURE__*/jsx(EditorContent, {
2612
2678
  content: fieldWithFallback(question, "label", true)
2613
2679
  });
2614
- }), QUESTION_KIND.TERMS.value, TermsField), QUESTION_KIND.DATE.value, DateField), QUESTION_KIND.STAR_RATING.value, StarRatingField), QUESTION_KIND.OPINION_SCALE.value, OpinionScaleField), QUESTION_KIND.ADDITIONAL_GUESTS.value, MultipleEmailInput), QUESTION_KIND.RICH_TEXT.value, RichTextEditor), QUESTION_KIND.CONDITION.value, ConditionField), _defineProperty(_defineProperty(_defineProperty(_defineProperty(_QUESTION_TO_COMPONEN, QUESTION_KIND.FILE_UPLOAD.value, FileUploadField), QUESTION_KIND.CAPTCHA.value, CaptchaField), QUESTION_KIND.SMS_REMINDER.value, PhoneNumberField), QUESTION_KIND.ADDRESS.value, AddressField));
2680
+ }), QUESTION_KIND.TERMS.value, TermsField), QUESTION_KIND.DATE.value, DateField), QUESTION_KIND.STAR_RATING.value, StarRatingField), QUESTION_KIND.OPINION_SCALE.value, OpinionScaleField), QUESTION_KIND.ADDITIONAL_GUESTS.value, MultipleEmailInput), QUESTION_KIND.RICH_TEXT.value, RichTextEditor), QUESTION_KIND.CONDITION.value, ConditionField), _defineProperty(_defineProperty(_defineProperty(_defineProperty(_defineProperty(_QUESTION_TO_COMPONEN, QUESTION_KIND.FILE_UPLOAD.value, FileUploadField), QUESTION_KIND.CAPTCHA.value, CaptchaField), QUESTION_KIND.SMS_REMINDER.value, PhoneNumberField), QUESTION_KIND.SPOT.value, TextField), QUESTION_KIND.ADDRESS.value, AddressField));
2615
2681
  var CAPTCHA_COMPONENT_MAP = _defineProperty(_defineProperty({}, CAPTCHA_TYPES.RECAPTCHA_V2, Recaptcha), CAPTCHA_TYPES.MATH_CAPTCHA, MathCaptcha);
2616
2682
 
2617
2683
  var getFieldComponent = function getFieldComponent(_ref) {
@@ -2649,4 +2715,4 @@ var getVisibleOptions = function getVisibleOptions(options) {
2649
2715
  };
2650
2716
 
2651
2717
  export { FormikWrap as F, generateInitValues as a, buildAutoCompleteAttribute as b, clientI18nInstance as c, getWithExpiry as d, clearEmailVerificationDetails as e, generateFormResponse as f, getFieldComponent as g, clearLocalStorageValues as h, mergeRefs as m, renderButtonsInOrder as r };
2652
- //# sourceMappingURL=utils-C9nDMm4c.js.map
2718
+ //# sourceMappingURL=utils-CI844li1.js.map