@bigbinary/neeto-form-frontend 1.3.0 → 1.3.1

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/dist/index.cjs.js CHANGED
@@ -21,6 +21,7 @@ var reactI18next = require('react-i18next');
21
21
  var zustand = require('zustand');
22
22
  var classnames = require('classnames');
23
23
  var neetoEditor = require('@bigbinary/neeto-editor');
24
+ var shallow = require('zustand/shallow');
24
25
  var yup = require('yup');
25
26
  var useHotkeys = require('@bigbinary/neeto-hotkeys');
26
27
  var dayjs = require('dayjs');
@@ -807,6 +808,7 @@ var QUESTIONS_INITIAL_VALUE = {
807
808
  };
808
809
  var RESERVED_FIELD_CODES = ["month", "date", "time"];
809
810
  var SELECTABLE_KINDS = ["radio", "checkbox", "dropdown"];
811
+ var RICH_TEXT_QUESTIONS = ["paragraph", "termsandcondition"];
810
812
 
811
813
  function _arrayWithHoles$3(arr) {
812
814
  if (Array.isArray(arr)) return arr;
@@ -9842,6 +9844,28 @@ var formHelpers = {
9842
9844
  pushToList: pushToList
9843
9845
  };
9844
9846
 
9847
+ var isBlank = ramda.compose(ramda.isEmpty, ramda.trim);
9848
+ var parseServerError = function parseServerError(error) {
9849
+ var _error$notice;
9850
+ return (_error$notice = error.notice) !== null && _error$notice !== void 0 ? _error$notice : i18next.t("neetoForm.common.somethingWentWrong");
9851
+ };
9852
+ var isEmptyValues = function isEmptyValues(obj) {
9853
+ return ramda.either(ramda.isNil, ramda.isEmpty)(obj) ? true : ramda.values(obj).every(function (value) {
9854
+ if (ramda.isEmpty(value)) {
9855
+ return true;
9856
+ } else if (Array.isArray(value)) {
9857
+ return ramda.equals([false, false, false], value);
9858
+ }
9859
+ return !value;
9860
+ });
9861
+ };
9862
+
9863
+ // eslint-disable-next-line react-hooks/rules-of-hooks
9864
+ var dotPath = ramda.useWith(ramda.path, [ramda.split(".")]);
9865
+ var isFunction$1 = function isFunction(obj) {
9866
+ return typeof obj === "function";
9867
+ };
9868
+
9845
9869
  /** @type {import("neetocommons/react-utils").ZustandStoreHook} */
9846
9870
  var useBuildFormStore = zustand.create(reactUtils.withImmutableActions(function (set) {
9847
9871
  return {
@@ -9856,10 +9880,11 @@ var useBuildFormStore = zustand.create(reactUtils.withImmutableActions(function
9856
9880
  selectedLanguage: i18next__default["default"].resolvedLanguage,
9857
9881
  formId: null,
9858
9882
  enabled: false,
9859
- title: ""
9883
+ title: "",
9884
+ richTextFieldsToReset: []
9860
9885
  },
9861
- setFormData: function setFormData(payload) {
9862
- return set(ramda.assoc("formState", payload));
9886
+ setFormData: function setFormData(arg) {
9887
+ return set(ramda.modify("formState", isFunction$1(arg) ? arg : ramda.mergeLeft(arg)));
9863
9888
  }
9864
9889
  };
9865
9890
  }));
@@ -10493,25 +10518,6 @@ var Email$1 = reactUtils.withT(function (_ref) {
10493
10518
  }));
10494
10519
  });
10495
10520
 
10496
- var isBlank = ramda.compose(ramda.isEmpty, ramda.trim);
10497
- var parseServerError = function parseServerError(error) {
10498
- var _error$notice;
10499
- return (_error$notice = error.notice) !== null && _error$notice !== void 0 ? _error$notice : i18next.t("neetoForm.common.somethingWentWrong");
10500
- };
10501
- var isEmptyValues = function isEmptyValues(obj) {
10502
- return ramda.either(ramda.isNil, ramda.isEmpty)(obj) ? true : ramda.values(obj).every(function (value) {
10503
- if (ramda.isEmpty(value)) {
10504
- return true;
10505
- } else if (Array.isArray(value)) {
10506
- return ramda.equals([false, false, false], value);
10507
- }
10508
- return !value;
10509
- });
10510
- };
10511
-
10512
- // eslint-disable-next-line react-hooks/rules-of-hooks
10513
- var dotPath = ramda.useWith(ramda.path, [ramda.split(".")]);
10514
-
10515
10521
  var FileGroup = function FileGroup(_ref) {
10516
10522
  var name = _ref.name,
10517
10523
  label = _ref.label,
@@ -11086,18 +11092,42 @@ var StarRating$3 = function StarRating(_ref) {
11086
11092
  }));
