@bigbinary/neeto-form-frontend 2.2.0-beta2 → 2.2.0-beta3
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 +16 -0
- package/dist/index.cjs.js +34 -34
- package/dist/index.cjs.js.map +1 -1
- package/dist/index.js +26 -28
- package/dist/index.js.map +1 -1
- package/package.json +6 -6
package/README.md
CHANGED
|
@@ -78,6 +78,13 @@ The engine adds setup for form on backend and allows us to attach forms to any m
|
|
|
78
78
|
|
|
79
79
|
### Customizability
|
|
80
80
|
|
|
81
|
+
#### `NeetoFormEngine::Customizable::Forms::Createable`
|
|
82
|
+
The engine supports customizing the default behavior of `Forms::CreateService` by overriding the supported methods in this concern.
|
|
83
|
+
|
|
84
|
+
#### Available methods:
|
|
85
|
+
1. `create_default_questions!`: If you want to use custom logic to create default questions, you can specify them using this method. `owner`, `form` and `params` will be available globally.
|
|
86
|
+
2. `additional_form_params`: If you want to include additional attributes while creating forms, you can specify them using this method. It takes one argument `params` which will be the form parameters passed from the front-end.
|
|
87
|
+
|
|
81
88
|
#### `NeetoFormEngine::Customizable::Questions::Createable`
|
|
82
89
|
The engine supports customizing the default behavior of `Questions::CreateService` by overriding the supported methods in this concern.
|
|
83
90
|
|
|
@@ -91,6 +98,15 @@ The engine adds setup for form on backend and allows us to attach forms to any m
|
|
|
91
98
|
#### Available constants:
|
|
92
99
|
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`.
|
|
93
100
|
|
|
101
|
+
#### `NeetoFormEngine::Customizable::QuestionResponses::Createable`
|
|
102
|
+
The engine supports customizing the default behavior of `QuestionResponses::CreateService` by overriding the supported methods in this concern.
|
|
103
|
+
|
|
104
|
+
#### Available methods:
|
|
105
|
+
1. `additional_initialization_logic`: If you want to initialize additional variables, you can specify them using this method.
|
|
106
|
+
2. `additional_process_actions`: If you want to perform any additional actions outside the transaction block, you can override this method.
|
|
107
|
+
3. `additional_create_submission_actions`: You can use this method to specify any additional logic that needs to be executed after creating submissions.
|
|
108
|
+
4. `additional_create_response_actions`: If you want to perform some additional actions on each of the responses, you can specify them using this method. This method receives `question` and `response_param` passed from the front-end as arguments.
|
|
109
|
+
|
|
94
110
|
## Frontend package
|
|
95
111
|
The frontend package allows us to create forms across neeto products.
|
|
96
112
|
|
package/dist/index.cjs.js
CHANGED
|
@@ -24,7 +24,7 @@ var ActionBlock = require('@bigbinary/neetoui/formik/ActionBlock');
|
|
|
24
24
|
var reactI18next = require('react-i18next');
|
|
25
25
|
var zustand = require('zustand');
|
|
26
26
|
require('@babel/runtime/helpers/typeof');
|
|
27
|
-
var
|
|
27
|
+
var utils$1 = require('@bigbinary/neeto-editor/utils');
|
|
28
28
|
var shallow = require('zustand/shallow');
|
|
29
29
|
var Alert = require('@bigbinary/neetoui/Alert');
|
|
30
30
|
var DOMPurify = require('dompurify');
|
|
@@ -36,6 +36,7 @@ var Pane = require('@bigbinary/neetoui/Pane');
|
|
|
36
36
|
var Form$2 = require('@bigbinary/neetoui/formik/Form');
|
|
37
37
|
var Select = require('@bigbinary/neetoui/formik/Select');
|
|
38
38
|
var Textarea = require('@bigbinary/neetoui/formik/Textarea');
|
|
39
|
+
var NeetoEditor = require('@bigbinary/neeto-editor/Editor');
|
|
39
40
|
var Switch = require('@bigbinary/neetoui/formik/Switch');
|
|
40
41
|
var Button$1 = require('@bigbinary/neetoui/Button');
|
|
41
42
|
var Accordion = require('@bigbinary/neetoui/Accordion');
|
|
@@ -52,6 +53,7 @@ var Toastr = require('@bigbinary/neetoui/Toastr');
|
|
|
52
53
|
var Spinner$2 = require('@bigbinary/neetoui/Spinner');
|
|
53
54
|
var dayjs = require('dayjs');
|
|
54
55
|
var libphonenumberJs = require('libphonenumber-js');
|
|
56
|
+
var EditorContent = require('@bigbinary/neeto-editor/EditorContent');
|
|
55
57
|
var NeetoUIMultiEmailInput = require('@bigbinary/neetoui/MultiEmailInput');
|
|
56
58
|
var PhoneNumber = require('@bigbinary/neeto-molecules/PhoneNumber');
|
|
57
59
|
var localeData = require('dayjs/plugin/localeData');
|
|
@@ -108,6 +110,7 @@ var Pane__default = /*#__PURE__*/_interopDefaultLegacy(Pane);
|
|
|
108
110
|
var Form__default = /*#__PURE__*/_interopDefaultLegacy(Form$2);
|
|
109
111
|
var Select__default = /*#__PURE__*/_interopDefaultLegacy(Select);
|
|
110
112
|
var Textarea__default = /*#__PURE__*/_interopDefaultLegacy(Textarea);
|
|
113
|
+
var NeetoEditor__default = /*#__PURE__*/_interopDefaultLegacy(NeetoEditor);
|
|
111
114
|
var Switch__default = /*#__PURE__*/_interopDefaultLegacy(Switch);
|
|
112
115
|
var Button__default = /*#__PURE__*/_interopDefaultLegacy(Button$1);
|
|
113
116
|
var Accordion__default = /*#__PURE__*/_interopDefaultLegacy(Accordion);
|
|
@@ -122,6 +125,7 @@ var useHotkeys__default = /*#__PURE__*/_interopDefaultLegacy(useHotkeys);
|
|
|
122
125
|
var Toastr__default = /*#__PURE__*/_interopDefaultLegacy(Toastr);
|
|
123
126
|
var Spinner__default = /*#__PURE__*/_interopDefaultLegacy(Spinner$2);
|
|
124
127
|
var dayjs__default = /*#__PURE__*/_interopDefaultLegacy(dayjs);
|
|
128
|
+
var EditorContent__default = /*#__PURE__*/_interopDefaultLegacy(EditorContent);
|
|
125
129
|
var NeetoUIMultiEmailInput__default = /*#__PURE__*/_interopDefaultLegacy(NeetoUIMultiEmailInput);
|
|
126
130
|
var localeData__default = /*#__PURE__*/_interopDefaultLegacy(localeData);
|
|
127
131
|
var utc__default = /*#__PURE__*/_interopDefaultLegacy(utc);
|
|
@@ -625,10 +629,10 @@ var handleQuestionMutationSuccess = function handleQuestionMutationSuccess(_ref)
|
|
|
625
629
|
var _args = _slicedToArray__default["default"](args, 1),
|
|
626
630
|
data = _args[0];
|
|
627
631
|
queryClient.invalidateQueries({
|
|
628
|
-
queryKey: [QUERY_KEYS.QUESTIONS, formId
|
|
632
|
+
queryKey: [QUERY_KEYS.QUESTIONS, formId]
|
|
629
633
|
});
|
|
630
634
|
queryClient.invalidateQueries({
|
|
631
|
-
queryKey: [QUERY_KEYS.QUESTIONS, "preview/".concat(formId)
|
|
635
|
+
queryKey: [QUERY_KEYS.QUESTIONS, "preview/".concat(formId)]
|
|
632
636
|
});
|
|
633
637
|
queryClient.setQueryData([QUERY_KEYS.QUESTIONS, formId, language], ramda.assoc("questions", data.questions));
|
|
634
638
|
queryClient.setQueryData([QUERY_KEYS.QUESTIONS, "preview/".concat(formId), language], ramda.assoc("questions", data.questions));
|
|
@@ -952,8 +956,17 @@ var DEFAULT_AVAILABLE_LANGUAGES = [{
|
|
|
952
956
|
var QUESTIONS_WITHOUT_FIELD_CODE = [PARAGRAPH$1, TERMS_AND_CONDITION$1, CONDITION$1, FILE_UPLOAD$3];
|
|
953
957
|
var QUESTIONS_INITIAL_VALUE = {
|
|
954
958
|
enabled: false,
|
|
955
|
-
questions: [
|
|
956
|
-
|
|
959
|
+
questions: [{
|
|
960
|
+
label: "",
|
|
961
|
+
kind: "text",
|
|
962
|
+
nodeId: "1"
|
|
963
|
+
}, {
|
|
964
|
+
label: "",
|
|
965
|
+
kind: "email",
|
|
966
|
+
nodeId: "2"
|
|
967
|
+
}],
|
|
968
|
+
title: "",
|
|
969
|
+
isQuestionsLoading: true
|
|
957
970
|
};
|
|
958
971
|
var RESERVED_FIELD_CODES = ["month", "date", "time"];
|
|
959
972
|
var SELECTABLE_KINDS = [RADIO$2, CHECKBOX$2, DROPDOWN$2];
|
|
@@ -989,7 +1002,7 @@ var fieldWithFallback = function fieldWithFallback(question, fieldName) {
|
|
|
989
1002
|
var hasRichContent = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;
|
|
990
1003
|
var fallback = question["".concat(fieldName, "Fallback")];
|
|
991
1004
|
var field = question[fieldName];
|
|
992
|
-
var isFieldEmpty = hasRichContent ?
|
|
1005
|
+
var isFieldEmpty = hasRichContent ? utils$1.isEditorEmpty(field) : ramda.isEmpty(field);
|
|
993
1006
|
return isFieldEmpty && ramda.isNotNil(fallback) ? fallback : field;
|
|
994
1007
|
};
|
|
995
1008
|
var getComponentDisplayName = function getComponentDisplayName(Component) {
|
|
@@ -2095,7 +2108,7 @@ var Editor = function Editor() {
|
|
|
2095
2108
|
});
|
|
2096
2109
|
return /*#__PURE__*/jsxRuntime.jsx("div", {
|
|
2097
2110
|
className: "w-full cursor-auto",
|
|
2098
|
-
children: /*#__PURE__*/jsxRuntime.jsx(
|
|
2111
|
+
children: /*#__PURE__*/jsxRuntime.jsx(NeetoEditor__default["default"], {
|
|
2099
2112
|
required: true,
|
|
2100
2113
|
error: touched ? error : "",
|
|
2101
2114
|
id: "editor",
|
|
@@ -2293,7 +2306,7 @@ var formValidationSchema = yup__namespace.object().shape({
|
|
|
2293
2306
|
})),
|
|
2294
2307
|
label: yup__namespace.string().when("kind", function (kind, schema) {
|
|
2295
2308
|
return ramda.includes(kind, RICH_TEXT_QUESTIONS) ? schema.test("required", richTextFieldMissingErrorMessage(kind), function (value) {
|
|
2296
|
-
return !
|
|
2309
|
+
return !utils$1.isEditorEmpty(value);
|
|
2297
2310
|
}) : requiredLabelValidation(schema, i18next.t("neetoForm.questions.common.questionFields.field.question"));
|
|
2298
2311
|
}),
|
|
2299
2312
|
fieldCode: yup__namespace.string().trim().notOneOf(RESERVED_FIELD_CODES, i18next.t("neetoForm.error.invalidFieldCode")).when("kind", function (kind, schema) {
|
|
@@ -3186,22 +3199,11 @@ var BuildForm = function BuildForm(_ref) {
|
|
|
3186
3199
|
isReordering = _useReorderQuestions.isPending;
|
|
3187
3200
|
var _useFetchQuestions = useFetchQuestions({
|
|
3188
3201
|
formId: id,
|
|
3189
|
-
language: selectedLanguage
|
|
3190
|
-
placeholderData: {
|
|
3191
|
-
isQuestionsLoading: true,
|
|
3192
|
-
questions: [{
|
|
3193
|
-
label: "",
|
|
3194
|
-
kind: "text",
|
|
3195
|
-
nodeId: "1"
|
|
3196
|
-
}, {
|
|
3197
|
-
label: "",
|
|
3198
|
-
kind: "email",
|
|
3199
|
-
nodeId: "2"
|
|
3200
|
-
}]
|
|
3201
|
-
}
|
|
3202
|
+
language: selectedLanguage
|
|
3202
3203
|
}),
|
|
3203
3204
|
data = _useFetchQuestions.data,
|
|
3204
|
-
isLoading = _useFetchQuestions.isLoading
|
|
3205
|
+
isLoading = _useFetchQuestions.isLoading,
|
|
3206
|
+
isQuestionsPending = _useFetchQuestions.isPending;
|
|
3205
3207
|
var _ref2 = data || QUESTIONS_INITIAL_VALUE,
|
|
3206
3208
|
isFormEnabled = _ref2.enabled,
|
|
3207
3209
|
savedTitle = _ref2.title,
|
|
@@ -3212,7 +3214,7 @@ var BuildForm = function BuildForm(_ref) {
|
|
|
3212
3214
|
onUpdate === null || onUpdate === void 0 || onUpdate(data);
|
|
3213
3215
|
}
|
|
3214
3216
|
}, [data]);
|
|
3215
|
-
if (isLoading || showLoader && isQuestionsLoading) {
|
|
3217
|
+
if (isLoading || showLoader && isQuestionsLoading && !isQuestionsPending) {
|
|
3216
3218
|
return /*#__PURE__*/jsxRuntime.jsx("div", {
|
|
3217
3219
|
className: "flex h-full w-full items-center justify-center py-6",
|
|
3218
3220
|
children: /*#__PURE__*/jsxRuntime.jsx(PageLoader__default["default"], {})
|
|
@@ -3296,7 +3298,7 @@ var BuildForm = function BuildForm(_ref) {
|
|
|
3296
3298
|
}
|
|
3297
3299
|
}));
|
|
3298
3300
|
}
|
|
3299
|
-
}), isQuestionsLoading && /*#__PURE__*/jsxRuntime.jsx("div", {
|
|
3301
|
+
}), isQuestionsLoading && !isQuestionsPending && /*#__PURE__*/jsxRuntime.jsx("div", {
|
|
3300
3302
|
className: "neeto-ui-bg-white absolute inset-0 flex items-center justify-center",
|
|
3301
3303
|
children: /*#__PURE__*/jsxRuntime.jsx(PageLoader__default["default"], {})
|
|
3302
3304
|
})]
|
|
@@ -3677,7 +3679,7 @@ var validateMultiEmailField = function validateMultiEmailField(_ref11) {
|
|
|
3677
3679
|
return schema;
|
|
3678
3680
|
};
|
|
3679
3681
|
var editorHasValue = function editorHasValue(content) {
|
|
3680
|
-
return !
|
|
3682
|
+
return !utils$1.isEditorEmpty(content);
|
|
3681
3683
|
};
|
|
3682
3684
|
var validateRichTextField = function validateRichTextField(_ref12) {
|
|
3683
3685
|
var isRequired = _ref12.isRequired;
|
|
@@ -13828,7 +13830,7 @@ var RichTextEditor = function RichTextEditor(_ref) {
|
|
|
13828
13830
|
var field = _ref2.field,
|
|
13829
13831
|
form = _ref2.form,
|
|
13830
13832
|
meta = _ref2.meta;
|
|
13831
|
-
return /*#__PURE__*/jsxRuntime.jsx(
|
|
13833
|
+
return /*#__PURE__*/jsxRuntime.jsx(NeetoEditor__default["default"], _objectSpread$8({
|
|
13832
13834
|
className: "neeto-form-engine-rich-text-input",
|
|
13833
13835
|
error: meta.touched ? meta.error : "",
|
|
13834
13836
|
initialValue: field.value,
|
|
@@ -13985,7 +13987,7 @@ var TermsField = function TermsField(_ref) {
|
|
|
13985
13987
|
})), {}, {
|
|
13986
13988
|
checked: field.value,
|
|
13987
13989
|
error: meta.touched ? meta.error : "",
|
|
13988
|
-
children: /*#__PURE__*/jsxRuntime.jsx(
|
|
13990
|
+
children: /*#__PURE__*/jsxRuntime.jsx(EditorContent__default["default"], {
|
|
13989
13991
|
content: label
|
|
13990
13992
|
})
|
|
13991
13993
|
}))
|
|
@@ -14051,7 +14053,7 @@ var TextField = function TextField(_ref) {
|
|
|
14051
14053
|
var _QUESTION_TO_COMPONEN;
|
|
14052
14054
|
var QUESTION_TO_COMPONENT_MAP = (_QUESTION_TO_COMPONEN = {}, _defineProperty__default["default"](_QUESTION_TO_COMPONEN, QUESTION_KIND.TEXT.value, TextField), _defineProperty__default["default"](_QUESTION_TO_COMPONEN, QUESTION_KIND.NAME.value, NameField), _defineProperty__default["default"](_QUESTION_TO_COMPONEN, QUESTION_KIND.EMAIL.value, EmailField), _defineProperty__default["default"](_QUESTION_TO_COMPONEN, QUESTION_KIND.INTEGER.value, TextField), _defineProperty__default["default"](_QUESTION_TO_COMPONEN, QUESTION_KIND.DECIMAL.value, TextField), _defineProperty__default["default"](_QUESTION_TO_COMPONEN, QUESTION_KIND.PHONE.value, PhoneNumberField), _defineProperty__default["default"](_QUESTION_TO_COMPONEN, QUESTION_KIND.QUESTION.value, TextField), _defineProperty__default["default"](_QUESTION_TO_COMPONEN, QUESTION_KIND.TEXTAREA.value, TextField), _defineProperty__default["default"](_QUESTION_TO_COMPONEN, QUESTION_KIND.CHECKBOX.value, OptionsField), _defineProperty__default["default"](_QUESTION_TO_COMPONEN, QUESTION_KIND.RADIO.value, OptionsField), _defineProperty__default["default"](_QUESTION_TO_COMPONEN, QUESTION_KIND.DROPDOWN.value, OptionsField), _defineProperty__default["default"](_QUESTION_TO_COMPONEN, QUESTION_KIND.RATING.value, RatingField), _defineProperty__default["default"](_QUESTION_TO_COMPONEN, QUESTION_KIND.PARAGRAPH.value, function (_ref) {
|
|
14053
14055
|
var question = _ref.question;
|
|
14054
|
-
return /*#__PURE__*/jsxRuntime.jsx(
|
|
14056
|
+
return /*#__PURE__*/jsxRuntime.jsx(EditorContent__default["default"], {
|
|
14055
14057
|
content: fieldWithFallback(question, "label", true)
|
|
14056
14058
|
});
|
|
14057
14059
|
}), _defineProperty__default["default"](_QUESTION_TO_COMPONEN, QUESTION_KIND.TERMS.value, TermsField), _defineProperty__default["default"](_QUESTION_TO_COMPONEN, QUESTION_KIND.DATE.value, DateField), _defineProperty__default["default"](_QUESTION_TO_COMPONEN, QUESTION_KIND.STAR_RATING.value, StarRatingField), _defineProperty__default["default"](_QUESTION_TO_COMPONEN, QUESTION_KIND.ADDITIONAL_GUESTS.value, MultipleEmailInput), _defineProperty__default["default"](_QUESTION_TO_COMPONEN, QUESTION_KIND.RICH_TEXT.value, RichTextEditor), _defineProperty__default["default"](_QUESTION_TO_COMPONEN, QUESTION_KIND.CONDITION.value, ConditionField), _defineProperty__default["default"](_QUESTION_TO_COMPONEN, QUESTION_KIND.FILE_UPLOAD.value, FileUploadField), _QUESTION_TO_COMPONEN);
|
|
@@ -14387,15 +14389,13 @@ var ExternalForm = function ExternalForm(_ref) {
|
|
|
14387
14389
|
var _useForm = useForm({
|
|
14388
14390
|
formId: formId,
|
|
14389
14391
|
language: language,
|
|
14390
|
-
enabled: !preview
|
|
14391
|
-
placeholderData: {
|
|
14392
|
-
isQuestionsLoading: true
|
|
14393
|
-
}
|
|
14392
|
+
enabled: !preview
|
|
14394
14393
|
}),
|
|
14395
14394
|
_useForm$data = _useForm.data,
|
|
14396
14395
|
form = _useForm$data === void 0 ? {
|
|
14397
14396
|
title: "",
|
|
14398
|
-
questions: []
|
|
14397
|
+
questions: [],
|
|
14398
|
+
isQuestionsLoading: true
|
|
14399
14399
|
} : _useForm$data,
|
|
14400
14400
|
isLoading = _useForm.isLoading;
|
|
14401
14401
|
var _queryClient$getQuery = queryClient.getQueryState([QUERY_KEYS.QUESTIONS, formId, language]),
|
|
@@ -17132,7 +17132,7 @@ var Submission = function Submission(_ref2) {
|
|
|
17132
17132
|
var renderSubmittedValue = function renderSubmittedValue(kind, value) {
|
|
17133
17133
|
switch (kind) {
|
|
17134
17134
|
case QUESTION_KIND.RICH_TEXT.value:
|
|
17135
|
-
return /*#__PURE__*/jsxRuntime.jsx(
|
|
17135
|
+
return /*#__PURE__*/jsxRuntime.jsx(EditorContent__default["default"], {
|
|
17136
17136
|
content: getEditorContent(getValue({
|
|
17137
17137
|
value: value,
|
|
17138
17138
|
kind: kind
|