@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 +94 -37
- package/dist/index.cjs.js.map +1 -1
- package/dist/index.js +95 -38
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
package/dist/index.js
CHANGED
|
@@ -5,7 +5,7 @@ import { noop as noop$4, findBy, slugify, toLabelAndValue, filterBy, isNotEmpty,
|
|
|
5
5
|
import { showThumbsUpToastr, withEventTargetValue, getQueryParams, dateFormat } from '@bigbinary/neeto-commons-frontend/utils';
|
|
6
6
|
import PageLoader from '@bigbinary/neeto-molecules/PageLoader';
|
|
7
7
|
import { Tooltip, Dropdown as Dropdown$2, Alert, Typography, Button as Button$1, Label, Checkbox as Checkbox$1, Toastr, MultiEmailInput, DatePicker, Input as Input$2, Radio as Radio$1, Select as Select$1, Textarea as Textarea$1, Spinner as Spinner$2 } from '@bigbinary/neetoui';
|
|
8
|
-
import { assoc, mergeLeft,
|
|
8
|
+
import { assoc, mergeLeft, compose as compose$1, isEmpty, trim, useWith, path, split, either, isNil, values, equals, modify, prop, range, difference, without, reject, pluck, keys, pick, omit, includes, __, isNotNil, insert, not, pipe as pipe$1, toLower, map, identity, clamp as clamp$2, filter as filter$1 } from 'ramda';
|
|
9
9
|
import { useQuery, useQueryClient, useMutation } from 'react-query';
|
|
10
10
|
import i18next, { t as t$4 } from 'i18next';
|
|
11
11
|
import { Input, Email as Email$2, Phone as Phone$2, Globe, Up, Down, MenuHorizontal, Delete, Plus, NeetoInvisible, Checkbox as Checkbox$2, Radio, Dropdown as Dropdown$3, Rating as Rating$4, Smiley, Calendar, Upload, Check, Close, FileGeneric } from '@bigbinary/neeto-icons';
|
|
@@ -18,6 +18,7 @@ import { useTranslation, Trans } from 'react-i18next';
|
|
|
18
18
|
import { create as create$1 } from 'zustand';
|
|
19
19
|
import classnames from 'classnames';
|
|
20
20
|
import { Editor as Editor$1, isEditorEmpty, EditorContent } from '@bigbinary/neeto-editor';
|
|
21
|
+
import { shallow } from 'zustand/shallow';
|
|
21
22
|
import * as yup from 'yup';
|
|
22
23
|
import { object, array, string } from 'yup';
|
|
23
24
|
import useHotkeys from '@bigbinary/neeto-hotkeys';
|
|
@@ -769,6 +770,7 @@ var QUESTIONS_INITIAL_VALUE = {
|
|
|
769
770
|
};
|
|
770
771
|
var RESERVED_FIELD_CODES = ["month", "date", "time"];
|
|
771
772
|
var SELECTABLE_KINDS = ["radio", "checkbox", "dropdown"];
|
|
773
|
+
var RICH_TEXT_QUESTIONS = ["paragraph", "termsandcondition"];
|
|
772
774
|
|
|
773
775
|
function _arrayWithHoles$3(arr) {
|
|
774
776
|
if (Array.isArray(arr)) return arr;
|
|
@@ -9804,6 +9806,28 @@ var formHelpers = {
|
|
|
9804
9806
|
pushToList: pushToList
|
|
9805
9807
|
};
|
|
9806
9808
|
|
|
9809
|
+
var isBlank = compose$1(isEmpty, trim);
|
|
9810
|
+
var parseServerError = function parseServerError(error) {
|
|
9811
|
+
var _error$notice;
|
|
9812
|
+
return (_error$notice = error.notice) !== null && _error$notice !== void 0 ? _error$notice : t$4("neetoForm.common.somethingWentWrong");
|
|
9813
|
+
};
|
|
9814
|
+
var isEmptyValues = function isEmptyValues(obj) {
|
|
9815
|
+
return either(isNil, isEmpty)(obj) ? true : values(obj).every(function (value) {
|
|
9816
|
+
if (isEmpty(value)) {
|
|
9817
|
+
return true;
|
|
9818
|
+
} else if (Array.isArray(value)) {
|
|
9819
|
+
return equals([false, false, false], value);
|
|
9820
|
+
}
|
|
9821
|
+
return !value;
|
|
9822
|
+
});
|
|
9823
|
+
};
|
|
9824
|
+
|
|
9825
|
+
// eslint-disable-next-line react-hooks/rules-of-hooks
|
|
9826
|
+
var dotPath = useWith(path, [split(".")]);
|
|
9827
|
+
var isFunction$1 = function isFunction(obj) {
|
|
9828
|
+
return typeof obj === "function";
|
|
9829
|
+
};
|
|
9830
|
+
|
|
9807
9831
|
/** @type {import("neetocommons/react-utils").ZustandStoreHook} */
|
|
9808
9832
|
var useBuildFormStore = create$1(withImmutableActions(function (set) {
|
|
9809
9833
|
return {
|
|
@@ -9818,10 +9842,11 @@ var useBuildFormStore = create$1(withImmutableActions(function (set) {
|
|
|
9818
9842
|
selectedLanguage: i18next.resolvedLanguage,
|
|
9819
9843
|
formId: null,
|
|
9820
9844
|
enabled: false,
|
|
9821
|
-
title: ""
|
|
9845
|
+
title: "",
|
|
9846
|
+
richTextFieldsToReset: []
|
|
9822
9847
|
},
|
|
9823
|
-
setFormData: function setFormData(
|
|
9824
|
-
return set(
|
|
9848
|
+
setFormData: function setFormData(arg) {
|
|
9849
|
+
return set(modify("formState", isFunction$1(arg) ? arg : mergeLeft(arg)));
|
|
9825
9850
|
}
|
|
9826
9851
|
};
|
|
9827
9852
|
}));
|
|
@@ -10455,25 +10480,6 @@ var Email$1 = withT(function (_ref) {
|
|
|
10455
10480
|
}));
|
|
10456
10481
|
});
|
|
10457
10482
|
|
|
10458
|
-
var isBlank = compose$1(isEmpty, trim);
|
|
10459
|
-
var parseServerError = function parseServerError(error) {
|
|
10460
|
-
var _error$notice;
|
|
10461
|
-
return (_error$notice = error.notice) !== null && _error$notice !== void 0 ? _error$notice : t$4("neetoForm.common.somethingWentWrong");
|
|
10462
|
-
};
|
|
10463
|
-
var isEmptyValues = function isEmptyValues(obj) {
|
|
10464
|
-
return either(isNil, isEmpty)(obj) ? true : values(obj).every(function (value) {
|
|
10465
|
-
if (isEmpty(value)) {
|
|
10466
|
-
return true;
|
|
10467
|
-
} else if (Array.isArray(value)) {
|
|
10468
|
-
return equals([false, false, false], value);
|
|
10469
|
-
}
|
|
10470
|
-
return !value;
|
|
10471
|
-
});
|
|
10472
|
-
};
|
|
10473
|
-
|
|
10474
|
-
// eslint-disable-next-line react-hooks/rules-of-hooks
|
|
10475
|
-
var dotPath = useWith(path, [split(".")]);
|
|
10476
|
-
|
|
10477
10483
|
var FileGroup = function FileGroup(_ref) {
|
|
10478
10484
|
var name = _ref.name,
|
|
10479
10485
|
label = _ref.label,
|
|
@@ -11048,18 +11054,42 @@ var StarRating$3 = function StarRating(_ref) {
|
|
|
11048
11054
|
}));
|
|
11049
11055
|
};
|
|
11050
11056
|
|
|
11051
|
-
var useUpdateEditorContent = function useUpdateEditorContent(
|
|
11057
|
+
var useUpdateEditorContent = function useUpdateEditorContent(_ref) {
|
|
11058
|
+
var editorRef = _ref.editorRef,
|
|
11059
|
+
fieldName = _ref.fieldName,
|
|
11060
|
+
value = _ref.value,
|
|
11061
|
+
initialValue = _ref.initialValue,
|
|
11062
|
+
fieldCode = _ref.fieldCode;
|
|
11052
11063
|
var initialStateRef = useRef({
|
|
11053
11064
|
language: "",
|
|
11054
11065
|
value: null
|
|
11055
11066
|
});
|
|
11056
|
-
var
|
|
11057
|
-
|
|
11058
|
-
|
|
11067
|
+
var _useBuildFormStore = useBuildFormStore(function (store) {
|
|
11068
|
+
return {
|
|
11069
|
+
setFormData: store["setFormData"]
|
|
11070
|
+
};
|
|
11071
|
+
}, shallow),
|
|
11072
|
+
setFormData = _useBuildFormStore.setFormData;
|
|
11073
|
+
var _useBuildFormStore2 = useBuildFormStore(function (store) {
|
|
11074
|
+
var _store$formState, _store$formState2;
|
|
11075
|
+
return {
|
|
11076
|
+
formId: (_store$formState = store["formState"]) === null || _store$formState === void 0 ? void 0 : _store$formState["formId"],
|
|
11077
|
+
selectedLanguage: (_store$formState2 = store["formState"]) === null || _store$formState2 === void 0 ? void 0 : _store$formState2["selectedLanguage"]
|
|
11078
|
+
};
|
|
11079
|
+
}, shallow),
|
|
11080
|
+
formId = _useBuildFormStore2.formId,
|
|
11081
|
+
language = _useBuildFormStore2.selectedLanguage;
|
|
11082
|
+
var shouldReset = useBuildFormStore(function (store) {
|
|
11083
|
+
return store.formState.richTextFieldsToReset.includes(fieldCode);
|
|
11084
|
+
});
|
|
11059
11085
|
var setEditorContent = function setEditorContent(content) {
|
|
11060
11086
|
var _editorRef$current$ed;
|
|
11061
11087
|
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);
|
|
11062
11088
|
};
|
|
11089
|
+
if (shouldReset) {
|
|
11090
|
+
setEditorContent(initialValue);
|
|
11091
|
+
setFormData(modify("richTextFieldsToReset", without([fieldCode])));
|
|
11092
|
+
}
|
|
11063
11093
|
useEffect(function () {
|
|
11064
11094
|
if (initialStateRef.current["language"] !== language) {
|
|
11065
11095
|
initialStateRef.current["language"] = language;
|
|
@@ -11086,11 +11116,13 @@ var useUpdateEditorContent = function useUpdateEditorContent(editorRef, fieldNam
|
|
|
11086
11116
|
|
|
11087
11117
|
var Terms$1 = function Terms(_ref) {
|
|
11088
11118
|
var name = _ref.name,
|
|
11119
|
+
item = _ref.item,
|
|
11089
11120
|
isLabelDisabled = _ref.isLabelDisabled;
|
|
11090
11121
|
var editorRef = useRef({
|
|
11091
11122
|
editor: {}
|
|
11092
11123
|
});
|
|
11093
11124
|
var fieldName = "".concat(name, ".label");
|
|
11125
|
+
var fieldCode = item.fieldCode;
|
|
11094
11126
|
var _useField = useField({
|
|
11095
11127
|
name: fieldName,
|
|
11096
11128
|
validate: validateEditorContent(editorRef)
|
|
@@ -11100,10 +11132,17 @@ var Terms$1 = function Terms(_ref) {
|
|
|
11100
11132
|
_useField2$ = _useField2[1],
|
|
11101
11133
|
touched = _useField2$.touched,
|
|
11102
11134
|
error = _useField2$.error,
|
|
11135
|
+
initialValue = _useField2$.initialValue,
|
|
11103
11136
|
_useField2$2 = _useField2[2],
|
|
11104
11137
|
setTouched = _useField2$2.setTouched,
|
|
11105
11138
|
setValue = _useField2$2.setValue;
|
|
11106
|
-
useUpdateEditorContent(
|
|
11139
|
+
useUpdateEditorContent({
|
|
11140
|
+
editorRef: editorRef,
|
|
11141
|
+
fieldName: fieldName,
|
|
11142
|
+
value: value,
|
|
11143
|
+
initialValue: initialValue,
|
|
11144
|
+
fieldCode: fieldCode
|
|
11145
|
+
});
|
|
11107
11146
|
return /*#__PURE__*/React__default.createElement("div", {
|
|
11108
11147
|
className: "w-full cursor-auto"
|
|
11109
11148
|
}, /*#__PURE__*/React__default.createElement(Editor$1, {
|
|
@@ -11145,11 +11184,13 @@ var Fields = {
|
|
|
11145
11184
|
|
|
11146
11185
|
var Editor = function Editor(_ref) {
|
|
11147
11186
|
var name = _ref.name,
|
|
11187
|
+
item = _ref.item,
|
|
11148
11188
|
isLabelDisabled = _ref.isLabelDisabled;
|
|
11149
11189
|
var editorRef = useRef({
|
|
11150
11190
|
editor: {}
|
|
11151
11191
|
});
|
|
11152
11192
|
var fieldName = "".concat(name, ".label");
|
|
11193
|
+
var fieldCode = item.fieldCode;
|
|
11153
11194
|
var _useField = useField({
|
|
11154
11195
|
name: fieldName,
|
|
11155
11196
|
validate: validateEditorContent(editorRef)
|
|
@@ -11159,10 +11200,17 @@ var Editor = function Editor(_ref) {
|
|
|
11159
11200
|
_useField2$ = _useField2[1],
|
|
11160
11201
|
touched = _useField2$.touched,
|
|
11161
11202
|
error = _useField2$.error,
|
|
11203
|
+
initialValue = _useField2$.initialValue,
|
|
11162
11204
|
_useField2$2 = _useField2[2],
|
|
11163
11205
|
setTouched = _useField2$2.setTouched,
|
|
11164
11206
|
setValue = _useField2$2.setValue;
|
|
11165
|
-
useUpdateEditorContent(
|
|
11207
|
+
useUpdateEditorContent({
|
|
11208
|
+
editorRef: editorRef,
|
|
11209
|
+
fieldName: fieldName,
|
|
11210
|
+
value: value,
|
|
11211
|
+
initialValue: initialValue,
|
|
11212
|
+
fieldCode: fieldCode
|
|
11213
|
+
});
|
|
11166
11214
|
return /*#__PURE__*/React__default.createElement("div", {
|
|
11167
11215
|
className: "w-full cursor-auto"
|
|
11168
11216
|
}, /*#__PURE__*/React__default.createElement(Editor$1, {
|
|
@@ -11887,6 +11935,15 @@ var Form = function Form(_ref) {
|
|
|
11887
11935
|
if (isNotEmpty(questionLabel)) return truncate(questionLabel, 40);
|
|
11888
11936
|
return humanize(questionKind);
|
|
11889
11937
|
};
|
|
11938
|
+
var richTextQuestions = filterBy({
|
|
11939
|
+
kind: includes(__, RICH_TEXT_QUESTIONS)
|
|
11940
|
+
}, questions);
|
|
11941
|
+
var resetFormData = function resetFormData() {
|
|
11942
|
+
resetForm();
|
|
11943
|
+
setFormData({
|
|
11944
|
+
richTextFieldsToReset: pluck("fieldCode", richTextQuestions)
|
|
11945
|
+
});
|
|
11946
|
+
};
|
|
11890
11947
|
return /*#__PURE__*/React__default.createElement(React__default.Fragment, null, /*#__PURE__*/React__default.createElement(Alert, {
|
|
11891
11948
|
isOpen: isNotNil(deleteQuestionIndex),
|
|
11892
11949
|
submitButtonLabel: t("neetoForm.common.delete"),
|
|
@@ -11976,13 +12033,11 @@ var Form = function Form(_ref) {
|
|
|
11976
12033
|
}))), showActionBlock && /*#__PURE__*/React__default.createElement("div", {
|
|
11977
12034
|
className: "neeto-ui-border-gray-300 flex-shrink-0 border-t py-4"
|
|
11978
12035
|
}, /*#__PURE__*/React__default.createElement(ActionBlock, {
|
|
11979
|
-
|
|
12036
|
+
submitButtonProps: submitButtonProps,
|
|
11980
12037
|
cancelButtonProps: _objectSpread$h({
|
|
11981
|
-
label: t("neetoForm.common.reset")
|
|
11982
|
-
|
|
11983
|
-
|
|
11984
|
-
disabled: isSubmitting || !dirty
|
|
11985
|
-
}, submitButtonProps)
|
|
12038
|
+
label: t("neetoForm.common.reset"),
|
|
12039
|
+
onClick: resetFormData
|
|
12040
|
+
}, cancelButtonProps)
|
|
11986
12041
|
}))));
|
|
11987
12042
|
};
|
|
11988
12043
|
|
|
@@ -27015,7 +27070,7 @@ var TermsField = function TermsField(_ref) {
|
|
|
27015
27070
|
kind = question.kind,
|
|
27016
27071
|
isRequired = question.isRequired,
|
|
27017
27072
|
nodeId = question.nodeId;
|
|
27018
|
-
var label = fieldWithFallback(question, "label");
|
|
27073
|
+
var label = fieldWithFallback(question, "label", true);
|
|
27019
27074
|
return /*#__PURE__*/React__default.createElement(Field, {
|
|
27020
27075
|
name: name || nodeId,
|
|
27021
27076
|
validate: validateFieldValue({
|
|
@@ -27101,14 +27156,16 @@ var _QUESTION_TO_COMPONEN;
|
|
|
27101
27156
|
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) {
|
|
27102
27157
|
var question = _ref.question;
|
|
27103
27158
|
return /*#__PURE__*/React__default.createElement(EditorContent, {
|
|
27104
|
-
content:
|
|
27159
|
+
content: fieldWithFallback(question, "label", true)
|
|
27105
27160
|
});
|
|
27106
27161
|
}), _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);
|
|
27107
27162
|
|
|
27108
27163
|
var fieldWithFallback = function fieldWithFallback(question, fieldName) {
|
|
27164
|
+
var hasRichContent = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;
|
|
27109
27165
|
var fallback = question["".concat(fieldName, "Fallback")];
|
|
27110
27166
|
var field = question[fieldName];
|
|
27111
|
-
|
|
27167
|
+
var isFieldEmpty = hasRichContent ? isEditorEmpty(field) : isEmpty(field);
|
|
27168
|
+
return isFieldEmpty && isNotNil(fallback) ? fallback : field;
|
|
27112
27169
|
};
|
|
27113
27170
|
var getFieldComponent = function getFieldComponent(_ref) {
|
|
27114
27171
|
var kind = _ref.kind;
|