@bigbinary/neeto-form-frontend 1.2.45 → 1.2.47

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.
package/README.md CHANGED
@@ -76,6 +76,16 @@ The engine adds setup for form on backend and allows us to attach forms to any m
76
76
  has_one :form, class_name: "::NeetoFormEngine::Form", as: :attachable
77
77
  ```
78
78
 
79
+ ### Customizability
80
+ The engine supports customizing the default behavior of `Questions::UpdateService`. The supported methods/constants can be overridden by defining them in the concern `NeetoFormEngine::Customizable::Questions::Updateable`
81
+
82
+ #### Available methods:
83
+ 1. `create_question!`: This takes 2 arguments: `params` and `question`. The `params` argument contains the question parameters passed from the front-end, and the `question` argument contains the current question. This argument is required if you need translation support.
84
+ 2. `additional_question_params`: If you want to include additional attributes while creating questions, you can specify them using this method. It takes one argument `params` which will be the question parameters passed from the front-end.
85
+
86
+ #### Available constants:
87
+ 1. `EXCLUDED_UPDATE_PARAMS`: If you have included extra parameters other than `kind` for additional use cases that are not valid entity attributes, they need to be specified as `EXCLUDED_UPDATE_PARAMS`.
88
+
79
89
  ## Frontend package
80
90
  The frontend package allows us to create forms across neeto products.
81
91
 
@@ -110,9 +110,6 @@
110
110
  },
111
111
  "changeLanguage": "Change language"
112
112
  },
113
- "labels": {
114
- "additionalGuests": "Additional guests"
115
- },
116
113
  "error": {
117
114
  "invalidField": "Please enter a valid {{label}}.",
118
115
  "invalidFieldCode": "This field code cannot be used.",
package/dist/index.cjs.js CHANGED
@@ -9842,14 +9842,15 @@ var useBuildFormState = function useBuildFormState() {
9842
9842
  };
9843
9843
 
9844
9844
  var ChangeLanguageDropdown = function ChangeLanguageDropdown(_ref) {
9845
- var initialLanguage = _ref.initialLanguage,
9845
+ var _findBy;
9846
+ var currentLanguage = _ref.currentLanguage,
9846
9847
  languages = _ref.languages,
9847
9848
  onChange = _ref.onChange;
9848
9849
  var _useState = React$2.useState(false),
9849
9850
  _useState2 = _slicedToArray$3(_useState, 2),
9850
9851
  isUnsavedChangesAlertOpen = _useState2[0],
9851
9852
  setIsUnsavedChangesAlertOpen = _useState2[1];
9852
- var _useState3 = React$2.useState(initialLanguage),
9853
+ var _useState3 = React$2.useState(currentLanguage),
9853
9854
  _useState4 = _slicedToArray$3(_useState3, 2),
9854
9855
  selectedLanguage = _useState4[0],
9855
9856
  setSelectedLanguage = _useState4[1];
@@ -9865,17 +9866,24 @@ var ChangeLanguageDropdown = function ChangeLanguageDropdown(_ref) {
9865
9866
  setSelectedLanguage(code);
9866
9867
  setIsUnsavedChangesAlertOpen(true);
9867
9868
  };
9869
+ var selectedLanguageName = (_findBy = neetoCist.findBy({
9870
+ code: currentLanguage
9871
+ }, languages)) === null || _findBy === void 0 ? void 0 : _findBy.name;
9868
9872
  return /*#__PURE__*/React__default["default"].createElement(React__default["default"].Fragment, null, /*#__PURE__*/React__default["default"].createElement(neetoui.Tooltip, {
9869
9873
  content: t("neetoForm.questions.changeLanguage")
9870
9874
  }, /*#__PURE__*/React__default["default"].createElement("div", null, /*#__PURE__*/React__default["default"].createElement(neetoui.Dropdown, {
9875
+ buttonProps: {
9876
+ iconPosition: "left"
9877
+ },
9871
9878
  buttonStyle: "text",
9872
9879
  icon: neetoIcons.Globe,
9880
+ label: selectedLanguageName,
9873
9881
  position: "top-start"
9874
9882
  }, /*#__PURE__*/React__default["default"].createElement(neetoui.Dropdown.Menu, null, languages.map(function (_ref2) {
9875
9883
  var code = _ref2.code,
9876
9884
  name = _ref2.name;
9877
9885
  return /*#__PURE__*/React__default["default"].createElement(neetoui.Dropdown.MenuItem.Button, {
9878
- isActive: initialLanguage === code,
9886
+ isActive: currentLanguage === code,
9879
9887
  key: code,
9880
9888
  onClick: function onClick() {
9881
9889
  return languageChangeHandler(code);
@@ -9912,7 +9920,7 @@ var Overview = function Overview(_ref) {
9912
9920
  style: "h4",
9913
9921
  weight: "semibold"
9914
9922
  }, title), availableLanguages.length > 1 && /*#__PURE__*/React__default["default"].createElement(ChangeLanguageDropdown, {
9915
- initialLanguage: selectedLanguage,
9923
+ currentLanguage: selectedLanguage,
9916
9924
  languages: availableLanguages,
9917
9925
  onChange: onLanguageChange
9918
9926
  })), description);
@@ -12047,7 +12055,8 @@ var BuildForm = function BuildForm(_ref) {
12047
12055
  className: "flex h-full w-full items-center justify-center py-6"
12048
12056
  }, /*#__PURE__*/React__default["default"].createElement(PageLoader__default["default"], null));
12049
12057
  }
12050
- var handleSubmit = function handleSubmit(payload) {
12058
+ var handleSubmit = function handleSubmit(payload, _ref2) {
12059
+ var setSubmitting = _ref2.setSubmitting;
12051
12060
  updateQuestions({
12052
12061
  id: id,
12053
12062
  values: _objectSpread$e({
@@ -12055,7 +12064,10 @@ var BuildForm = function BuildForm(_ref) {
12055
12064
  neetoFormQuestion: payload
12056
12065
  }, buildRequestArgs)
12057
12066
  }, {
12058
- onSuccess: refetch
12067
+ onSuccess: refetch,
12068
+ onSettled: function onSettled() {
12069
+ return setSubmitting(false);
12070
+ }
12059
12071
  });
12060
12072
  };
12061
12073
  var onValueChange = function onValueChange(questions) {
@@ -12068,8 +12080,8 @@ var BuildForm = function BuildForm(_ref) {
12068
12080
  var isDeletable = isQuestionDeletable !== null && isQuestionDeletable !== void 0 ? isQuestionDeletable : function (question) {
12069
12081
  return !nonRemovableFields.includes(question.kind);
12070
12082
  };
12071
- var isRequiredField = isFieldRequired !== null && isFieldRequired !== void 0 ? isFieldRequired : function (_ref2) {
12072
- var kind = _ref2.kind;
12083
+ var isRequiredField = isFieldRequired !== null && isFieldRequired !== void 0 ? isFieldRequired : function (_ref3) {
12084
+ var kind = _ref3.kind;
12073
12085
  return requiredFields.includes(kind);
12074
12086
  };
12075
12087
  var isDisabledFieldLabel = isFieldLabelDisabled !== null && isFieldLabelDisabled !== void 0 ? isFieldLabelDisabled : function () {
@@ -12087,9 +12099,9 @@ var BuildForm = function BuildForm(_ref) {
12087
12099
  },
12088
12100
  validationSchema: formValidationSchema,
12089
12101
  onSubmit: handleSubmit
12090
- }, function (_ref3) {
12091
- var errors = _ref3.errors,
12092
- setFieldError = _ref3.setFieldError;
12102
+ }, function (_ref4) {
12103
+ var errors = _ref4.errors,
12104
+ setFieldError = _ref4.setFieldError;
12093
12105
  return /*#__PURE__*/React__default["default"].createElement(Form, _extends$8({}, _objectSpread$e(_objectSpread$e({}, formDomProps), {}, {
12094
12106
  availableLanguages: availableLanguages,
12095
12107
  cancelButtonProps: cancelButtonProps,
@@ -16087,7 +16099,7 @@ var getNumberFromUrl = function getNumberFromUrl(_ref6) {
16087
16099
  var parsedValue = kind === QUESTION_KIND.INTEGER.value ? parseInt(fieldCodeValue) : parseFloat(fieldCodeValue);
16088
16100
  return parsedValue || "";
16089
16101
  };
16090
- var getLabel$1 = function getLabel(label, isRequired) {
16102
+ var getLabel = function getLabel(label, isRequired) {
16091
16103
  return isRequired ? "".concat(label, "*") : label;
16092
16104
  };
16093
16105
  var generateInitValues = function generateInitValues(_ref7) {
@@ -16353,7 +16365,7 @@ var DateField = function DateField(_ref) {
16353
16365
  className: "neeto-form-engine-input__label-wrapper"
16354
16366
  }, label && /*#__PURE__*/React__default["default"].createElement("label", {
16355
16367
  className: "neeto-form-engine-label"
16356
- }, getLabel$1(label, isRequired))), /*#__PURE__*/React__default["default"].createElement("div", {
16368
+ }, getLabel(label, isRequired))), /*#__PURE__*/React__default["default"].createElement("div", {
16357
16369
  className: "neeto-form-engine-date-picker"
16358
16370
  }, /*#__PURE__*/React__default["default"].createElement(formik.Field, {
16359
16371
  name: name || nodeId,
@@ -26526,7 +26538,7 @@ var OptionsField = function OptionsField(_ref) {
26526
26538
  isRequired: isRequired,
26527
26539
  name: name,
26528
26540
  error: getError(meta),
26529
- label: getLabel$1(label, isRequired),
26541
+ label: getLabel(label, isRequired),
26530
26542
  options: transformedOptions,
26531
26543
  type: kind,
26532
26544
  value: isDropdown ? neetoCist.findBy({
@@ -26649,7 +26661,7 @@ var RatingField = function RatingField(_ref) {
26649
26661
  field = _ref2.field;
26650
26662
  return /*#__PURE__*/React__default["default"].createElement(Rating$1, _extends$8({}, field, {
26651
26663
  error: meta.touched ? meta.error : "",
26652
- label: getLabel$1(label, isRequired),
26664
+ label: getLabel(label, isRequired),
26653
26665
  averageRatingLabel: fieldWithFallback(question, "averageRatingLabel") || RATING_VALUES.AVERAGE.label,
26654
26666
  highestRatingLabel: fieldWithFallback(question, "highestRatingLabel") || RATING_VALUES.GOOD.label,
26655
26667
  lowestRatingLabel: fieldWithFallback(question, "lowestRatingLabel") || RATING_VALUES.BAD.label
@@ -26677,7 +26689,7 @@ var RichTextEditor = function RichTextEditor(_ref) {
26677
26689
  className: "neeto-form-engine-input__label-wrapper"
26678
26690
  }, label && /*#__PURE__*/React__default["default"].createElement("label", {
26679
26691
  className: "neeto-form-engine-label"
26680
- }, getLabel$1(label, isRequired))), /*#__PURE__*/React__default["default"].createElement(formik.FastField, _extends$8({
26692
+ }, getLabel(label, isRequired))), /*#__PURE__*/React__default["default"].createElement(formik.FastField, _extends$8({
26681
26693
  debouncedPlaceholder: debouncedPlaceholder,
26682
26694
  error: errors[name],
26683
26695
  name: name || nodeId,
@@ -26802,7 +26814,7 @@ var StarRatingField = function StarRatingField(_ref) {
26802
26814
  shape: shape,
26803
26815
  count: sanitizedCount,
26804
26816
  error: meta.touched ? meta.error : "",
26805
- label: getLabel$1(label, isRequired)
26817
+ label: getLabel(label, isRequired)
26806
26818
  }, field));
26807
26819
  });
26808
26820
  };
@@ -29909,17 +29921,9 @@ var FileUpload = function FileUpload(_ref) {
29909
29921
  }));
29910
29922
  };
29911
29923
 
29912
- var getLabel = function getLabel(_ref) {
29913
- var label = _ref.label,
29924
+ var getValue = function getValue(_ref) {
29925
+ var value = _ref.value,
29914
29926
  kind = _ref.kind;
29915
- if (kind === QUESTION_KIND.ADDITIONAL_GUESTS.value) {
29916
- return i18next.t("neetoForm.labels.additionalGuests");
29917
- }
29918
- return label;
29919
- };
29920
- var getValue = function getValue(_ref2) {
29921
- var value = _ref2.value,
29922
- kind = _ref2.kind;
29923
29927
  if (ramda.isEmpty(value)) return /*#__PURE__*/React__default["default"].createElement("i", null, i18next.t("neetoForm.common.unanswered"));
29924
29928
  if (kind === QUESTION_KIND.DATE.value) {
29925
29929
  return value && utils.dateFormat.date(value);
@@ -29938,17 +29942,17 @@ var getEditorContent = function getEditorContent(value) {
29938
29942
  }
29939
29943
  return value;
29940
29944
  };
29941
- var Submission = function Submission(_ref3) {
29942
- var _ref3$formId = _ref3.formId,
29943
- formId = _ref3$formId === void 0 ? "" : _ref3$formId,
29944
- _ref3$submissionId = _ref3.submissionId,
29945
- submissionId = _ref3$submissionId === void 0 ? "" : _ref3$submissionId,
29946
- _ref3$className = _ref3.className,
29947
- className = _ref3$className === void 0 ? "" : _ref3$className,
29948
- _ref3$questionLabelPr = _ref3.questionLabelProps,
29949
- questionLabelProps = _ref3$questionLabelPr === void 0 ? {} : _ref3$questionLabelPr,
29950
- _ref3$answerProps = _ref3.answerProps,
29951
- answerProps = _ref3$answerProps === void 0 ? {} : _ref3$answerProps;
29945
+ var Submission = function Submission(_ref2) {
29946
+ var _ref2$formId = _ref2.formId,
29947
+ formId = _ref2$formId === void 0 ? "" : _ref2$formId,
29948
+ _ref2$submissionId = _ref2.submissionId,
29949
+ submissionId = _ref2$submissionId === void 0 ? "" : _ref2$submissionId,
29950
+ _ref2$className = _ref2.className,
29951
+ className = _ref2$className === void 0 ? "" : _ref2$className,
29952
+ _ref2$questionLabelPr = _ref2.questionLabelProps,
29953
+ questionLabelProps = _ref2$questionLabelPr === void 0 ? {} : _ref2$questionLabelPr,
29954
+ _ref2$answerProps = _ref2.answerProps,
29955
+ answerProps = _ref2$answerProps === void 0 ? {} : _ref2$answerProps;
29952
29956
  var _useSubmission = useSubmission({
29953
29957
  formId: formId,
29954
29958
  submissionId: submissionId,
@@ -29996,20 +30000,17 @@ var Submission = function Submission(_ref3) {
29996
30000
  }
29997
30001
  return /*#__PURE__*/React__default["default"].createElement("div", {
29998
30002
  className: classnames__default["default"]("mx-auto flex h-full w-full flex-col items-start", _defineProperty$6({}, className, className))
29999
- }, responses.map(function (_ref4) {
30000
- var kind = _ref4.kind,
30001
- label = _ref4.label,
30002
- value = _ref4.value;
30003
+ }, responses.map(function (_ref3) {
30004
+ var kind = _ref3.kind,
30005
+ label = _ref3.label,
30006
+ value = _ref3.value;
30003
30007
  return /*#__PURE__*/React__default["default"].createElement("div", {
30004
30008
  className: "mb-4",
30005
30009
  key: label
30006
30010
  }, /*#__PURE__*/React__default["default"].createElement(neetoui.Typography, _extends$8({
30007
30011
  style: "h5",
30008
30012
  weight: "light"
30009
- }, questionLabelProps), getLabel({
30010
- label: label,
30011
- kind: kind
30012
- })), renderSubmittedValue(kind, value));
30013
+ }, questionLabelProps), label), renderSubmittedValue(kind, value));
30013
30014
  }));
30014
30015
  };
30015
30016