@bigbinary/neeto-form-frontend 1.2.46 → 1.2.48

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
 
package/dist/index.cjs.js CHANGED
@@ -715,19 +715,22 @@ var useDeleteForm = function useDeleteForm(options) {
715
715
  var id = _ref6.id;
716
716
  return neetoFormApi.destroyForm(id);
717
717
  }, _objectSpread$j(_objectSpread$j({}, options), {}, {
718
- keysToInvalidate: function keysToInvalidate(_, _ref7) {
718
+ keysToInvalidate: [[QUERY_KEYS.FORMS], function (_, _ref7) {
719
719
  var id = _ref7.id;
720
- return [QUERY_KEYS.FORMS, [QUERY_KEYS.QUESTIONS, id], [QUERY_KEYS.QUESTIONS, "preview/".concat(id)]];
721
- },
720
+ return [QUERY_KEYS.QUESTIONS, id];
721
+ }, function (_, _ref8) {
722
+ var id = _ref8.id;
723
+ return [QUERY_KEYS.QUESTIONS, "preview/".concat(id)];
724
+ }],
722
725
  onSuccess: function onSuccess() {
723
726
  options.onSuccess && options.onSuccess.apply(options, arguments);
724
727
  }
725
728
  }));
726
729
  };
727
- var useSubmission = function useSubmission(_ref9) {
728
- var formId = _ref9.formId,
729
- submissionId = _ref9.submissionId,
730
- options = _objectWithoutProperties$1(_ref9, _excluded4$1);
730
+ var useSubmission = function useSubmission(_ref10) {
731
+ var formId = _ref10.formId,
732
+ submissionId = _ref10.submissionId,
733
+ options = _objectWithoutProperties$1(_ref10, _excluded4$1);
731
734
  return reactQuery.useQuery([QUERY_KEYS.SUBMISSION, formId, submissionId], function () {
732
735
  return neetoFormApi.getPublicSubmission(formId, submissionId);
733
736
  }, _objectSpread$j(_objectSpread$j({}, options), {}, {
@@ -736,9 +739,9 @@ var useSubmission = function useSubmission(_ref9) {
736
739
  };
737
740
  var useCreateSubmission = function useCreateSubmission(options) {
738
741
  var queryClient = reactQuery.useQueryClient();
739
- return reactQuery.useMutation(function (_ref10) {
740
- var formId = _ref10.formId,
741
- values = _ref10.values;
742
+ return reactQuery.useMutation(function (_ref11) {
743
+ var formId = _ref11.formId,
744
+ values = _ref11.values;
742
745
  return neetoFormApi.submitPublicForm(formId, values);
743
746
  }, _objectSpread$j(_objectSpread$j({}, options), {}, {
744
747
  onSuccess: function onSuccess() {
@@ -757,9 +760,9 @@ var useCreateSubmission = function useCreateSubmission(options) {
757
760
  };
758
761
  var useUpdateSubmission = function useUpdateSubmission(options) {
759
762
  var queryClient = reactQuery.useQueryClient();
760
- return reactQuery.useMutation(function (_ref11) {
761
- var formId = _ref11.formId,
762
- values = _ref11.values;
763
+ return reactQuery.useMutation(function (_ref12) {
764
+ var formId = _ref12.formId,
765
+ values = _ref12.values;
763
766
  return neetoFormApi.updatePublicSubmission(formId, values);
764
767
  }, _objectSpread$j(_objectSpread$j({}, options), {}, {
765
768
  onSuccess: function onSuccess() {
@@ -782,6 +785,11 @@ var DEFAULT_AVAILABLE_LANGUAGES = [{
782
785
  name: "English"
783
786
  }];
784
787
  var QUESTIONS_WITHOUT_FIELD_CODE = ["paragraph", "termsandcondition", "condition", "file_upload"];
788
+ var QUESTIONS_INITIAL_VALUE = {
789
+ enabled: false,
790
+ questions: [],
791
+ title: ""
792
+ };
785
793
  var RESERVED_FIELD_CODES = ["month", "date", "time"];
786
794
 
787
795
  function _arrayWithHoles$3(arr) {
@@ -9830,7 +9838,9 @@ var useBuildFormStore = zustand.create(reactUtils.withImmutableActions(function
9830
9838
  submitForm: neetoCist.noop,
9831
9839
  resetForm: neetoCist.noop,
9832
9840
  selectedLanguage: i18next__default["default"].resolvedLanguage,
9833
- formId: null
9841
+ formId: null,
9842
+ enabled: false,
9843
+ title: ""
9834
9844
  },
9835
9845
  setFormData: function setFormData(payload) {
9836
9846
  return set(ramda.assoc("formState", payload));
@@ -9842,14 +9852,15 @@ var useBuildFormState = function useBuildFormState() {
9842
9852
  };
9843
9853
 
9844
9854
  var ChangeLanguageDropdown = function ChangeLanguageDropdown(_ref) {
9845
- var initialLanguage = _ref.initialLanguage,
9855
+ var _findBy;
9856
+ var currentLanguage = _ref.currentLanguage,
9846
9857
  languages = _ref.languages,
9847
9858
  onChange = _ref.onChange;
9848
9859
  var _useState = React$2.useState(false),
9849
9860
  _useState2 = _slicedToArray$3(_useState, 2),
9850
9861
  isUnsavedChangesAlertOpen = _useState2[0],
9851
9862
  setIsUnsavedChangesAlertOpen = _useState2[1];
9852
- var _useState3 = React$2.useState(initialLanguage),
9863
+ var _useState3 = React$2.useState(currentLanguage),
9853
9864
  _useState4 = _slicedToArray$3(_useState3, 2),
9854
9865
  selectedLanguage = _useState4[0],
9855
9866
  setSelectedLanguage = _useState4[1];
@@ -9865,17 +9876,24 @@ var ChangeLanguageDropdown = function ChangeLanguageDropdown(_ref) {
9865
9876
  setSelectedLanguage(code);
9866
9877
  setIsUnsavedChangesAlertOpen(true);
9867
9878
  };
9879
+ var selectedLanguageName = (_findBy = neetoCist.findBy({
9880
+ code: currentLanguage
9881
+ }, languages)) === null || _findBy === void 0 ? void 0 : _findBy.name;
9868
9882
  return /*#__PURE__*/React__default["default"].createElement(React__default["default"].Fragment, null, /*#__PURE__*/React__default["default"].createElement(neetoui.Tooltip, {
9869
9883
  content: t("neetoForm.questions.changeLanguage")
9870
9884
  }, /*#__PURE__*/React__default["default"].createElement("div", null, /*#__PURE__*/React__default["default"].createElement(neetoui.Dropdown, {
9885
+ buttonProps: {
9886
+ iconPosition: "left"
9887
+ },
9871
9888
  buttonStyle: "text",
9872
9889
  icon: neetoIcons.Globe,
9890
+ label: selectedLanguageName,
9873
9891
  position: "top-start"
9874
9892
  }, /*#__PURE__*/React__default["default"].createElement(neetoui.Dropdown.Menu, null, languages.map(function (_ref2) {
9875
9893
  var code = _ref2.code,
9876
9894
  name = _ref2.name;
9877
9895
  return /*#__PURE__*/React__default["default"].createElement(neetoui.Dropdown.MenuItem.Button, {
9878
- isActive: initialLanguage === code,
9896
+ isActive: currentLanguage === code,
9879
9897
  key: code,
9880
9898
  onClick: function onClick() {
9881
9899
  return languageChangeHandler(code);
@@ -9912,7 +9930,7 @@ var Overview = function Overview(_ref) {
9912
9930
  style: "h4",
9913
9931
  weight: "semibold"
9914
9932
  }, title), availableLanguages.length > 1 && /*#__PURE__*/React__default["default"].createElement(ChangeLanguageDropdown, {
9915
- initialLanguage: selectedLanguage,
9933
+ currentLanguage: selectedLanguage,
9916
9934
  languages: availableLanguages,
9917
9935
  onChange: onLanguageChange
9918
9936
  })), description);
@@ -11679,7 +11697,7 @@ var List = function List(_ref) {
11679
11697
  })))));
11680
11698
  };
11681
11699
 
11682
- var _excluded$6 = ["questionKinds", "showAddQuestionDivider", "onValueChange", "showActionBlock", "formId", "isDeletable", "isRequiredField", "submitButtonProps", "cancelButtonProps", "isKindAlreadyActive", "getActiveKindDetails", "kindUniqueOn", "isDisabledFieldLabel", "disabledAddButtonTooltipProps", "enableFieldCode", "formTitle", "formDescription", "selectedLanguage", "availableLanguages", "onLanguageChange"];
11700
+ var _excluded$6 = ["questionKinds", "showAddQuestionDivider", "onValueChange", "showActionBlock", "formId", "isDeletable", "isRequiredField", "submitButtonProps", "cancelButtonProps", "isKindAlreadyActive", "getActiveKindDetails", "kindUniqueOn", "isDisabledFieldLabel", "disabledAddButtonTooltipProps", "enableFieldCode", "isFormEnabled", "savedTitle", "formTitle", "formDescription", "selectedLanguage", "availableLanguages", "onLanguageChange"];
11683
11701
  function ownKeys$f(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; }
11684
11702
  function _objectSpread$f(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys$f(Object(t), !0).forEach(function (r) { _defineProperty$6(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys$f(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
11685
11703
  var Form = function Form(_ref) {
@@ -11698,6 +11716,8 @@ var Form = function Form(_ref) {
11698
11716
  isDisabledFieldLabel = _ref.isDisabledFieldLabel,
11699
11717
  disabledAddButtonTooltipProps = _ref.disabledAddButtonTooltipProps,
11700
11718
  enableFieldCode = _ref.enableFieldCode,
11719
+ isFormEnabled = _ref.isFormEnabled,
11720
+ savedTitle = _ref.savedTitle,
11701
11721
  formTitle = _ref.formTitle,
11702
11722
  formDescription = _ref.formDescription,
11703
11723
  selectedLanguage = _ref.selectedLanguage,
@@ -11727,6 +11747,8 @@ var Form = function Form(_ref) {
11727
11747
  React$2.useEffect(function () {
11728
11748
  setFormData({
11729
11749
  formId: formId,
11750
+ enabled: isFormEnabled,
11751
+ title: savedTitle,
11730
11752
  values: values,
11731
11753
  dirty: dirty,
11732
11754
  isSubmitting: isSubmitting,
@@ -11736,7 +11758,7 @@ var Form = function Form(_ref) {
11736
11758
  resetForm: resetForm,
11737
11759
  selectedLanguage: selectedLanguage
11738
11760
  });
11739
- }, [formId, setFormData, values, dirty, isSubmitting, isValid, errors, submitForm, resetForm, selectedLanguage]);
11761
+ }, [formId, isFormEnabled, savedTitle, setFormData, values, dirty, isSubmitting, isValid, errors, submitForm, resetForm, selectedLanguage]);
11740
11762
  var questions = values.questions;
11741
11763
  React$2.useEffect(function () {
11742
11764
  onValueChange === null || onValueChange === void 0 || onValueChange(questions);
@@ -12034,12 +12056,11 @@ var BuildForm = function BuildForm(_ref) {
12034
12056
  }
12035
12057
  }),
12036
12058
  _useFetchQuestions$da = _useFetchQuestions.data,
12037
- _useFetchQuestions$da2 = _useFetchQuestions$da === void 0 ? {
12038
- title: "",
12039
- questions: []
12040
- } : _useFetchQuestions$da,
12041
- questions = _useFetchQuestions$da2.questions,
12059
+ _useFetchQuestions$da2 = _useFetchQuestions$da === void 0 ? QUESTIONS_INITIAL_VALUE : _useFetchQuestions$da,
12060
+ isFormEnabled = _useFetchQuestions$da2.enabled,
12061
+ savedTitle = _useFetchQuestions$da2.title,
12042
12062
  isQuestionsLoading = _useFetchQuestions$da2.isQuestionsLoading,
12063
+ questions = _useFetchQuestions$da2.questions,
12043
12064
  isLoading = _useFetchQuestions.isLoading,
12044
12065
  refetch = _useFetchQuestions.refetch;
12045
12066
  if (isLoading || showLoader && isQuestionsLoading) {
@@ -12047,7 +12068,8 @@ var BuildForm = function BuildForm(_ref) {
12047
12068
  className: "flex h-full w-full items-center justify-center py-6"
12048
12069
  }, /*#__PURE__*/React__default["default"].createElement(PageLoader__default["default"], null));
12049
12070
  }
12050
- var handleSubmit = function handleSubmit(payload) {
12071
+ var handleSubmit = function handleSubmit(payload, _ref2) {
12072
+ var setSubmitting = _ref2.setSubmitting;
12051
12073
  updateQuestions({
12052
12074
  id: id,
12053
12075
  values: _objectSpread$e({
@@ -12055,7 +12077,10 @@ var BuildForm = function BuildForm(_ref) {
12055
12077
  neetoFormQuestion: payload
12056
12078
  }, buildRequestArgs)
12057
12079
  }, {
12058
- onSuccess: refetch
12080
+ onSuccess: refetch,
12081
+ onSettled: function onSettled() {
12082
+ return setSubmitting(false);
12083
+ }
12059
12084
  });
12060
12085
  };
12061
12086
  var onValueChange = function onValueChange(questions) {
@@ -12068,8 +12093,8 @@ var BuildForm = function BuildForm(_ref) {
12068
12093
  var isDeletable = isQuestionDeletable !== null && isQuestionDeletable !== void 0 ? isQuestionDeletable : function (question) {
12069
12094
  return !nonRemovableFields.includes(question.kind);
12070
12095
  };
12071
- var isRequiredField = isFieldRequired !== null && isFieldRequired !== void 0 ? isFieldRequired : function (_ref2) {
12072
- var kind = _ref2.kind;
12096
+ var isRequiredField = isFieldRequired !== null && isFieldRequired !== void 0 ? isFieldRequired : function (_ref3) {
12097
+ var kind = _ref3.kind;
12073
12098
  return requiredFields.includes(kind);
12074
12099
  };
12075
12100
  var isDisabledFieldLabel = isFieldLabelDisabled !== null && isFieldLabelDisabled !== void 0 ? isFieldLabelDisabled : function () {
@@ -12087,9 +12112,9 @@ var BuildForm = function BuildForm(_ref) {
12087
12112
  },
12088
12113
  validationSchema: formValidationSchema,
12089
12114
  onSubmit: handleSubmit
12090
- }, function (_ref3) {
12091
- var errors = _ref3.errors,
12092
- setFieldError = _ref3.setFieldError;
12115
+ }, function (_ref4) {
12116
+ var errors = _ref4.errors,
12117
+ setFieldError = _ref4.setFieldError;
12093
12118
  return /*#__PURE__*/React__default["default"].createElement(Form, _extends$8({}, _objectSpread$e(_objectSpread$e({}, formDomProps), {}, {
12094
12119
  availableLanguages: availableLanguages,
12095
12120
  cancelButtonProps: cancelButtonProps,
@@ -12100,11 +12125,13 @@ var BuildForm = function BuildForm(_ref) {
12100
12125
  getActiveKindDetails: getActiveKindDetails,
12101
12126
  isDeletable: isDeletable,
12102
12127
  isDisabledFieldLabel: isDisabledFieldLabel,
12128
+ isFormEnabled: isFormEnabled,
12103
12129
  isKindAlreadyActive: isKindAlreadyActive,
12104
12130
  isRequiredField: isRequiredField,
12105
12131
  kindUniqueOn: kindUniqueOn,
12106
12132
  onLanguageChange: onLanguageChange,
12107
12133
  onValueChange: onValueChange,
12134
+ savedTitle: savedTitle,
12108
12135
  selectedLanguage: selectedLanguage,
12109
12136
  showActionBlock: showActionBlock,
12110
12137
  showAddQuestionDivider: showAddQuestionDivider,
@@ -27257,7 +27284,8 @@ var ExternalForm = function ExternalForm(_ref) {
27257
27284
  }, /*#__PURE__*/React__default["default"].createElement(PageLoader__default["default"], null));
27258
27285
  }
27259
27286
  var title = form.title,
27260
- questions = form.questions;
27287
+ _form$questions = form.questions,
27288
+ questions = _form$questions === void 0 ? [] : _form$questions;
27261
27289
  var renderedQuestions = preview ? questions.filter(function (_ref4) {
27262
27290
  var _destroy = _ref4._destroy;
27263
27291
  return !_destroy;