@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 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 neetoEditor = require('@bigbinary/neeto-editor');
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, language]
632
+ queryKey: [QUERY_KEYS.QUESTIONS, formId]
629
633
  });
630
634
  queryClient.invalidateQueries({
631
- queryKey: [QUERY_KEYS.QUESTIONS, "preview/".concat(formId), language]
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
- title: ""
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 ? neetoEditor.isEditorEmpty(field) : ramda.isEmpty(field);
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(neetoEditor.Editor, {
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 !neetoEditor.isEditorEmpty(value);
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 !neetoEditor.isEditorEmpty(content);
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(neetoEditor.Editor, _objectSpread$8({
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(neetoEditor.EditorContent, {
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(neetoEditor.EditorContent, {
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(neetoEditor.EditorContent, {
17135
+ return /*#__PURE__*/jsxRuntime.jsx(EditorContent__default["default"], {
17136
17136
  content: getEditorContent(getValue({
17137
17137
  value: value,
17138
17138
  kind: kind