@bigbinary/neeto-form-frontend 4.2.11 → 4.3.0

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 (51) hide show
  1. package/app/javascript/src/translations/en.json +12 -1
  2. package/dist/BuildForm.js +73 -6
  3. package/dist/BuildForm.js.map +1 -1
  4. package/dist/ExternalForm.js +4 -4
  5. package/dist/Submission.js +1 -1
  6. package/dist/UrlBuilder.js +5 -4
  7. package/dist/UrlBuilder.js.map +1 -1
  8. package/dist/{buildForm-DcE5kFvR.js → buildForm-DA1LRDwr.js} +2 -2
  9. package/dist/{buildForm-DcE5kFvR.js.map → buildForm-DA1LRDwr.js.map} +1 -1
  10. package/dist/{buildForm-CooylMLL.js → buildForm-vzjjarhs.js} +2 -2
  11. package/dist/{buildForm-CooylMLL.js.map → buildForm-vzjjarhs.js.map} +1 -1
  12. package/dist/cjs/BuildForm.js +73 -6
  13. package/dist/cjs/BuildForm.js.map +1 -1
  14. package/dist/cjs/ExternalForm.js +4 -4
  15. package/dist/cjs/Submission.js +1 -1
  16. package/dist/cjs/UrlBuilder.js +5 -4
  17. package/dist/cjs/UrlBuilder.js.map +1 -1
  18. package/dist/cjs/hooks.js +4 -4
  19. package/dist/cjs/index.js +6 -6
  20. package/dist/{constants-BjWWA3Oq.js → constants-BEKfDeAd.js} +53 -25
  21. package/dist/constants-BEKfDeAd.js.map +1 -0
  22. package/dist/{constants-51SEJjzI.js → constants-B_OEW8Yc.js} +2 -1
  23. package/dist/constants-B_OEW8Yc.js.map +1 -0
  24. package/dist/{constants-C9wKMfgo.js → constants-DcN-Mvx7.js} +2 -1
  25. package/dist/constants-DcN-Mvx7.js.map +1 -0
  26. package/dist/{constants-QPLZ_r-D.js → constants-Dcy0vCkf.js} +51 -26
  27. package/dist/constants-Dcy0vCkf.js.map +1 -0
  28. package/dist/hooks.js +4 -4
  29. package/dist/{index-D4URTv1p.js → index-BQf-XQOv.js} +2 -2
  30. package/dist/{index-D4URTv1p.js.map → index-BQf-XQOv.js.map} +1 -1
  31. package/dist/{index-DnHrq-hl.js → index-DGvqFcqA.js} +2 -2
  32. package/dist/{index-DnHrq-hl.js.map → index-DGvqFcqA.js.map} +1 -1
  33. package/dist/index.js +6 -6
  34. package/dist/main.css +1 -1
  35. package/dist/main.css.map +1 -1
  36. package/dist/{useFormSubmission-BGNEnxvm.js → useFormSubmission-C7RL4Doz.js} +2 -2
  37. package/dist/{useFormSubmission-BGNEnxvm.js.map → useFormSubmission-C7RL4Doz.js.map} +1 -1
  38. package/dist/{useFormSubmission-BUPnuOSG.js → useFormSubmission-CzjIcsVB.js} +2 -2
  39. package/dist/{useFormSubmission-BUPnuOSG.js.map → useFormSubmission-CzjIcsVB.js.map} +1 -1
  40. package/dist/{utils-Dn-q4QBc.js → utils-BgH6USlj.js} +148 -33
  41. package/dist/utils-BgH6USlj.js.map +1 -0
  42. package/dist/{utils-Ch7Ggngj.js → utils-CjySOwOO.js} +148 -33
  43. package/dist/utils-CjySOwOO.js.map +1 -0
  44. package/package.json +18 -19
  45. package/types.d.ts +3 -0
  46. package/dist/constants-51SEJjzI.js.map +0 -1
  47. package/dist/constants-BjWWA3Oq.js.map +0 -1
  48. package/dist/constants-C9wKMfgo.js.map +0 -1
  49. package/dist/constants-QPLZ_r-D.js.map +0 -1
  50. package/dist/utils-Ch7Ggngj.js.map +0 -1
  51. package/dist/utils-Dn-q4QBc.js.map +0 -1