11087
11093
  };
11088
11094
 
11089
- var useUpdateEditorContent = function useUpdateEditorContent(editorRef, fieldName, value) {
11095
+ var useUpdateEditorContent = function useUpdateEditorContent(_ref) {
11096
+ var editorRef = _ref.editorRef,
11097
+ fieldName = _ref.fieldName,
11098
+ value = _ref.value,
11099
+ initialValue = _ref.initialValue,
11100
+ fieldCode = _ref.fieldCode;
11090
11101
  var initialStateRef = React$2.useRef({
11091
11102
  language: "",
11092
11103
  value: null
11093
11104
  });
11094
- var _useBuildFormState = useBuildFormState(),
11095
- formId = _useBuildFormState.formId,
11096
- language = _useBuildFormState.selectedLanguage;
11105
+ var _useBuildFormStore = useBuildFormStore(function (store) {
11106
+ return {
11107
+ setFormData: store["setFormData"]
11108
+ };
11109
+ }, shallow.shallow),
11110
+ setFormData = _useBuildFormStore.setFormData;
11111
+ var _useBuildFormStore2 = useBuildFormStore(function (store) {
11112
+ var _store$formState, _store$formState2;
11113
+ return {
11114
+ formId: (_store$formState = store["formState"]) === null || _store$formState === void 0 ? void 0 : _store$formState["formId"],
11115
+ selectedLanguage: (_store$formState2 = store["formState"]) === null || _store$formState2 === void 0 ? void 0 : _store$formState2["selectedLanguage"]
11116
+ };
11117
+ }, shallow.shallow),
11118
+ formId = _useBuildFormStore2.formId,
11119
+ language = _useBuildFormStore2.selectedLanguage;
11120
+ var shouldReset = useBuildFormStore(function (store) {
11121
+ return store.formState.richTextFieldsToReset.includes(fieldCode);
11122
+ });
11097
11123
  var setEditorContent = function setEditorContent(content) {
11098
11124
  var _editorRef$current$ed;
11099
11125
  return (_editorRef$current$ed = editorRef.current.editor) === null || _editorRef$current$ed === void 0 || (_editorRef$current$ed = _editorRef$current$ed.commands) === null || _editorRef$current$ed === void 0 ? void 0 : _editorRef$current$ed.setContent(content);
11100
11126
  };
11127
+ if (shouldReset) {
11128
+ setEditorContent(initialValue);
11129
+ setFormData(ramda.modify("richTextFieldsToReset", ramda.without([fieldCode])));
11130
+ }
11101
11131
  React$2.useEffect(function () {
11102
11132
  if (initialStateRef.current["language"] !== language) {
11103
11133
  initialStateRef.current["language"] = language;
@@ -11124,11 +11154,13 @@ var useUpdateEditorContent = function useUpdateEditorContent(editorRef, fieldNam
11124
11154
 
11125
11155
  var Terms$1 = function Terms(_ref) {
11126
11156
  var name = _ref.name,
11157
+ item = _ref.item,
11127
11158
  isLabelDisabled = _ref.isLabelDisabled;
11128
11159
  var editorRef = React$2.useRef({
11129
11160
  editor: {}
11130
11161
  });
11131
11162
  var fieldName = "".concat(name, ".label");
11163
+ var fieldCode = item.fieldCode;
11132
11164
  var _useField = formik.useField({
11133
11165
  name: fieldName,
11134
11166
  validate: validateEditorContent(editorRef)
@@ -11138,10 +11170,17 @@ var Terms$1 = function Terms(_ref) {
11138
11170
  _useField2$ = _useField2[1],
11139
11171
  touched = _useField2$.touched,
11140
11172
  error = _useField2$.error,
11173
+ initialValue = _useField2$.initialValue,
11141
11174
  _useField2$2 = _useField2[2],
11142
11175
  setTouched = _useField2$2.setTouched,
11143
11176
  setValue = _useField2$2.setValue;
11144
- useUpdateEditorContent(editorRef, fieldName, value);
11177
+ useUpdateEditorContent({
11178
+ editorRef: editorRef,
11179
+ fieldName: fieldName,
11180
+ value: value,
11181
+ initialValue: initialValue,
11182
+ fieldCode: fieldCode
11183
+ });
11145
11184
  return /*#__PURE__*/React__default["default"].createElement("div", {
11146
11185
  className: "w-full cursor-auto"
11147
11186
  }, /*#__PURE__*/React__default["default"].createElement(neetoEditor.Editor, {
@@ -11183,11 +11222,13 @@ var Fields = {
11183
11222
 
11184
11223
  var Editor = function Editor(_ref) {
11185
11224
  var name = _ref.name,
11225
+ item = _ref.item,
11186
11226
  isLabelDisabled = _ref.isLabelDisabled;
11187
11227
  var editorRef = React$2.useRef({
11188
11228
  editor: {}
11189
11229
  });
11190
11230
  var fieldName = "".concat(name, ".label");
11231
+ var fieldCode = item.fieldCode;
11191
11232
  var _useField = formik.useField({
11192
11233
  name: fieldName,
11193
11234
  validate: validateEditorContent(editorRef)
@@ -11197,10 +11238,17 @@ var Editor = function Editor(_ref) {
11197
11238
  _useField2$ = _useField2[1],
11198
11239
  touched = _useField2$.touched,
11199
11240
  error = _useField2$.error,
11241
+ initialValue = _useField2$.initialValue,
11200
11242
  _useField2$2 = _useField2[2],
11201
11243
  setTouched = _useField2$2.setTouched,
11202
11244
  setValue = _useField2$2.setValue;
11203
- useUpdateEditorContent(editorRef, fieldName, value);
11245
+ useUpdateEditorContent({
11246
+ editorRef: editorRef,
11247
+ fieldName: fieldName,
11248
+ value: value,
11249
+ initialValue: initialValue,
11250
+ fieldCode: fieldCode
11251
+ });
11204
11252
  return /*#__PURE__*/React__default["default"].createElement("div", {
11205
11253
  className: "w-full cursor-auto"
11206
11254
  }, /*#__PURE__*/React__default["default"].createElement(neetoEditor.Editor, {
@@ -11925,6 +11973,15 @@ var Form = function Form(_ref) {
11925
11973
  if (neetoCist.isNotEmpty(questionLabel)) return neetoCist.truncate(questionLabel, 40);
11926
11974
  return neetoCist.humanize(questionKind);
11927
11975
  };
11976
+ var richTextQuestions = neetoCist.filterBy({
11977
+ kind: ramda.includes(ramda.__, RICH_TEXT_QUESTIONS)
11978
+ }, questions);
11979
+ var resetFormData = function resetFormData() {
11980
+ resetForm();
11981
+ setFormData({
11982
+ richTextFieldsToReset: ramda.pluck("fieldCode", richTextQuestions)
11983
+ });
11984
+ };
11928
11985
  return /*#__PURE__*/React__default["default"].createElement(React__default["default"].Fragment, null, /*#__PURE__*/React__default["default"].createElement(neetoui.Alert, {
11929
11986
  isOpen: ramda.isNotNil(deleteQuestionIndex),
11930
11987
  submitButtonLabel: t("neetoForm.common.delete"),
@@ -12014,13 +12071,11 @@ var Form = function Form(_ref) {
12014
12071
  }))), showActionBlock && /*#__PURE__*/React__default["default"].createElement("div", {
12015
12072
  className: "neeto-ui-border-gray-300 flex-shrink-0 border-t py-4"
12016
12073
  }, /*#__PURE__*/React__default["default"].createElement(formik$1.ActionBlock, {
12017
- className: "space-x-2",
12074
+ submitButtonProps: submitButtonProps,
12018
12075
  cancelButtonProps: _objectSpread$h({
12019
- label: t("neetoForm.common.reset")
12020
- }, cancelButtonProps),
12021
- submitButtonProps: _objectSpread$h({
12022
- disabled: isSubmitting || !dirty
12023
- }, submitButtonProps)
12076
+ label: t("neetoForm.common.reset"),
12077
+ onClick: resetFormData
12078
+ }, cancelButtonProps)
12024
12079
  }))));
12025
12080
  };
12026
12081
 
@@ -27053,7 +27108,7 @@ var TermsField = function TermsField(_ref) {
27053
27108
  kind = question.kind,
27054
27109
  isRequired = question.isRequired,
27055
27110
  nodeId = question.nodeId;
27056
- var label = fieldWithFallback(question, "label");
27111
+ var label = fieldWithFallback(question, "label", true);
27057
27112
  return /*#__PURE__*/React__default["default"].createElement(formik.Field, {
27058
27113
  name: name || nodeId,
27059
27114
  validate: validateFieldValue({
@@ -27139,14 +27194,16 @@ var _QUESTION_TO_COMPONEN;
27139
27194
  var QUESTION_TO_COMPONENT_MAP = (_QUESTION_TO_COMPONEN = {}, _defineProperty$6(_QUESTION_TO_COMPONEN, QUESTION_KIND.TEXT.value, TextField), _defineProperty$6(_QUESTION_TO_COMPONEN, QUESTION_KIND.NAME.value, NameField), _defineProperty$6(_QUESTION_TO_COMPONEN, QUESTION_KIND.EMAIL.value, EmailField), _defineProperty$6(_QUESTION_TO_COMPONEN, QUESTION_KIND.INTEGER.value, TextField), _defineProperty$6(_QUESTION_TO_COMPONEN, QUESTION_KIND.DECIMAL.value, TextField), _defineProperty$6(_QUESTION_TO_COMPONEN, QUESTION_KIND.PHONE.value, PhoneNumberField), _defineProperty$6(_QUESTION_TO_COMPONEN, QUESTION_KIND.QUESTION.value, TextField), _defineProperty$6(_QUESTION_TO_COMPONEN, QUESTION_KIND.TEXTAREA.value, TextField), _defineProperty$6(_QUESTION_TO_COMPONEN, QUESTION_KIND.CHECKBOX.value, OptionsField), _defineProperty$6(_QUESTION_TO_COMPONEN, QUESTION_KIND.RADIO.value, OptionsField), _defineProperty$6(_QUESTION_TO_COMPONEN, QUESTION_KIND.DROPDOWN.value, OptionsField), _defineProperty$6(_QUESTION_TO_COMPONEN, QUESTION_KIND.RATING.value, RatingField), _defineProperty$6(_QUESTION_TO_COMPONEN, QUESTION_KIND.PARAGRAPH.value, function (_ref) {
27140
27195
  var question = _ref.question;
27141
27196
  return /*#__PURE__*/React__default["default"].createElement(neetoEditor.EditorContent, {
27142
- content: ramda.isEmpty(question.label) ? question.labelFallback : question.label
27197
+ content: fieldWithFallback(question, "label", true)
27143
27198
  });
27144
27199
  }), _defineProperty$6(_QUESTION_TO_COMPONEN, QUESTION_KIND.TERMS.value, TermsField), _defineProperty$6(_QUESTION_TO_COMPONEN, QUESTION_KIND.DATE.value, DateField), _defineProperty$6(_QUESTION_TO_COMPONEN, QUESTION_KIND.STAR_RATING.value, StarRatingField), _defineProperty$6(_QUESTION_TO_COMPONEN, QUESTION_KIND.ADDITIONAL_GUESTS.value, MultipleEmailInput), _defineProperty$6(_QUESTION_TO_COMPONEN, QUESTION_KIND.RICH_TEXT.value, RichTextEditor), _defineProperty$6(_QUESTION_TO_COMPONEN, QUESTION_KIND.CONDITION.value, ConditionField), _defineProperty$6(_QUESTION_TO_COMPONEN, QUESTION_KIND.FILE_UPLOAD.value, FileUploadField), _QUESTION_TO_COMPONEN);
27145
27200
 
27146
27201
  var fieldWithFallback = function fieldWithFallback(question, fieldName) {
27202
+ var hasRichContent = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;
27147
27203
  var fallback = question["".concat(fieldName, "Fallback")];
27148
27204
  var field = question[fieldName];
27149
- return ramda.isEmpty(field) && ramda.isNotNil(fallback) ? fallback : field;
27205
+ var isFieldEmpty = hasRichContent ? neetoEditor.isEditorEmpty(field) : ramda.isEmpty(field);
27206
+ return isFieldEmpty && ramda.isNotNil(fallback) ? fallback : field;
27150
27207
  };
27151
27208
  var getFieldComponent = function getFieldComponent(_ref) {
27152
27209
  var kind = _ref.kind;