@@ -52,6 +52,7 @@
52
52
  "clonedElementLabel": "Copy of {{label, anyCase}}",
53
53
  "option": "Option",
54
54
  "rating": "Rating",
55
+ "selection": "Selection",
55
56
  "captchaType": "Captcha type",
56
57
  "reCaptchaV2": "reCAPTCHA v2",
57
58
  "mathCaptcha": "Math captcha",
@@ -82,7 +83,8 @@
82
83
  "dif": "Decimal",
83
84
  "fileUpload": "File upload",
84
85
  "captcha": "Captcha",
85
- "smsReminder": "SMS reminder"
86
+ "smsReminder": "SMS reminder",
87
+ "opinionScale": "Opinion scale"
86
88
  },
87
89
  "toasts": {
88
90
  "formSubmitted": "Form has been submitted successfully!"
@@ -148,6 +150,13 @@
148
150
  }
149
151
  }
150
152
  },
153
+ "opinionScale": {
154
+ "showLabels": "Show labels",
155
+ "leftLabel": "Left label",
156
+ "rightLabel": "Right label",
157
+ "worst": "Worst",
158
+ "best": "Best"
159
+ },
151
160
  "changeLanguage": "Change language"
152
161
  },
153
162
  "error": {
@@ -162,6 +171,8 @@
162
171
  "minOneEntity": "At least one {{entity}} is required",
163
172
  "emailFromRestrictedDomain": "Emails with domain {{domain}} aren't accepted.",
164
173
  "mustBeASixDigitNumber": "{{entity}} must be a 6 digit number",
174
+ "mustBeOrGreaterThanOrEqualTo": "Must be greater than or equal to {{value}}",
175
+ "mustBeOrLessThanOrEqualTo": "Must be less than or equal to {{value}}",
165
176
  "emailNotVerified": "Email verification is required"
166
177
  },
167
178
  "fileTypes": {
package/dist/BuildForm.js CHANGED
@@ -3,14 +3,14 @@ import classnames from 'classnames';
3
3
  import { isPresent, truncate, findBy, isNotPresent, slugify, existsBy, hyphenate, noop, nullSafe, removeBy } from '@bigbinary/neeto-cist';
4
4
  import Spinner from '@bigbinary/neetoui/Spinner';
5
5
  import { equals, path, curry, assoc, prop, dissoc, when, includes, isEmpty, reject, keys, pick, omit, evolve, map, mergeLeft, isNil, pipe, filter, isNotNil, uniq, join, pluck, test, paths, difference, split, last, either, T, F } from 'ramda';
6
- import { k as useDeleteQuestion, Q as QUESTION_TYPES, a as useForm, l as useCreateQuestion, m as useUpdateQuestion, C as CAPTCHA_TYPES, n as useReorderQuestions, i as QUERY_KEYS } from './constants-51SEJjzI.js';
7
- import { f as buildDisplayLabel, h as INDEPENDENT_LABELS_MAP, i as QUESTION_ACTIONS, j as isElementOverflowing, k as Drag, l as SELECTABLE_KINDS, m as isAutoGeneratedQuestion, n as isRichTextQuestion, N as NON_BASIC_LATIN_CHARACTERS_REGEX, o as RESERVED_FIELD_CODES, d as LABEL_FIELDS, p as isDefaultLanguage, q as buildAddQuestionButtonProps, v as validateEditorContent, F as FIELD_CODES_REJECT_CHARS_REGEX, r as isImmutableField, Q as QUESTIONS_WITHOUT_FIELD_CODE, s as NON_HIDEABLE_FIELDS, t as NON_READ_ONLY_FIELDS, u as RICH_TEXT_QUESTIONS, w as FILE_TYPES_MAP, x as FILE_GROUPS, D as DEFAULT_CHOICE_QUESTION_ATTRIBUTES, M as MINIMUM_OPTIONS, y as IMAGE_HEIGHT_SLIDER_DEFAULTS, z as RATING_OPTIONS, A as STAR_RATING_MIN_VALUE_OPTIONS, B as STAR_RATING_MAX_VALUE_OPTIONS, G as STAR_RATING_ICONS_MAP, H as buildDisabledAddButtonHelpPopoverProps, J as buildReorderPayload, K as isMandatoryField, O as QUESTION_KINDS, a as QUESTION_KIND, T as getActiveQuestionKindDetails, U as DEFAULT_AVAILABLE_LANGUAGES, V as DEFAULT_ADVANCED_FEATURES, W as QUESTIONS_INITIAL_VALUE } from './constants-QPLZ_r-D.js';
6
+ import { k as useDeleteQuestion, Q as QUESTION_TYPES, a as useForm, l as useCreateQuestion, m as useUpdateQuestion, C as CAPTCHA_TYPES, n as useReorderQuestions, i as QUERY_KEYS } from './constants-B_OEW8Yc.js';
7
+ import { f as buildDisplayLabel, h as INDEPENDENT_LABELS_MAP, i as QUESTION_ACTIONS, j as isElementOverflowing, k as Drag, l as SELECTABLE_KINDS, m as isAutoGeneratedQuestion, n as isRichTextQuestion, N as NON_BASIC_LATIN_CHARACTERS_REGEX, o as RESERVED_FIELD_CODES, d as LABEL_FIELDS, p as isDefaultLanguage, q as buildAddQuestionButtonProps, v as validateEditorContent, F as FIELD_CODES_REJECT_CHARS_REGEX, r as isImmutableField, Q as QUESTIONS_WITHOUT_FIELD_CODE, s as NON_HIDEABLE_FIELDS, t as NON_READ_ONLY_FIELDS, u as RICH_TEXT_QUESTIONS, O as OPINION_LABEL_MAX_LENGTH, w as FILE_TYPES_MAP, x as FILE_GROUPS, y as OPINION_SCALE_MIN_VALUE_OPTIONS, z as OPINION_SCALE_MAX_VALUE_OPTIONS, D as DEFAULT_CHOICE_QUESTION_ATTRIBUTES, M as MINIMUM_OPTIONS, A as IMAGE_HEIGHT_SLIDER_DEFAULTS, B as RATING_OPTIONS, G as STAR_RATING_MIN_VALUE_OPTIONS, H as STAR_RATING_MAX_VALUE_OPTIONS, J as STAR_RATING_ICONS_MAP, K as buildDisabledAddButtonHelpPopoverProps, T as buildReorderPayload, U as isMandatoryField, V as QUESTION_KINDS, a as QUESTION_KIND, W as getActiveQuestionKindDetails, X as DEFAULT_AVAILABLE_LANGUAGES, Y as DEFAULT_ADVANCED_FEATURES, Z as QUESTIONS_INITIAL_VALUE } from './constants-Dcy0vCkf.js';
8
8
  import _slicedToArray from '@babel/runtime/helpers/slicedToArray';
9
9
  import { useState, useRef, useEffect, createElement } from 'react';
10
10
  import { Droppable, Draggable, DragDropContext } from '@hello-pangea/dnd';
11
11
  import { withT, isMetaKeyPressed, useStateWithDependency, useFuncDebounce, useOnClickOutside } from '@bigbinary/neeto-commons-frontend/react-utils';
12
12
  import { showThumbsUpToastr, withEventTargetValue, hyphenize } from '@bigbinary/neeto-commons-frontend/utils';
13
- import { a as useBuildFormStore } from './buildForm-DcE5kFvR.js';
13
+ import { a as useBuildFormStore } from './buildForm-DA1LRDwr.js';
14
14
  import { shallow } from 'zustand/shallow';
15
15
  import Alert from '@bigbinary/neetoui/Alert';
16
16
  import { useTranslation, Trans } from 'react-i18next';
@@ -21,7 +21,7 @@ import MoreDropdown from '@bigbinary/neeto-molecules/MoreDropdown';
21
21
  import Dropdown from '@bigbinary/neetoui/Dropdown';
22
22
  import Tooltip from '@bigbinary/neetoui/Tooltip';
23
23
  import _defineProperty from '@babel/runtime/helpers/defineProperty';
24
- import { i as isFunction, f as fieldWithFallback, c as isNameQuestion } from './index-DnHrq-hl.js';
24
+ import { i as isFunction, f as fieldWithFallback, c as isNameQuestion } from './index-DGvqFcqA.js';
25
25
  import _toConsumableArray from '@babel/runtime/helpers/toConsumableArray';
26
26
  import { t } from 'i18next';
27
27
  import { v4 } from 'uuid';
@@ -600,12 +600,13 @@ var NAME = QUESTION_TYPES.NAME,
600
600
  INTEGER = QUESTION_TYPES.INTEGER,
601
601
  DECIMAL = QUESTION_TYPES.DECIMAL,
602
602
  STAR_RATING$1 = QUESTION_TYPES.STAR_RATING,
603
+ OPINION_SCALE$1 = QUESTION_TYPES.OPINION_SCALE,
603
604
  RATING$1 = QUESTION_TYPES.RATING,
604
605
  DATE = QUESTION_TYPES.DATE,
605
606
  FILE_UPLOAD$1 = QUESTION_TYPES.FILE_UPLOAD,
606
607
  CAPTCHA$1 = QUESTION_TYPES.CAPTCHA,
607
608
  SMS_REMINDER = QUESTION_TYPES.SMS_REMINDER;
608
- var QUESTIONS_WITH_ADDITIONAL_DATA = [].concat(_toConsumableArray(SELECTABLE_KINDS), [STAR_RATING$1, RATING$1, FILE_UPLOAD$1, CAPTCHA$1, EMAIL$1]);
609
+ var QUESTIONS_WITH_ADDITIONAL_DATA = [].concat(_toConsumableArray(SELECTABLE_KINDS), [STAR_RATING$1, OPINION_SCALE$1, RATING$1, FILE_UPLOAD$1, CAPTCHA$1, EMAIL$1]);
609
610
  var QUESTIONS_WITH_PLACEHOLDERS = [NAME, PHONE, EMAIL$1, ADDITIONAL_GUESTS, TEXT, TEXTAREA, RICH_TEXT, INTEGER, DECIMAL, DATE, SMS_REMINDER];
610
611
  var DEFAULT_PLACEHOLDERS = {
611
612
  CHECKBOX: t("neetoForm.questions.common.questionFields.field.labelExample", {
@@ -1153,6 +1154,15 @@ var buildNameLabelValidationSchema = function buildNameLabelValidationSchema(que
1153
1154
  var isRequired = isFullName ? !question.isSplitMode : question.isSplitMode;
1154
1155
  return isNameQuestion(question.kind) && isRequired ? requiredLabelValidation(schema, t("neetoForm.questions.common.questionFields.field.question")) : schema.notRequired();
1155
1156
  };
1157
+ var buildOpinionScaleLabelValidationSchema = function buildOpinionScaleLabelValidationSchema(label) {
1158
+ return stringSchema.when("hasOpinionLabels", {
1159
+ is: true,
1160
+ then: requiredLabelValidation(stringSchema, label).max(OPINION_LABEL_MAX_LENGTH, t("neetoForm.error.mustBeOrLessThanOrEqualTo", {
1161
+ value: OPINION_LABEL_MAX_LENGTH
1162
+ })),
1163
+ otherwise: stringSchema.notRequired()
1164
+ });
1165
+ };
1156
1166
  var stringSchema = yup.string();
1157
1167
  var formValidationSchema = function formValidationSchema(question) {
1158
1168
  var isFieldCodeEnabled = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;
@@ -1177,7 +1187,9 @@ var formValidationSchema = function formValidationSchema(question) {
1177
1187
  }),
1178
1188
  highestRatingLabel: yup.string().nullable(),
1179
1189
  averageRatingLabel: yup.string().nullable(),
1180
- lowestRatingLabel: yup.string().nullable()
1190
+ lowestRatingLabel: yup.string().nullable(),
1191
+ leftOpinionLabel: buildOpinionScaleLabelValidationSchema(t("neetoForm.questions.opinionScale.leftLabel")),
1192
+ rightOpinionLabel: buildOpinionScaleLabelValidationSchema(t("neetoForm.questions.opinionScale.rightLabel"))
1181
1193
  });
1182
1194
  };
1183
1195
 
@@ -1857,6 +1869,58 @@ var FileUpload = function FileUpload() {
1857
1869
  });
1858
1870
  };
1859
1871
 
1872
+ var OpinionScale = function OpinionScale() {
1873
+ var _useTranslation = useTranslation(),
1874
+ t = _useTranslation.t;
1875
+ var _useFormikContext = useFormikContext(),
1876
+ setFieldValue = _useFormikContext.setFieldValue,
1877
+ _useFormikContext$val = _useFormikContext.values.hasOpinionLabels,
1878
+ hasOpinionLabels = _useFormikContext$val === void 0 ? false : _useFormikContext$val;
1879
+ return /*#__PURE__*/jsxs(Fragment, {
1880
+ children: [/*#__PURE__*/jsxs("div", {
1881
+ className: "flex space-x-4",
1882
+ children: [/*#__PURE__*/jsx(Select, {
1883
+ className: "w-1/2",
1884
+ "data-testid": "neeto-form-engine-opinion-scale-min-value",
1885
+ label: t("neetoForm.common.start"),
1886
+ name: "minValue",
1887
+ options: OPINION_SCALE_MIN_VALUE_OPTIONS,
1888
+ onChange: function onChange(option) {
1889
+ return setFieldValue("minValue", option === null || option === void 0 ? void 0 : option.value);
1890
+ }
1891
+ }), /*#__PURE__*/jsx(Select, {
1892
+ className: "w-1/2",
1893
+ "data-testid": "neeto-form-engine-opinion-scale-max-value",
1894
+ label: t("neetoForm.common.end"),
1895
+ name: "maxValue",
1896
+ options: OPINION_SCALE_MAX_VALUE_OPTIONS,
1897
+ onChange: function onChange(option) {
1898
+ return setFieldValue("maxValue", option === null || option === void 0 ? void 0 : option.value);
1899
+ }
1900
+ })]
1901
+ }), /*#__PURE__*/jsx(Switch, {
1902
+ "data-testid": "neeto-form-engine-opinion-scale-show-labels-switch",
1903
+ label: t("neetoForm.questions.opinionScale.showLabels"),
1904
+ name: "hasOpinionLabels"
1905
+ }), hasOpinionLabels && /*#__PURE__*/jsxs("div", {
1906
+ className: "flex space-x-4",
1907
+ children: [/*#__PURE__*/jsx(Input, {
1908
+ className: "w-1/2",
1909
+ "data-testid": "neeto-form-engine-opinion-scale-left-label",
1910
+ label: t("neetoForm.questions.opinionScale.leftLabel"),
1911
+ maxLength: OPINION_LABEL_MAX_LENGTH,
1912
+ name: "leftOpinionLabel"
1913
+ }), /*#__PURE__*/jsx(Input, {
1914
+ className: "w-1/2",
1915
+ "data-testid": "neeto-form-engine-opinion-scale-right-label",
1916
+ label: t("neetoForm.questions.opinionScale.rightLabel"),
1917
+ maxLength: OPINION_LABEL_MAX_LENGTH,
1918
+ name: "rightOpinionLabel"
1919
+ })]
1920
+ })]
1921
+ });
1922
+ };
1923
+
1860
1924
  function ownKeys$2(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
1861
1925
  function _objectSpread$2(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys$2(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys$2(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
1862
1926
  var Options = function Options(_ref) {
@@ -2063,6 +2127,7 @@ var CHECKBOX = QUESTION_TYPES.CHECKBOX,
2063
2127
  RADIO = QUESTION_TYPES.RADIO,
2064
2128
  DROPDOWN = QUESTION_TYPES.DROPDOWN,
2065
2129
  STAR_RATING = QUESTION_TYPES.STAR_RATING,
2130
+ OPINION_SCALE = QUESTION_TYPES.OPINION_SCALE,
2066
2131
  RATING = QUESTION_TYPES.RATING,
2067
2132
  FILE_UPLOAD = QUESTION_TYPES.FILE_UPLOAD,
2068
2133
  CAPTCHA = QUESTION_TYPES.CAPTCHA,
@@ -2087,6 +2152,8 @@ var renderAdditionalData = function renderAdditionalData(_ref2) {
2087
2152
  return /*#__PURE__*/jsx(Rating, {});
2088
2153
  case STAR_RATING:
2089
2154
  return /*#__PURE__*/jsx(StarRating, {});
2155
+ case OPINION_SCALE:
2156
+ return /*#__PURE__*/jsx(OpinionScale, {});
2090
2157
  case FILE_UPLOAD:
2091
2158
  return /*#__PURE__*/jsx(FileUpload, {});
2092
2159
  case CAPTCHA: