@bigbinary/neeto-form-frontend 3.3.2 → 3.4.0

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.
Files changed (62) hide show
  1. package/app/javascript/src/translations/en.json +3 -3
  2. package/dist/BuildForm.js +2358 -0
  3. package/dist/BuildForm.js.map +1 -0
  4. package/dist/ExternalForm.js +657 -0
  5. package/dist/ExternalForm.js.map +1 -0
  6. package/dist/NeetoFormProvider.js +11 -0
  7. package/dist/NeetoFormProvider.js.map +1 -0
  8. package/dist/Submission.js +2700 -0
  9. package/dist/Submission.js.map +1 -0
  10. package/dist/UrlBuilder.js +297 -0
  11. package/dist/UrlBuilder.js.map +1 -0
  12. package/dist/buildForm-4a5a5251.js +35 -0
  13. package/dist/buildForm-4a5a5251.js.map +1 -0
  14. package/dist/buildForm-77b32f08.js +42 -0
  15. package/dist/buildForm-77b32f08.js.map +1 -0
  16. package/dist/cjs/BuildForm.js +2416 -0
  17. package/dist/cjs/BuildForm.js.map +1 -0
  18. package/dist/cjs/ExternalForm.js +697 -0
  19. package/dist/cjs/ExternalForm.js.map +1 -0
  20. package/dist/cjs/NeetoFormProvider.js +13 -0
  21. package/dist/cjs/NeetoFormProvider.js.map +1 -0
  22. package/dist/cjs/Submission.js +2711 -0
  23. package/dist/cjs/Submission.js.map +1 -0
  24. package/dist/cjs/UrlBuilder.js +308 -0
  25. package/dist/cjs/UrlBuilder.js.map +1 -0
  26. package/dist/cjs/hooks.js +34 -0
  27. package/dist/cjs/hooks.js.map +1 -0
  28. package/dist/cjs/index.js +115 -0
  29. package/dist/cjs/index.js.map +1 -0
  30. package/dist/constants-9310a7c2.js +342 -0
  31. package/dist/constants-9310a7c2.js.map +1 -0
  32. package/dist/constants-f0f38e6f.js +378 -0
  33. package/dist/constants-f0f38e6f.js.map +1 -0
  34. package/dist/hooks.js +20 -0
  35. package/dist/hooks.js.map +1 -0
  36. package/dist/index-2664c3e7.js +39 -0
  37. package/dist/index-2664c3e7.js.map +1 -0
  38. package/dist/index-b6bb805c.js +46 -0
  39. package/dist/index-b6bb805c.js.map +1 -0
  40. package/dist/index.js +94 -9325
  41. package/dist/index.js.map +1 -1
  42. package/dist/main.css +12 -1
  43. package/dist/main.css.map +1 -1
  44. package/dist/no-questions-832318c3.js +487 -0
  45. package/dist/no-questions-832318c3.js.map +1 -0
  46. package/dist/no-questions-995fd77e.js +538 -0
  47. package/dist/no-questions-995fd77e.js.map +1 -0
  48. package/dist/useFormApi-ca36173e.js +492 -0
  49. package/dist/useFormApi-ca36173e.js.map +1 -0
  50. package/dist/useFormApi-d733cb8d.js +467 -0
  51. package/dist/useFormApi-d733cb8d.js.map +1 -0
  52. package/dist/useFormSubmission-866195bb.js +24 -0
  53. package/dist/useFormSubmission-866195bb.js.map +1 -0
  54. package/dist/useFormSubmission-f8866b84.js +22 -0
  55. package/dist/useFormSubmission-f8866b84.js.map +1 -0
  56. package/dist/utils-7000103c.js +2157 -0
  57. package/dist/utils-7000103c.js.map +1 -0
  58. package/dist/utils-a487b8ff.js +2221 -0
  59. package/dist/utils-a487b8ff.js.map +1 -0
  60. package/package.json +19 -7
  61. package/dist/index.cjs.js +0 -9424
  62. package/dist/index.cjs.js.map +0 -1
@@ -0,0 +1,2416 @@
1
+ 'use strict';
2
+
3
+ var _defineProperty = require('@babel/runtime/helpers/defineProperty');
4
+ var React = require('react');
5
+ var reactQuery = require('@tanstack/react-query');
6
+ var classnames = require('classnames');
7
+ var formik = require('formik');
8
+ var neetoCist = require('@bigbinary/neeto-cist');
9
+ var utils = require('@bigbinary/neeto-commons-frontend/utils');
10
+ var PageLoader = require('@bigbinary/neeto-molecules/PageLoader');
11
+ var ramda = require('ramda');
12
+ var useFormApi = require('../useFormApi-ca36173e.js');
13
+ var constants = require('../constants-f0f38e6f.js');
14
+ var noQuestions = require('../no-questions-995fd77e.js');
15
+ var _slicedToArray = require('@babel/runtime/helpers/slicedToArray');
16
+ var _objectWithoutProperties = require('@babel/runtime/helpers/objectWithoutProperties');
17
+ var dnd = require('@hello-pangea/dnd');
18
+ var reactUtils = require('@bigbinary/neeto-commons-frontend/react-utils');
19
+ var ActionBlock = require('@bigbinary/neetoui/formik/ActionBlock');
20
+ var reactI18next = require('react-i18next');
21
+ var buildForm = require('../buildForm-77b32f08.js');
22
+ var shallow = require('zustand/shallow');
23
+ var Alert = require('@bigbinary/neetoui/Alert');
24
+ var index = require('../index-b6bb805c.js');
25
+ var jsxRuntime = require('react/jsx-runtime');
26
+ var MoreDropdown = require('@bigbinary/neeto-molecules/MoreDropdown');
27
+ var Typography = require('@bigbinary/neetoui/Typography');
28
+ var Dropdown = require('@bigbinary/neetoui/Dropdown');
29
+ var Tooltip = require('@bigbinary/neetoui/Tooltip');
30
+ var i18next = require('i18next');
31
+ var _toConsumableArray = require('@babel/runtime/helpers/toConsumableArray');
32
+ var Pane = require('@bigbinary/neetoui/Pane');
33
+ var Form$2 = require('@bigbinary/neetoui/formik/Form');
34
+ var Select = require('@bigbinary/neetoui/formik/Select');
35
+ var Switch = require('@bigbinary/neetoui/formik/Switch');
36
+ var Textarea = require('@bigbinary/neetoui/formik/Textarea');
37
+ var NeetoEditor = require('@bigbinary/neeto-editor/Editor');
38
+ var Button = require('@bigbinary/neetoui/Button');
39
+ var Accordion = require('@bigbinary/neetoui/Accordion');
40
+ var Input = require('@bigbinary/neetoui/formik/Input');
41
+ var utils$1 = require('@bigbinary/neeto-editor/utils');
42
+ var yup = require('yup');
43
+ var Radio = require('@bigbinary/neetoui/formik/Radio');
44
+ var HelpPopover = require('@bigbinary/neeto-molecules/HelpPopover');
45
+ var Label = require('@bigbinary/neetoui/Label');
46
+ var CreatableSelect = require('react-select/creatable');
47
+ var _toArray = require('@babel/runtime/helpers/toArray');
48
+ var Close = require('@bigbinary/neeto-icons/Close');
49
+ var Tag = require('@bigbinary/neetoui/Tag');
50
+ var reactSelect = require('react-select');
51
+ var _asyncToGenerator = require('@babel/runtime/helpers/asyncToGenerator');
52
+ var _regeneratorRuntime = require('@babel/runtime/regenerator');
53
+ var Checkbox$1 = require('@bigbinary/neetoui/formik/Checkbox');
54
+ var Checkbox = require('@bigbinary/neetoui/Checkbox');
55
+ var Delete = require('@bigbinary/neeto-icons/Delete');
56
+ var Plus = require('@bigbinary/neeto-icons/Plus');
57
+ require('@bigbinary/neeto-commons-frontend/constants');
58
+ require('axios');
59
+ require('dompurify');
60
+ require('zustand');
61
+ require('@babel/runtime/helpers/typeof');
62
+
63
+ function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }
64
+
65
+ function _interopNamespace(e) {
66
+ if (e && e.__esModule) return e;
67
+ var n = Object.create(null);
68
+ if (e) {
69
+ Object.keys(e).forEach(function (k) {
70
+ if (k !== 'default') {
71
+ var d = Object.getOwnPropertyDescriptor(e, k);
72
+ Object.defineProperty(n, k, d.get ? d : {
73
+ enumerable: true,
74
+ get: function () { return e[k]; }
75
+ });
76
+ }
77
+ });
78
+ }
79
+ n["default"] = e;
80
+ return Object.freeze(n);
81
+ }
82
+
83
+ var _defineProperty__default = /*#__PURE__*/_interopDefaultLegacy(_defineProperty);
84
+ var classnames__default = /*#__PURE__*/_interopDefaultLegacy(classnames);
85
+ var PageLoader__default = /*#__PURE__*/_interopDefaultLegacy(PageLoader);
86
+ var _slicedToArray__default = /*#__PURE__*/_interopDefaultLegacy(_slicedToArray);
87
+ var _objectWithoutProperties__default = /*#__PURE__*/_interopDefaultLegacy(_objectWithoutProperties);
88
+ var ActionBlock__default = /*#__PURE__*/_interopDefaultLegacy(ActionBlock);
89
+ var Alert__default = /*#__PURE__*/_interopDefaultLegacy(Alert);
90
+ var MoreDropdown__default = /*#__PURE__*/_interopDefaultLegacy(MoreDropdown);
91
+ var Typography__default = /*#__PURE__*/_interopDefaultLegacy(Typography);
92
+ var Dropdown__default = /*#__PURE__*/_interopDefaultLegacy(Dropdown);
93
+ var Tooltip__default = /*#__PURE__*/_interopDefaultLegacy(Tooltip);
94
+ var _toConsumableArray__default = /*#__PURE__*/_interopDefaultLegacy(_toConsumableArray);
95
+ var Pane__default = /*#__PURE__*/_interopDefaultLegacy(Pane);
96
+ var Form__default = /*#__PURE__*/_interopDefaultLegacy(Form$2);
97
+ var Select__default = /*#__PURE__*/_interopDefaultLegacy(Select);
98
+ var Switch__default = /*#__PURE__*/_interopDefaultLegacy(Switch);
99
+ var Textarea__default = /*#__PURE__*/_interopDefaultLegacy(Textarea);
100
+ var NeetoEditor__default = /*#__PURE__*/_interopDefaultLegacy(NeetoEditor);
101
+ var Button__default = /*#__PURE__*/_interopDefaultLegacy(Button);
102
+ var Accordion__default = /*#__PURE__*/_interopDefaultLegacy(Accordion);
103
+ var Input__default = /*#__PURE__*/_interopDefaultLegacy(Input);
104
+ var yup__namespace = /*#__PURE__*/_interopNamespace(yup);
105
+ var Radio__default = /*#__PURE__*/_interopDefaultLegacy(Radio);
106
+ var HelpPopover__default = /*#__PURE__*/_interopDefaultLegacy(HelpPopover);
107
+ var Label__default = /*#__PURE__*/_interopDefaultLegacy(Label);
108
+ var CreatableSelect__default = /*#__PURE__*/_interopDefaultLegacy(CreatableSelect);
109
+ var _toArray__default = /*#__PURE__*/_interopDefaultLegacy(_toArray);
110
+ var Close__default = /*#__PURE__*/_interopDefaultLegacy(Close);
111
+ var Tag__default = /*#__PURE__*/_interopDefaultLegacy(Tag);
112
+ var _asyncToGenerator__default = /*#__PURE__*/_interopDefaultLegacy(_asyncToGenerator);
113
+ var _regeneratorRuntime__default = /*#__PURE__*/_interopDefaultLegacy(_regeneratorRuntime);
114
+ var Checkbox__default$1 = /*#__PURE__*/_interopDefaultLegacy(Checkbox$1);
115
+ var Checkbox__default = /*#__PURE__*/_interopDefaultLegacy(Checkbox);
116
+ var Delete__default = /*#__PURE__*/_interopDefaultLegacy(Delete);
117
+ var Plus__default = /*#__PURE__*/_interopDefaultLegacy(Plus);
118
+
119
+ var DeleteAlert = function DeleteAlert(_ref) {
120
+ var selectedQuestion = _ref.selectedQuestion,
121
+ isOpen = _ref.isOpen,
122
+ onClose = _ref.onClose,
123
+ languagesCount = _ref.languagesCount,
124
+ handleSelect = _ref.handleSelect;
125
+ var _useTranslation = reactI18next.useTranslation(),
126
+ t = _useTranslation.t;
127
+ var _useBuildFormStore = buildForm.useBuildFormStore(function (store) {
128
+ var _store$formState;
129
+ return {
130
+ selectedLanguage: (_store$formState = store["formState"]) === null || _store$formState === void 0 ? void 0 : _store$formState["selectedLanguage"]
131
+ };
132
+ }, shallow.shallow),
133
+ selectedLanguage = _useBuildFormStore.selectedLanguage;
134
+ var renderQuestionLabel = function renderQuestionLabel() {
135
+ var questionKind = selectedQuestion.kind;
136
+ var independentLabel = noQuestions.INDEPENDENT_LABELS_MAP[questionKind];
137
+ if (neetoCist.isPresent(independentLabel)) return independentLabel;
138
+ var questionLabel = index.fieldWithFallback(selectedQuestion, "label");
139
+ return neetoCist.truncate(questionLabel, 40);
140
+ };
141
+ var _useDeleteQuestion = useFormApi.useDeleteQuestion(selectedQuestion === null || selectedQuestion === void 0 ? void 0 : selectedQuestion.formId, selectedLanguage, {
142
+ onSuccess: function onSuccess() {
143
+ utils.showThumbsUpToastr();
144
+ onClose();
145
+ }
146
+ }),
147
+ deleteQuestion = _useDeleteQuestion.mutate,
148
+ isDeleting = _useDeleteQuestion.isPending;
149
+ var selectNextQuestion = function selectNextQuestion(questions) {
150
+ var selectedQuestionIndex = selectedQuestion.displayOrder;
151
+ var wasLastQuestion = ramda.equals(selectedQuestionIndex, questions.length);
152
+ var newDisplayOrder = wasLastQuestion ? selectedQuestionIndex - 1 : selectedQuestionIndex;
153
+ var newQuestion = neetoCist.findBy({
154
+ displayOrder: newDisplayOrder
155
+ }, questions);
156
+ handleSelect(newQuestion);
157
+ };
158
+ var handleSubmit = function handleSubmit() {
159
+ deleteQuestion(selectedQuestion.id, {
160
+ onSuccess: function onSuccess(_ref2) {
161
+ var questions = _ref2.questions;
162
+ return selectNextQuestion(questions);
163
+ }
164
+ });
165
+ };
166
+ return /*#__PURE__*/jsxRuntime.jsx(Alert__default["default"], {
167
+ isOpen: isOpen,
168
+ onClose: onClose,
169
+ isSubmitting: isDeleting,
170
+ submitButtonLabel: t("neetoForm.common.delete"),
171
+ title: t("neetoForm.questions.deleteAlert.title"),
172
+ message: neetoCist.isPresent(selectedQuestion) && /*#__PURE__*/jsxRuntime.jsx(reactI18next.Trans, {
173
+ i18nKey: "neetoForm.questions.deleteAlert.message",
174
+ values: {
175
+ count: languagesCount,
176
+ label: renderQuestionLabel()
177
+ }
178
+ }),
179
+ onSubmit: handleSubmit
180
+ });
181
+ };
182
+
183
+ var ChangeLanguageDropdown = function ChangeLanguageDropdown(_ref) {
184
+ var _findBy;
185
+ var currentLanguage = _ref.currentLanguage,
186
+ languages = _ref.languages,
187
+ onChange = _ref.onChange;
188
+ var _useState = React.useState(false),
189
+ _useState2 = _slicedToArray__default["default"](_useState, 2),
190
+ isUnsavedChangesAlertOpen = _useState2[0],
191
+ setIsUnsavedChangesAlertOpen = _useState2[1];
192
+ var _useState3 = React.useState(currentLanguage),
193
+ _useState4 = _slicedToArray__default["default"](_useState3, 2),
194
+ selectedLanguage = _useState4[0],
195
+ setSelectedLanguage = _useState4[1];
196
+ var _useTranslation = reactI18next.useTranslation(),
197
+ t = _useTranslation.t;
198
+ var _useFormikContext = formik.useFormikContext(),
199
+ dirty = _useFormikContext.dirty;
200
+ var languageChangeHandler = function languageChangeHandler(code) {
201
+ if (!dirty) {
202
+ onChange(code);
203
+ return;
204
+ }
205
+ setSelectedLanguage(code);
206
+ setIsUnsavedChangesAlertOpen(true);
207
+ };
208
+ var selectedLanguageName = (_findBy = neetoCist.findBy({
209
+ code: currentLanguage
210
+ }, languages)) === null || _findBy === void 0 ? void 0 : _findBy.name;
211
+ return /*#__PURE__*/jsxRuntime.jsxs(jsxRuntime.Fragment, {
212
+ children: [/*#__PURE__*/jsxRuntime.jsx(Tooltip__default["default"], {
213
+ content: t("neetoForm.questions.changeLanguage"),
214
+ children: /*#__PURE__*/jsxRuntime.jsx("div", {
215
+ children: /*#__PURE__*/jsxRuntime.jsx(Dropdown__default["default"], {
216
+ buttonStyle: "secondary",
217
+ label: selectedLanguageName,
218
+ children: /*#__PURE__*/jsxRuntime.jsx(Dropdown__default["default"].Menu, {
219
+ children: languages.map(function (_ref2) {
220
+ var code = _ref2.code,
221
+ name = _ref2.name;
222
+ return /*#__PURE__*/jsxRuntime.jsx(Dropdown__default["default"].MenuItem.Button, {
223
+ isActive: currentLanguage === code,
224
+ onClick: function onClick() {
225
+ return languageChangeHandler(code);
226
+ },
227
+ children: name
228
+ }, code);
229
+ })
230
+ })
231
+ })
232
+ })
233
+ }), /*#__PURE__*/jsxRuntime.jsx(Alert__default["default"], {
234
+ isOpen: isUnsavedChangesAlertOpen,
235
+ message: t("neetoForm.questions.unsavedChangesAlert.message"),
236
+ submitButtonLabel: t("neetoForm.questions.unsavedChangesAlert.discard"),
237
+ title: t("neetoForm.questions.unsavedChangesAlert.title"),
238
+ onClose: function onClose() {
239
+ return setIsUnsavedChangesAlertOpen(false);
240
+ },
241
+ onSubmit: function onSubmit() {
242
+ onChange(selectedLanguage);
243
+ setIsUnsavedChangesAlertOpen(false);
244
+ }
245
+ })]
246
+ });
247
+ };
248
+
249
+ var Overview = function Overview(_ref) {
250
+ var title = _ref.title,
251
+ description = _ref.description,
252
+ availableLanguages = _ref.availableLanguages,
253
+ selectedLanguage = _ref.selectedLanguage,
254
+ onLanguageChange = _ref.onLanguageChange,
255
+ additionalActionOptions = _ref.additionalActionOptions;
256
+ return /*#__PURE__*/jsxRuntime.jsxs("div", {
257
+ className: "neeto-form-nano-form-wrapper__overview mb-4 w-full flex-shrink-0 space-y-4 px-6 pt-6",
258
+ children: [/*#__PURE__*/jsxRuntime.jsxs("div", {
259
+ className: "flex items-center justify-between",
260
+ children: [/*#__PURE__*/jsxRuntime.jsx(Typography__default["default"], {
261
+ "data-cy": "neeto-form-engine-overview-title",
262
+ lineHeight: "neeto-ui-leading-normal",
263
+ style: "h2",
264
+ weight: "neeto-ui-font-semibold",
265
+ children: title
266
+ }), /*#__PURE__*/jsxRuntime.jsxs("div", {
267
+ className: "flex flex-shrink-0 items-center justify-between space-x-1",
268
+ children: [availableLanguages.length > 1 && /*#__PURE__*/jsxRuntime.jsx(ChangeLanguageDropdown, {
269
+ currentLanguage: selectedLanguage,
270
+ languages: availableLanguages,
271
+ onChange: onLanguageChange
272
+ }), neetoCist.isPresent(additionalActionOptions) && /*#__PURE__*/jsxRuntime.jsx(MoreDropdown__default["default"], {
273
+ dropdownButtonProps: {
274
+ isRounded: true,
275
+ style: "tertiary"
276
+ },
277
+ dropdownProps: {
278
+ strategy: "fixed",
279
+ position: "bottom-start"
280
+ },
281
+ menuItems: additionalActionOptions
282
+ })]
283
+ })]
284
+ }), /*#__PURE__*/jsxRuntime.jsx(Typography__default["default"], {
285
+ "data-cy": "neeto-form-engine-overview-description",
286
+ style: "body2",
287
+ children: description
288
+ })]
289
+ });
290
+ };
291
+
292
+ var validateEditorContent = function validateEditorContent(editorRef) {
293
+ return function () {
294
+ var _editorRef$current;
295
+ return (_editorRef$current = editorRef.current) !== null && _editorRef$current !== void 0 && (_editorRef$current = _editorRef$current.editor) !== null && _editorRef$current !== void 0 && _editorRef$current.isEmpty ? i18next.t("neetoForm.common.thisFieldIsRequired") : "";
296
+ };
297
+ };
298
+ var buildReorderPayload = function buildReorderPayload(questions) {
299
+ return ramda.reduce(function (acc, _ref) {
300
+ var id = _ref.id,
301
+ displayOrder = _ref.displayOrder;
302
+ return ramda.assoc(id, displayOrder, acc);
303
+ }, {}, questions);
304
+ };
305
+ var isRichTextQuestion = ramda.includes(ramda.__, noQuestions.RICH_TEXT_QUESTIONS);
306
+
307
+ var Card = function Card(_ref) {
308
+ var _ref$question = _ref.question,
309
+ question = _ref$question === void 0 ? {} : _ref$question,
310
+ allQuestionKinds = _ref.allQuestionKinds,
311
+ getActiveKindDetails = _ref.getActiveKindDetails,
312
+ isActive = _ref.isActive,
313
+ onSelect = _ref.onSelect,
314
+ onEdit = _ref.onEdit,
315
+ onClone = _ref.onClone,
316
+ onDelete = _ref.onDelete;
317
+ var _useTranslation = reactI18next.useTranslation(),
318
+ t = _useTranslation.t;
319
+ var _getActiveKindDetails = getActiveKindDetails({
320
+ allQuestionKinds: allQuestionKinds,
321
+ item: question
322
+ }),
323
+ kind = _getActiveKindDetails.kind,
324
+ isSingular = _getActiveKindDetails.isSingular;
325
+ var label = index.fieldWithFallback(question, "label");
326
+ var questionLabel = isRichTextQuestion(kind) ? noQuestions.htmlToPlainText(label) : label;
327
+ return /*#__PURE__*/jsxRuntime.jsxs("div", {
328
+ "data-cy": "neeto-form-engine-".concat(neetoCist.slugify(questionLabel)),
329
+ className: classnames__default["default"]("neeto-ui-rounded neeto-ui-border-gray-300 neeto-ui-bg-white neeto-form-nano-form__card flex h-10 w-full items-center justify-between border p-2", {
330
+ "neeto-ui-border-primary-500 neeto-form-nano-form__card--active": isActive
331
+ }),
332
+ onClick: function onClick() {
333
+ return onSelect(question);
334
+ },
335
+ children: [/*#__PURE__*/jsxRuntime.jsxs("div", {
336
+ className: "flex min-w-0 flex-grow items-center gap-1",
337
+ children: [/*#__PURE__*/jsxRuntime.jsx(noQuestions.Drag, {
338
+ className: "neeto-ui-text-gray-600 flex-shrink-0"
339
+ }), /*#__PURE__*/jsxRuntime.jsx(Typography__default["default"], {
340
+ className: "line-clamp-2 min-w-0 flex-grow truncate break-words",
341
+ lineHeight: "snug",
342
+ style: "body2",
343
+ weight: "medium",
344
+ children: questionLabel
345
+ })]
346
+ }), /*#__PURE__*/jsxRuntime.jsx(MoreDropdown__default["default"], {
347
+ dropdownButtonProps: {
348
+ className: "shrink-0"
349
+ },
350
+ dropdownProps: {
351
+ strategy: "fixed"
352
+ },
353
+ menuItems: [{
354
+ "data-cy": "edit-question",
355
+ key: "edit",
356
+ label: t("neetoForm.common.edit"),
357
+ onClick: onEdit
358
+ }, {
359
+ "data-cy": "clone-question",
360
+ key: "clone",
361
+ label: t("neetoForm.common.clone"),
362
+ isVisible: !isSingular && index.isFunction(onClone),
363
+ onClick: onClone
364
+ }, {
365
+ "data-cy": "delete-question",
366
+ key: "delete",
367
+ label: t("neetoForm.common.delete"),
368
+ isVisible: index.isFunction(onDelete),
369
+ onClick: onDelete
370
+ }]
371
+ })]
372
+ });
373
+ };
374
+
375
+ function ownKeys$e(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; }
376
+ function _objectSpread$e(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys$e(Object(t), !0).forEach(function (r) { _defineProperty__default["default"](e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys$e(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
377
+ var Questions = function Questions(_ref) {
378
+ var questions = _ref.questions,
379
+ isDeletable = _ref.isDeletable,
380
+ allQuestionKinds = _ref.allQuestionKinds,
381
+ getActiveKindDetails = _ref.getActiveKindDetails,
382
+ selectedQuestion = _ref.selectedQuestion,
383
+ onEdit = _ref.onEdit,
384
+ onClone = _ref.onClone,
385
+ onDelete = _ref.onDelete,
386
+ onSelect = _ref.onSelect;
387
+ return /*#__PURE__*/jsxRuntime.jsx(dnd.Droppable, {
388
+ droppableId: "droppable",
389
+ children: function children(_ref2) {
390
+ var droppableProps = _ref2.droppableProps,
391
+ placeholder = _ref2.placeholder,
392
+ innerRef = _ref2.innerRef;
393
+ return /*#__PURE__*/jsxRuntime.jsxs("div", _objectSpread$e(_objectSpread$e({}, droppableProps), {}, {
394
+ className: "space-y-2",
395
+ ref: innerRef,
396
+ children: [questions.map(function (question, index) {
397
+ var _question$id, _question$id2;
398
+ return /*#__PURE__*/React.createElement(dnd.Draggable, {
399
+ index: index,
400
+ draggableId: "question-".concat((_question$id = question.id) !== null && _question$id !== void 0 ? _question$id : question.nodeId),
401
+ key: "question-".concat((_question$id2 = question.id) !== null && _question$id2 !== void 0 ? _question$id2 : question.nodeId)
402
+ }, function (_ref3) {
403
+ var draggableProps = _ref3.draggableProps,
404
+ dragHandleProps = _ref3.dragHandleProps,
405
+ innerRef = _ref3.innerRef;
406
+ return /*#__PURE__*/jsxRuntime.jsx("div", _objectSpread$e(_objectSpread$e(_objectSpread$e({}, draggableProps), dragHandleProps), {}, {
407
+ ref: innerRef,
408
+ children: /*#__PURE__*/jsxRuntime.jsx(Card, {
409
+ allQuestionKinds: allQuestionKinds,
410
+ getActiveKindDetails: getActiveKindDetails,
411
+ onClone: onClone,
412
+ onEdit: onEdit,
413
+ onSelect: onSelect,
414
+ question: question,
415
+ isActive: ramda.equals(selectedQuestion, question),
416
+ onDelete: isDeletable(question) && onDelete
417
+ })
418
+ }));
419
+ });
420
+ }), placeholder]
421
+ }));
422
+ }
423
+ });
424
+ };
425
+
426
+ // Unique ID creation requires a high quality random # generator. In the browser we therefore
427
+ // require the crypto API and do not support built-in fallback to lower quality random number
428
+ // generators (like Math.random()).
429
+ let getRandomValues;
430
+ const rnds8 = new Uint8Array(16);
431
+ function rng() {
432
+ // lazy load so that environments that need to polyfill have a chance to do so
433
+ if (!getRandomValues) {
434
+ // getRandomValues needs to be invoked in a context where "this" is a Crypto implementation.
435
+ getRandomValues = typeof crypto !== 'undefined' && crypto.getRandomValues && crypto.getRandomValues.bind(crypto);
436
+
437
+ if (!getRandomValues) {
438
+ throw new Error('crypto.getRandomValues() not supported. See https://github.com/uuidjs/uuid#getrandomvalues-not-supported');
439
+ }
440
+ }
441
+
442
+ return getRandomValues(rnds8);
443
+ }
444
+
445
+ /**
446
+ * Convert array of 16 byte values to UUID string format of the form:
447
+ * XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX
448
+ */
449
+
450
+ const byteToHex = [];
451
+
452
+ for (let i = 0; i < 256; ++i) {
453
+ byteToHex.push((i + 0x100).toString(16).slice(1));
454
+ }
455
+
456
+ function unsafeStringify(arr, offset = 0) {
457
+ // Note: Be careful editing this code! It's been tuned for performance
458
+ // and works in ways you may not expect. See https://github.com/uuidjs/uuid/pull/434
459
+ return byteToHex[arr[offset + 0]] + byteToHex[arr[offset + 1]] + byteToHex[arr[offset + 2]] + byteToHex[arr[offset + 3]] + '-' + byteToHex[arr[offset + 4]] + byteToHex[arr[offset + 5]] + '-' + byteToHex[arr[offset + 6]] + byteToHex[arr[offset + 7]] + '-' + byteToHex[arr[offset + 8]] + byteToHex[arr[offset + 9]] + '-' + byteToHex[arr[offset + 10]] + byteToHex[arr[offset + 11]] + byteToHex[arr[offset + 12]] + byteToHex[arr[offset + 13]] + byteToHex[arr[offset + 14]] + byteToHex[arr[offset + 15]];
460
+ }
461
+
462
+ const randomUUID = typeof crypto !== 'undefined' && crypto.randomUUID && crypto.randomUUID.bind(crypto);
463
+ var native = {
464
+ randomUUID
465
+ };
466
+
467
+ function v4(options, buf, offset) {
468
+ if (native.randomUUID && !buf && !options) {
469
+ return native.randomUUID();
470
+ }
471
+
472
+ options = options || {};
473
+ const rnds = options.random || (options.rng || rng)(); // Per 4.4, set bits for version and `clock_seq_hi_and_reserved`
474
+
475
+ rnds[6] = rnds[6] & 0x0f | 0x40;
476
+ rnds[8] = rnds[8] & 0x3f | 0x80; // Copy bytes to buffer, if provided
477
+
478
+ if (buf) {
479
+ offset = offset || 0;
480
+
481
+ for (let i = 0; i < 16; ++i) {
482
+ buf[offset + i] = rnds[i];
483
+ }
484
+
485
+ return buf;
486
+ }
487
+
488
+ return unsafeStringify(rnds);
489
+ }
490
+
491
+ var moveItem = function moveItem(arr, sourceIndex, destinationIndex) {
492
+ if (sourceIndex === destinationIndex) return arr;
493
+ if (arr instanceof Array && arr[sourceIndex] !== undefined) {
494
+ var removedItem = arr.splice(sourceIndex, 1)[0];
495
+ arr.splice(destinationIndex, 0, removedItem);
496
+ }
497
+ return arr;
498
+ };
499
+ var arrayHelpers = {
500
+ moveItem: moveItem
501
+ };
502
+
503
+ function ownKeys$d(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; }
504
+ function _objectSpread$d(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys$d(Object(t), !0).forEach(function (r) { _defineProperty__default["default"](e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys$d(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
505
+ var isChoiceQuestion = function isChoiceQuestion(question) {
506
+ return ramda.includes(question === null || question === void 0 ? void 0 : question.kind, noQuestions.SELECTABLE_KINDS);
507
+ };
508
+ var generateUniqueFieldCode = function generateUniqueFieldCode(type, questions) {
509
+ var fieldCodes = ramda.pluck("fieldCode", neetoCist.filterBy({
510
+ kind: type
511
+ }, questions));
512
+ var uniqueNumber = fieldCodes.length;
513
+ var candidateFieldCode = "";
514
+ var prefix = noQuestions.RESERVED_FIELD_CODES.includes(type) ? "".concat(type, "_field") : type;
515
+
516
+ //We need to continue this while loop until we can generate a unique fieldCode
517
+ // eslint-disable-next-line no-constant-condition
518
+ while (true) {
519
+ candidateFieldCode = "".concat(prefix).concat(uniqueNumber || "");
520
+ if (!neetoCist.findBy({
521
+ fieldCode: candidateFieldCode
522
+ }, questions)) break;
523
+ uniqueNumber += 1;
524
+ }
525
+ return candidateFieldCode;
526
+ };
527
+ var isQuestionKindAlreadyActive = function isQuestionKindAlreadyActive(_ref) {
528
+ var activeQuestions = _ref.activeQuestions,
529
+ kind = _ref.kind;
530
+ return activeQuestions.some(function (activeQuestion) {
531
+ return activeQuestion.kind === kind.type && activeQuestion._destroy !== true;
532
+ });
533
+ };
534
+ var handleFieldDragEnd = function handleFieldDragEnd(_ref2) {
535
+ var items = _ref2.items,
536
+ setValue = _ref2.setValue,
537
+ source = _ref2.source,
538
+ destination = _ref2.destination;
539
+ if (!(destination && items instanceof Array)) return;
540
+ var nextItems = _toConsumableArray__default["default"](items);
541
+ arrayHelpers.moveItem(nextItems, source.index, destination.index);
542
+ var orderedItems = nextItems.map(function (item, index) {
543
+ return _objectSpread$d(_objectSpread$d({}, item), {}, {
544
+ displayOrder: index
545
+ });
546
+ });
547
+ setValue("questions", orderedItems);
548
+ };
549
+ var createFieldData = function createFieldData(_ref3) {
550
+ var _ref3$kind = _ref3.kind,
551
+ defaults = _ref3$kind.defaults,
552
+ type = _ref3$kind.type,
553
+ metadata = _ref3$kind.metadata,
554
+ _ref3$isRequired = _ref3.isRequired,
555
+ isRequired = _ref3$isRequired === void 0 ? undefined : _ref3$isRequired,
556
+ questions = _ref3.questions;
557
+ return _objectSpread$d(_objectSpread$d({}, defaults), {}, {
558
+ metadata: metadata,
559
+ isRequired: isRequired,
560
+ kind: type,
561
+ nodeId: v4(),
562
+ fieldCode: generateUniqueFieldCode(type, questions)
563
+ });
564
+ };
565
+ var duplicateFieldData = function duplicateFieldData(_ref4) {
566
+ var item = _ref4.item,
567
+ questionKinds = _ref4.questionKinds,
568
+ questions = _ref4.questions;
569
+ var questionKind = neetoCist.findBy({
570
+ type: item.kind
571
+ }, questionKinds);
572
+ var isRequired = item.isRequired,
573
+ kind = item.kind,
574
+ optionsAttributes = item.optionsAttributes;
575
+ var label = index.fieldWithFallback(item, "label");
576
+ var defaultAttributeNames = ramda.keys(questionKind.defaults || {});
577
+ var defaultAttributes = ramda.pick(defaultAttributeNames, item);
578
+ var newQuestionLabel = isRichTextQuestion(kind) ? label : i18next.t("neetoForm.common.clonedElementLabel", {
579
+ label: label
580
+ });
581
+ return _objectSpread$d(_objectSpread$d({}, defaultAttributes), {}, {
582
+ isRequired: isRequired,
583
+ kind: kind,
584
+ label: newQuestionLabel,
585
+ optionsAttributes: optionsAttributes && optionsAttributes.map(ramda.omit(["id"])),
586
+ nodeId: v4(),
587
+ fieldCode: generateUniqueFieldCode(item.kind, questions),
588
+ displayOrder: item.displayOrder + 1
589
+ });
590
+ };
591
+ var getAvailableQuestionKinds = function getAvailableQuestionKinds(_ref5) {
592
+ var allQuestionKinds = _ref5.allQuestionKinds,
593
+ _ref5$activeQuestions = _ref5.activeQuestions,
594
+ activeQuestions = _ref5$activeQuestions === void 0 ? [] : _ref5$activeQuestions,
595
+ isKindAlreadyActive = _ref5.isKindAlreadyActive;
596
+ if (ramda.isEmpty(activeQuestions)) return allQuestionKinds;
597
+ return ramda.reject(function (kind) {
598
+ var isSingularKind = kind.isSingular;
599
+ return isSingularKind && isKindAlreadyActive({
600
+ activeQuestions: activeQuestions,
601
+ kind: kind
602
+ });
603
+ }, allQuestionKinds);
604
+ };
605
+ var formatQuestionAttributesForClone = ramda.when(isChoiceQuestion, ramda.assoc("isCloning", true));
606
+
607
+ var AddFirstQuestion = function AddFirstQuestion(_ref) {
608
+ var children = _ref.children;
609
+ return /*#__PURE__*/jsxRuntime.jsxs("div", {
610
+ className: "flex h-full flex-col items-center justify-center py-8",
611
+ children: [/*#__PURE__*/jsxRuntime.jsx("div", {
612
+ className: "mb-6",
613
+ children: /*#__PURE__*/jsxRuntime.jsx(noQuestions.SvgNoQuestions, {})
614
+ }), children]
615
+ });
616
+ };
617
+
618
+ var NAME = noQuestions.QUESTION_TYPES.NAME,
619
+ PHONE = noQuestions.QUESTION_TYPES.PHONE,
620
+ EMAIL$1 = noQuestions.QUESTION_TYPES.EMAIL,
621
+ ADDITIONAL_GUESTS = noQuestions.QUESTION_TYPES.ADDITIONAL_GUESTS,
622
+ TEXT = noQuestions.QUESTION_TYPES.TEXT,
623
+ TEXTAREA = noQuestions.QUESTION_TYPES.TEXTAREA,
624
+ RICH_TEXT = noQuestions.QUESTION_TYPES.RICH_TEXT,
625
+ INTEGER = noQuestions.QUESTION_TYPES.INTEGER,
626
+ DECIMAL = noQuestions.QUESTION_TYPES.DECIMAL,
627
+ STAR_RATING$1 = noQuestions.QUESTION_TYPES.STAR_RATING,
628
+ RATING$1 = noQuestions.QUESTION_TYPES.RATING,
629
+ DATE = noQuestions.QUESTION_TYPES.DATE,
630
+ FILE_UPLOAD$1 = noQuestions.QUESTION_TYPES.FILE_UPLOAD,
631
+ CAPTCHA$1 = noQuestions.QUESTION_TYPES.CAPTCHA;
632
+ var QUESTIONS_WITH_ADDITIONAL_DATA = [].concat(_toConsumableArray__default["default"](noQuestions.SELECTABLE_KINDS), [STAR_RATING$1, RATING$1, FILE_UPLOAD$1, CAPTCHA$1, EMAIL$1]);
633
+ var QUESTIONS_WITH_PLACEHOLDERS = [NAME, PHONE, EMAIL$1, ADDITIONAL_GUESTS, TEXT, TEXTAREA, RICH_TEXT, INTEGER, DECIMAL, DATE];
634
+ var DEFAULT_PLACEHOLDERS = {
635
+ CHECKBOX: i18next.t("neetoForm.questions.common.questionFields.field.labelExample", {
636
+ what: i18next.t("neetoForm.common.hobbies")
637
+ }),
638
+ RADIO: i18next.t("neetoForm.questions.common.questionFields.field.labelExample", {
639
+ what: i18next.t("neetoForm.common.country")
640
+ }),
641
+ DROPDOWN: i18next.t("neetoForm.questions.common.questionFields.field.labelExample", {
642
+ what: i18next.t("neetoForm.common.company")
643
+ })
644
+ };
645
+ var INITIAL_VALUES = {
646
+ kind: "",
647
+ label: "",
648
+ fieldCode: ""
649
+ };
650
+
651
+ var _excluded$8 = ["label", "name"];
652
+ function ownKeys$c(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; }
653
+ function _objectSpread$c(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys$c(Object(t), !0).forEach(function (r) { _defineProperty__default["default"](e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys$c(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
654
+ var FormikAdaptiveInput = function FormikAdaptiveInput(_ref) {
655
+ var label = _ref.label,
656
+ name = _ref.name,
657
+ otherProps = _objectWithoutProperties__default["default"](_ref, _excluded$8);
658
+ var _useFormikContext = formik.useFormikContext(),
659
+ dirty = _useFormikContext.dirty,
660
+ isValid = _useFormikContext.isValid,
661
+ submitForm = _useFormikContext.submitForm;
662
+ var handleKeyDown = function handleKeyDown(event) {
663
+ if (event.key !== "Enter" || event.shiftKey) return;
664
+ event.preventDefault();
665
+ if (reactUtils.isMetaKeyPressed(event)) return;
666
+ dirty && isValid && submitForm();
667
+ };
668
+ var handleFocus = function handleFocus(element) {
669
+ var end = element.value.length;
670
+ element.setSelectionRange(end, end);
671
+ };
672
+ return /*#__PURE__*/jsxRuntime.jsx(Textarea__default["default"], _objectSpread$c({
673
+ label: label,
674
+ name: name,
675
+ className: "neeto-form-nano-adaptive-input",
676
+ resize: "none",
677
+ size: "small",
678
+ onFocus: function onFocus(_ref2) {
679
+ var target = _ref2.target;
680
+ return handleFocus(target);
681
+ },
682
+ onKeyDown: handleKeyDown
683
+ }, otherProps));
684
+ };
685
+
686
+ var Block = function Block(_ref) {
687
+ var title = _ref.title,
688
+ children = _ref.children,
689
+ dataCy = _ref.dataCy;
690
+ return /*#__PURE__*/jsxRuntime.jsxs("div", {
691
+ className: "mt-4 space-y-4",
692
+ "data-cy": dataCy,
693
+ children: [/*#__PURE__*/jsxRuntime.jsx("div", {
694
+ className: "flex items-center justify-between",
695
+ "data-cy": "properties-header",
696
+ children: /*#__PURE__*/jsxRuntime.jsx(Typography__default["default"], {
697
+ lineHeight: "normal",
698
+ style: "body1",
699
+ weight: "semibold",
700
+ children: title
701
+ })
702
+ }), /*#__PURE__*/jsxRuntime.jsx("div", {
703
+ className: "space-y-4",
704
+ children: children
705
+ })]
706
+ });
707
+ };
708
+
709
+ var useUpdateEditorContent = function useUpdateEditorContent(_ref) {
710
+ var editorRef = _ref.editorRef,
711
+ fieldName = _ref.fieldName,
712
+ value = _ref.value,
713
+ initialValue = _ref.initialValue,
714
+ fieldCode = _ref.fieldCode;
715
+ var initialStateRef = React.useRef({
716
+ language: "",
717
+ value: null
718
+ });
719
+ var _useBuildFormStore = buildForm.useBuildFormStore(function (store) {
720
+ return {
721
+ setFormData: store["setFormData"]
722
+ };
723
+ }, shallow.shallow),
724
+ setFormData = _useBuildFormStore.setFormData;
725
+ var _useBuildFormStore2 = buildForm.useBuildFormStore(function (store) {
726
+ var _store$formState, _store$formState2;
727
+ return {
728
+ formId: (_store$formState = store["formState"]) === null || _store$formState === void 0 ? void 0 : _store$formState["formId"],
729
+ selectedLanguage: (_store$formState2 = store["formState"]) === null || _store$formState2 === void 0 ? void 0 : _store$formState2["selectedLanguage"]
730
+ };
731
+ }, shallow.shallow),
732
+ formId = _useBuildFormStore2.formId,
733
+ language = _useBuildFormStore2.selectedLanguage;
734
+ var shouldReset = buildForm.useBuildFormStore(function (store) {
735
+ return store.formState.richTextFieldsToReset.includes(fieldCode);
736
+ });
737
+ var setEditorContent = function setEditorContent(content) {
738
+ var _editorRef$current$ed;
739
+ 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);
740
+ };
741
+ if (shouldReset) {
742
+ setEditorContent(initialValue);
743
+ setFormData(ramda.modify("richTextFieldsToReset", ramda.without([fieldCode])));
744
+ }
745
+ var _useFetchQuestions = useFormApi.useFetchQuestions({
746
+ formId: formId,
747
+ language: language
748
+ }),
749
+ data = _useFetchQuestions.data;
750
+ React.useEffect(function () {
751
+ if (!data) return;
752
+ var pathArray = fieldName.split(".").map(function (part) {
753
+ var parsedPart = parseInt(part);
754
+ return isNaN(parsedPart) ? part : parsedPart;
755
+ });
756
+ setEditorContent(ramda.path(pathArray, data));
757
+ }, [data]);
758
+ React.useEffect(function () {
759
+ if (initialStateRef.current["language"] !== language) {
760
+ initialStateRef.current["language"] = language;
761
+ initialStateRef.current["value"] = null;
762
+ return;
763
+ }
764
+ if (initialStateRef.current["value"] === null && value !== null) {
765
+ setEditorContent(value);
766
+ initialStateRef.current["value"] = value;
767
+ }
768
+ }, [language, value]);
769
+ };
770
+
771
+ var Editor = function Editor() {
772
+ var editorRef = React.useRef({
773
+ editor: {}
774
+ });
775
+ var _useFormikContext = formik.useFormikContext(),
776
+ fieldCode = _useFormikContext.values.fieldCode;
777
+ var fieldName = "label";
778
+ var _useField = formik.useField({
779
+ name: fieldName,
780
+ validate: validateEditorContent(editorRef)
781
+ }),
782
+ _useField2 = _slicedToArray__default["default"](_useField, 3),
783
+ value = _useField2[0].value,
784
+ _useField2$ = _useField2[1],
785
+ touched = _useField2$.touched,
786
+ error = _useField2$.error,
787
+ initialValue = _useField2$.initialValue,
788
+ _useField2$2 = _useField2[2],
789
+ setTouched = _useField2$2.setTouched,
790
+ setValue = _useField2$2.setValue;
791
+ useUpdateEditorContent({
792
+ editorRef: editorRef,
793
+ fieldName: fieldName,
794
+ value: value,
795
+ initialValue: initialValue,
796
+ fieldCode: fieldCode
797
+ });
798
+ return /*#__PURE__*/jsxRuntime.jsx("div", {
799
+ className: "w-full cursor-auto",
800
+ children: /*#__PURE__*/jsxRuntime.jsx(NeetoEditor__default["default"], {
801
+ required: true,
802
+ error: touched ? error : "",
803
+ id: "editor",
804
+ initialValue: value,
805
+ name: fieldName,
806
+ ref: editorRef,
807
+ onBlur: function onBlur() {
808
+ return setTouched(true);
809
+ },
810
+ onChange: setValue
811
+ })
812
+ });
813
+ };
814
+
815
+ var RequiredSwitch = reactUtils.withT(function (_ref) {
816
+ var t = _ref.t;
817
+ return /*#__PURE__*/jsxRuntime.jsx("div", {
818
+ className: "w-full",
819
+ children: /*#__PURE__*/jsxRuntime.jsx(Switch__default["default"], {
820
+ label: t("neetoForm.common.required"),
821
+ name: "isRequired"
822
+ })
823
+ });
824
+ });
825
+
826
+ var _excluded$7 = ["maxLength"];
827
+ function ownKeys$b(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; }
828
+ function _objectSpread$b(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys$b(Object(t), !0).forEach(function (r) { _defineProperty__default["default"](e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys$b(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
829
+ var InputWithMaxLength = function InputWithMaxLength(_ref) {
830
+ var maxLength = _ref.maxLength,
831
+ props = _objectWithoutProperties__default["default"](_ref, _excluded$7);
832
+ var _useField = formik.useField(props),
833
+ _useField2 = _slicedToArray__default["default"](_useField, 3),
834
+ value = _useField2[0].value,
835
+ setValue = _useField2[2].setValue;
836
+ React.useEffect(function () {
837
+ if (value && value.length > maxLength) {
838
+ setValue(value.substring(0, maxLength));
839
+ }
840
+ }, [value, maxLength, setValue]);
841
+ var shouldShowMaxLength = value && value.length > maxLength - 10;
842
+ return /*#__PURE__*/jsxRuntime.jsx(Input__default["default"], _objectSpread$b(_objectSpread$b({}, props), shouldShowMaxLength && {
843
+ maxLength: maxLength
844
+ }));
845
+ };
846
+
847
+ var FieldCode = reactUtils.withT(function (_ref) {
848
+ var helpDocUrl = _ref.helpDocUrl,
849
+ t = _ref.t;
850
+ return /*#__PURE__*/jsxRuntime.jsx(Accordion__default["default"], {
851
+ className: "neeto-form-nano-advanced-properties-accordion",
852
+ "data-cy": "advanced-properties-card",
853
+ children: /*#__PURE__*/jsxRuntime.jsx(Accordion__default["default"].Item, {
854
+ title: t("neetoForm.common.advancedProperties"),
855
+ children: /*#__PURE__*/jsxRuntime.jsx(InputWithMaxLength, {
856
+ required: true,
857
+ label: t("neetoForm.questions.common.questionFields.field.fieldCode"),
858
+ name: "fieldCode",
859
+ helpText: helpDocUrl && /*#__PURE__*/jsxRuntime.jsx(reactI18next.Trans, {
860
+ i18nKey: "neetoForm.questions.common.questionFields.field.fieldCodeHelpDescription",
861
+ components: {
862
+ Link: /*#__PURE__*/jsxRuntime.jsx(Button__default["default"], {
863
+ className: "text-xs",
864
+ href: helpDocUrl,
865
+ style: "link",
866
+ target: "_blank"
867
+ })
868
+ }
869
+ })
870
+ })
871
+ })
872
+ });
873
+ });
874
+
875
+ var Form$1 = function Form(_ref) {
876
+ var questions = _ref.questions,
877
+ initialFocusRef = _ref.initialFocusRef,
878
+ isRequiredField = _ref.isRequiredField,
879
+ isDisabledFieldLabel = _ref.isDisabledFieldLabel,
880
+ enableFieldCode = _ref.enableFieldCode,
881
+ allQuestionKinds = _ref.allQuestionKinds,
882
+ availableQuestionKinds = _ref.availableQuestionKinds,
883
+ getActiveKindDetails = _ref.getActiveKindDetails,
884
+ additionalQuestionKindPattern = _ref.additionalQuestionKindPattern,
885
+ fieldCodeHelpDocUrl = _ref.fieldCodeHelpDocUrl,
886
+ enableDomainRestriction = _ref.enableDomainRestriction,
887
+ domainRestrictionHelpDocUrl = _ref.domainRestrictionHelpDocUrl,
888
+ _ref$isEdit = _ref.isEdit,
889
+ isEdit = _ref$isEdit === void 0 ? false : _ref$isEdit;
890
+ var _useTranslation = reactI18next.useTranslation(),
891
+ t = _useTranslation.t;
892
+ var _useFormikContext = formik.useFormikContext(),
893
+ values = _useFormikContext.values,
894
+ setValues = _useFormikContext.setValues,
895
+ setErrors = _useFormikContext.setErrors,
896
+ setTouched = _useFormikContext.setTouched;
897
+ var kind = values.kind;
898
+ var questionKinds = isEdit ? allQuestionKinds : availableQuestionKinds;
899
+ var questionKindUniquenessPattern = ramda.mergeLeft(isEdit && additionalQuestionKindPattern ? additionalQuestionKindPattern(values) : {}, {
900
+ type: kind
901
+ });
902
+ var _useStateWithDependen = reactUtils.useStateWithDependency(getQuestionKind(questionKinds, questionKindUniquenessPattern), [kind]),
903
+ _useStateWithDependen2 = _slicedToArray__default["default"](_useStateWithDependen, 1),
904
+ questionKind = _useStateWithDependen2[0];
905
+ var _ref2 = questionKind ? getActiveKindDetails({
906
+ allQuestionKinds: allQuestionKinds,
907
+ item: questionKind
908
+ }) : {},
909
+ _ref2$questionProps = _ref2.questionProps,
910
+ questionProps = _ref2$questionProps === void 0 ? {} : _ref2$questionProps;
911
+ var isRequired = questionKind && isRequiredField(questionKind);
912
+ var isLabelDisabled = questionKind && isDisabledFieldLabel(questionKind);
913
+ var shouldShowPlaceholder = ramda.includes(kind, QUESTIONS_WITH_PLACEHOLDERS);
914
+ var hasAdditionalData = ramda.includes(kind, QUESTIONS_WITH_ADDITIONAL_DATA);
915
+ var shouldShowFieldCode = enableFieldCode && !ramda.includes(kind, noQuestions.QUESTIONS_WITHOUT_FIELD_CODE);
916
+ var shouldShowHideSwitch = !ramda.includes(kind, noQuestions.QUESTIONS_WITHOUT_FIELD_CODE);
917
+ var handleKindChange = function handleKindChange(option) {
918
+ var data = buildQuestionData(option);
919
+ updateFormState(data);
920
+ };
921
+ var buildQuestionData = function buildQuestionData(option) {
922
+ if (ramda.isNil(option)) {
923
+ return INITIAL_VALUES;
924
+ }
925
+ var label = option.label,
926
+ value = option.value;
927
+ var kind = extractKindFromOption(value);
928
+ var questionKind = getQuestionKind(availableQuestionKinds, {
929
+ type: kind,
930
+ label: label
931
+ });
932
+ return createFieldData({
933
+ kind: questionKind,
934
+ isRequired: isRequired,
935
+ questions: questions
936
+ });
937
+ };
938
+ var updateFormState = function updateFormState(data) {
939
+ setValues(data);
940
+ setErrors({});
941
+ setTouched({});
942
+ };
943
+ return /*#__PURE__*/jsxRuntime.jsx(Pane__default["default"].Body, {
944
+ children: /*#__PURE__*/jsxRuntime.jsxs("div", {
945
+ className: "w-full space-y-4",
946
+ children: [/*#__PURE__*/jsxRuntime.jsx(Select__default["default"], {
947
+ isClearable: true,
948
+ isSearchable: true,
949
+ defaultValue: buildDefaultValueForKind(questionKind),
950
+ innerRef: initialFocusRef,
951
+ isDisabled: isEdit,
952
+ name: "kind",
953
+ options: buildKindOptions(questionKinds),
954
+ label: t("neetoForm.questions.common.questionFields.field.questionType"),
955
+ onChange: handleKindChange
956
+ }), isRichTextQuestion(kind) ? /*#__PURE__*/jsxRuntime.jsx(Editor, {
957
+ isLabelDisabled: isLabelDisabled
958
+ }) : /*#__PURE__*/jsxRuntime.jsxs("div", {
959
+ className: "space-y-6",
960
+ children: [/*#__PURE__*/jsxRuntime.jsxs("div", {
961
+ className: "space-y-4",
962
+ children: [/*#__PURE__*/jsxRuntime.jsx(FormikAdaptiveInput, {
963
+ required: true,
964
+ disabled: isLabelDisabled,
965
+ name: "label",
966
+ placeholder: DEFAULT_PLACEHOLDERS[kind],
967
+ label: t("neetoForm.questions.common.questionFields.field.question")
968
+ }), shouldShowPlaceholder && /*#__PURE__*/jsxRuntime.jsx(FormikAdaptiveInput, {
969
+ name: "placeholder",
970
+ label: t("neetoForm.questions.common.questionFields.field.placeholder")
971
+ }), hasAdditionalData && renderAdditionalData({
972
+ kind: kind,
973
+ questionProps: questionProps,
974
+ domainRestrictionHelpDocUrl: domainRestrictionHelpDocUrl,
975
+ enableDomainRestriction: enableDomainRestriction
976
+ })]
977
+ }), !isRequired && /*#__PURE__*/jsxRuntime.jsxs(Block, {
978
+ dataCy: "settings-card",
979
+ title: t("neetoForm.common.settings"),
980
+ children: [/*#__PURE__*/jsxRuntime.jsx(RequiredSwitch, {}), shouldShowHideSwitch && /*#__PURE__*/jsxRuntime.jsx(Switch__default["default"], {
981
+ label: t("neetoForm.common.hideQuestion"),
982
+ name: "isHidden"
983
+ })]
984
+ }), shouldShowFieldCode && /*#__PURE__*/jsxRuntime.jsx(FieldCode, {
985
+ helpDocUrl: fieldCodeHelpDocUrl
986
+ })]
987
+ })]
988
+ })
989
+ });
990
+ };
991
+
992
+ /* eslint-disable @bigbinary/neeto/file-name-and-export-name-standards */
993
+ var requiredLabelValidation = function requiredLabelValidation(schema, field) {
994
+ return schema.trim().required(i18next.t("neetoForm.common.fieldReq", {
995
+ field: field
996
+ }));
997
+ };
998
+ var richTextFieldMissingErrorMessage = function richTextFieldMissingErrorMessage(kind) {
999
+ var field = ramda.equals(kind, noQuestions.QUESTION_TYPES.PARAGRAPH) ? i18next.t("neetoForm.fields.def") : i18next.t("neetoForm.fields.tcf");
1000
+ return i18next.t("neetoForm.error.fieldCantBeEmpty", {
1001
+ field: field
1002
+ });
1003
+ };
1004
+ var formValidationSchema = yup__namespace.object().shape({
1005
+ kind: yup__namespace.string().trim().required(i18next.t("neetoForm.common.fieldReq", {
1006
+ field: i18next.t("neetoForm.questions.common.questionFields.field.questionType")
1007
+ })),
1008
+ label: yup__namespace.string().when("kind", function (kind, schema) {
1009
+ return ramda.includes(kind, noQuestions.RICH_TEXT_QUESTIONS) ? schema.test("required", richTextFieldMissingErrorMessage(kind), function (value) {
1010
+ return !utils$1.isEditorEmpty(value);
1011
+ }) : requiredLabelValidation(schema, i18next.t("neetoForm.questions.common.questionFields.field.question"));
1012
+ }),
1013
+ fieldCode: yup__namespace.string().trim().notOneOf(noQuestions.RESERVED_FIELD_CODES, i18next.t("neetoForm.error.invalidFieldCode")).when("kind", function (kind, schema) {
1014
+ return ramda.includes(kind, noQuestions.QUESTIONS_WITHOUT_FIELD_CODE) ? schema.notRequired() : requiredLabelValidation(schema, i18next.t("neetoForm.questions.common.questionFields.field.fieldCode"));
1015
+ }),
1016
+ optionsAttributes: yup__namespace.array().when("_destroy", {
1017
+ is: true,
1018
+ otherwise: function otherwise(schema) {
1019
+ return schema.when("kind", function (kind, schema) {
1020
+ return ramda.includes(kind, noQuestions.SELECTABLE_KINDS) ? schema.of(yup__namespace.object().shape({
1021
+ label: requiredLabelValidation(yup__namespace.string(), i18next.t("neetoForm.questions.common.questionFields.field.option"))
1022
+ })) : schema.notRequired();
1023
+ });
1024
+ }
1025
+ }),
1026
+ highestRatingLabel: yup__namespace.string().nullable(),
1027
+ averageRatingLabel: yup__namespace.string().nullable(),
1028
+ lowestRatingLabel: yup__namespace.string().nullable()
1029
+ });
1030
+
1031
+ var _excluded$6 = ["question", "onClose", "questions", "handleSelect", "buildRequestArgs", "isOpen", "fieldCodeHelpDocUrl", "domainRestrictionHelpDocUrl"];
1032
+ function ownKeys$a(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; }
1033
+ function _objectSpread$a(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys$a(Object(t), !0).forEach(function (r) { _defineProperty__default["default"](e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys$a(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
1034
+ var Add = function Add(_ref) {
1035
+ var question = _ref.question,
1036
+ onClose = _ref.onClose,
1037
+ questions = _ref.questions,
1038
+ handleSelect = _ref.handleSelect,
1039
+ buildRequestArgs = _ref.buildRequestArgs,
1040
+ isOpen = _ref.isOpen,
1041
+ fieldCodeHelpDocUrl = _ref.fieldCodeHelpDocUrl,
1042
+ domainRestrictionHelpDocUrl = _ref.domainRestrictionHelpDocUrl,
1043
+ props = _objectWithoutProperties__default["default"](_ref, _excluded$6);
1044
+ var _useBuildFormStore = buildForm.useBuildFormStore(function (store) {
1045
+ var _store$formState, _store$formState2;
1046
+ return {
1047
+ formId: (_store$formState = store["formState"]) === null || _store$formState === void 0 ? void 0 : _store$formState["formId"],
1048
+ selectedLanguage: (_store$formState2 = store["formState"]) === null || _store$formState2 === void 0 ? void 0 : _store$formState2["selectedLanguage"]
1049
+ };
1050
+ }, shallow.shallow),
1051
+ formId = _useBuildFormStore.formId,
1052
+ language = _useBuildFormStore.selectedLanguage;
1053
+ var _useTranslation = reactI18next.useTranslation(),
1054
+ t = _useTranslation.t;
1055
+ var _useCreateQuestion = useFormApi.useCreateQuestion(formId, language, {
1056
+ onSuccess: function onSuccess() {
1057
+ utils.showThumbsUpToastr();
1058
+ onClose();
1059
+ }
1060
+ }),
1061
+ createQuestion = _useCreateQuestion.mutate,
1062
+ isCreating = _useCreateQuestion.isPending;
1063
+ var handleSubmit = function handleSubmit(values) {
1064
+ if (isCreating || !isOpen) return;
1065
+ var displayOrder = question ? question.displayOrder + 1 : questions.length;
1066
+ createQuestion(_objectSpread$a({
1067
+ language: language,
1068
+ neetoFormQuestion: ramda.mergeLeft({
1069
+ displayOrder: displayOrder
1070
+ }, values)
1071
+ }, buildRequestArgs), {
1072
+ onSuccess: function onSuccess(_ref2) {
1073
+ var questions = _ref2.questions;
1074
+ var newQuestion = neetoCist.findBy({
1075
+ displayOrder: displayOrder
1076
+ }, questions);
1077
+ handleSelect(newQuestion);
1078
+ }
1079
+ });
1080
+ };
1081
+ return /*#__PURE__*/jsxRuntime.jsxs(jsxRuntime.Fragment, {
1082
+ children: [/*#__PURE__*/jsxRuntime.jsx(Pane__default["default"].Header, {
1083
+ children: /*#__PURE__*/jsxRuntime.jsx(Typography__default["default"], {
1084
+ "data-cy": "add-question-pane-header",
1085
+ style: "h2",
1086
+ children: t("neetoForm.questions.common.primaryPanel.addQuestion")
1087
+ })
1088
+ }), /*#__PURE__*/jsxRuntime.jsx(Form__default["default"], {
1089
+ formikProps: {
1090
+ initialValues: INITIAL_VALUES,
1091
+ validationSchema: formValidationSchema,
1092
+ onSubmit: handleSubmit
1093
+ },
1094
+ children: /*#__PURE__*/jsxRuntime.jsxs(jsxRuntime.Fragment, {
1095
+ children: [/*#__PURE__*/jsxRuntime.jsx(Form$1, _objectSpread$a({}, _objectSpread$a(_objectSpread$a({}, props), {}, {
1096
+ domainRestrictionHelpDocUrl: domainRestrictionHelpDocUrl,
1097
+ fieldCodeHelpDocUrl: fieldCodeHelpDocUrl,
1098
+ question: question,
1099
+ questions: questions
1100
+ }))), /*#__PURE__*/jsxRuntime.jsx(Pane__default["default"].Footer, {
1101
+ children: /*#__PURE__*/jsxRuntime.jsx(ActionBlock__default["default"], {
1102
+ cancelButtonProps: {
1103
+ onClick: onClose
1104
+ },
1105
+ isSubmitting: isCreating
1106
+ })
1107
+ })]
1108
+ })
1109
+ })]
1110
+ });
1111
+ };
1112
+
1113
+ var _excluded$5 = ["question", "isOpen", "onClose", "fieldCodeHelpDocUrl", "domainRestrictionHelpDocUrl"];
1114
+ function ownKeys$9(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; }
1115
+ function _objectSpread$9(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys$9(Object(t), !0).forEach(function (r) { _defineProperty__default["default"](e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys$9(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
1116
+ var Edit = function Edit(_ref) {
1117
+ var question = _ref.question,
1118
+ isOpen = _ref.isOpen,
1119
+ onClose = _ref.onClose,
1120
+ fieldCodeHelpDocUrl = _ref.fieldCodeHelpDocUrl,
1121
+ domainRestrictionHelpDocUrl = _ref.domainRestrictionHelpDocUrl,
1122
+ props = _objectWithoutProperties__default["default"](_ref, _excluded$5);
1123
+ var _useTranslation = reactI18next.useTranslation(),
1124
+ t = _useTranslation.t;
1125
+ var _useBuildFormStore = buildForm.useBuildFormStore(function (store) {
1126
+ var _store$formState;
1127
+ return {
1128
+ selectedLanguage: (_store$formState = store["formState"]) === null || _store$formState === void 0 ? void 0 : _store$formState["selectedLanguage"]
1129
+ };
1130
+ }, shallow.shallow),
1131
+ language = _useBuildFormStore.selectedLanguage;
1132
+ var _useUpdateQuestion = useFormApi.useUpdateQuestion(question === null || question === void 0 ? void 0 : question.formId, language),
1133
+ updateQuestion = _useUpdateQuestion.mutate,
1134
+ isUpdating = _useUpdateQuestion.isPending;
1135
+ var handleSubmit = function handleSubmit(values, _ref2) {
1136
+ var setSubmitting = _ref2.setSubmitting;
1137
+ if (isUpdating || !isOpen) return;
1138
+ var payload = {
1139
+ language: language,
1140
+ neetoFormQuestion: values
1141
+ };
1142
+ updateQuestion({
1143
+ questionId: question.id,
1144
+ payload: payload
1145
+ }, {
1146
+ onSuccess: function onSuccess() {
1147
+ utils.showThumbsUpToastr();
1148
+ onClose();
1149
+ },
1150
+ onSettled: function onSettled() {
1151
+ return setSubmitting(false);
1152
+ }
1153
+ });
1154
+ };
1155
+ return /*#__PURE__*/jsxRuntime.jsxs(jsxRuntime.Fragment, {
1156
+ children: [/*#__PURE__*/jsxRuntime.jsx(Pane__default["default"].Header, {
1157
+ children: /*#__PURE__*/jsxRuntime.jsx(Typography__default["default"], {
1158
+ "data-cy": "edit-question-pane-header",
1159
+ style: "h2",
1160
+ children: t("neetoForm.questions.common.editQuestion")
1161
+ })
1162
+ }), /*#__PURE__*/jsxRuntime.jsx(Form__default["default"], {
1163
+ formikProps: {
1164
+ initialValues: question,
1165
+ validationSchema: formValidationSchema,
1166
+ onSubmit: handleSubmit
1167
+ },
1168
+ children: /*#__PURE__*/jsxRuntime.jsxs(jsxRuntime.Fragment, {
1169
+ children: [/*#__PURE__*/jsxRuntime.jsx(Form$1, _objectSpread$9(_objectSpread$9({}, _objectSpread$9({
1170
+ domainRestrictionHelpDocUrl: domainRestrictionHelpDocUrl,
1171
+ fieldCodeHelpDocUrl: fieldCodeHelpDocUrl,
1172
+ question: question
1173
+ }, props)), {}, {
1174
+ isEdit: true
1175
+ })), /*#__PURE__*/jsxRuntime.jsx(Pane__default["default"].Footer, {
1176
+ children: /*#__PURE__*/jsxRuntime.jsx(ActionBlock__default["default"], {
1177
+ cancelButtonProps: {
1178
+ onClick: onClose
1179
+ },
1180
+ isSubmitting: isUpdating
1181
+ })
1182
+ })]
1183
+ })
1184
+ })]
1185
+ });
1186
+ };
1187
+
1188
+ var Captcha = reactUtils.withT(function (_ref) {
1189
+ var t = _ref.t;
1190
+ return /*#__PURE__*/jsxRuntime.jsxs(Radio__default["default"], {
1191
+ label: t("neetoForm.common.captchaType"),
1192
+ labelProps: {
1193
+ required: true
1194
+ },
1195
+ name: "variant",
1196
+ children: [/*#__PURE__*/jsxRuntime.jsx(Radio__default["default"].Item, {
1197
+ label: t("neetoForm.common.reCaptchaV2"),
1198
+ value: noQuestions.CAPTCHA_TYPES.RECAPTCHA_V2
1199
+ }), /*#__PURE__*/jsxRuntime.jsx(Radio__default["default"].Item, {
1200
+ label: t("neetoForm.common.mathCaptcha"),
1201
+ value: noQuestions.CAPTCHA_TYPES.MATH_CAPTCHA
1202
+ })]
1203
+ });
1204
+ });
1205
+
1206
+ var _excluded$4 = ["name", "title", "className"];
1207
+ function ownKeys$8(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; }
1208
+ function _objectSpread$8(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys$8(Object(t), !0).forEach(function (r) { _defineProperty__default["default"](e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys$8(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
1209
+ var SwitchBlock = function SwitchBlock(_ref) {
1210
+ var name = _ref.name,
1211
+ title = _ref.title,
1212
+ _ref$className = _ref.className,
1213
+ className = _ref$className === void 0 ? "" : _ref$className,
1214
+ otherProps = _objectWithoutProperties__default["default"](_ref, _excluded$4);
1215
+ return /*#__PURE__*/jsxRuntime.jsxs(Label__default["default"], {
1216
+ className: classnames__default["default"]("flex items-center justify-start gap-2 ", className),
1217
+ "data-cy": "neeto-form-engine-".concat(neetoCist.hyphenate(title), "-toggle-label"),
1218
+ children: [/*#__PURE__*/jsxRuntime.jsx(Switch__default["default"], _objectSpread$8(_objectSpread$8({}, _objectSpread$8(_objectSpread$8({}, otherProps), {}, {
1219
+ name: name
1220
+ })), {}, {
1221
+ "data-cy": "neeto-form-engine-".concat(neetoCist.hyphenate(title), "-switch")
1222
+ })), /*#__PURE__*/jsxRuntime.jsx(Typography__default["default"], {
1223
+ component: "span",
1224
+ style: "body1",
1225
+ children: title
1226
+ })]
1227
+ });
1228
+ };
1229
+
1230
+ var _excluded$3 = ["children"];
1231
+ function ownKeys$7(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; }
1232
+ function _objectSpread$7(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys$7(Object(t), !0).forEach(function (r) { _defineProperty__default["default"](e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys$7(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
1233
+ var STYLES = {
1234
+ border: {
1235
+ "default": "1px solid rgb(var(--neeto-ui-gray-400))",
1236
+ error: "1px solid rgb(var(--neeto-ui-error-800)) !important"
1237
+ },
1238
+ color: {
1239
+ "default": "rgb(var(--neeto-ui-gray-800))",
1240
+ error: "rgb(var(--neeto-ui-error-800)) !important"
1241
+ }
1242
+ };
1243
+ var MultiValueRemove = function MultiValueRemove(props) {
1244
+ return /*#__PURE__*/jsxRuntime.jsx(reactSelect.components.MultiValueRemove, _objectSpread$7(_objectSpread$7({}, props), {}, {
1245
+ innerProps: _objectSpread$7(_objectSpread$7({}, props.innerProps), {}, _defineProperty__default["default"]({}, "data-cy", "".concat(utils.hyphenize(props.data.label), "-remove-icon"))),
1246
+ children: /*#__PURE__*/jsxRuntime.jsx(Close__default["default"], {
1247
+ size: 16
1248
+ })
1249
+ }));
1250
+ };
1251
+ var ValueContainer = function ValueContainer(_ref) {
1252
+ var children = _ref.children,
1253
+ props = _objectWithoutProperties__default["default"](_ref, _excluded$3);
1254
+ var _useTranslation = reactI18next.useTranslation(),
1255
+ t = _useTranslation.t;
1256
+ var getValue = props.getValue,
1257
+ _props$selectProps = props.selectProps,
1258
+ isFocused = _props$selectProps.isFocused,
1259
+ visibleDomainsCount = _props$selectProps.visibleDomainsCount;
1260
+ var value = getValue();
1261
+ var _children = _toArray__default["default"](children),
1262
+ firstChild = _children[0],
1263
+ rest = _children.slice(1);
1264
+ var shouldCollapse = !isFocused && value.length > visibleDomainsCount;
1265
+ return /*#__PURE__*/jsxRuntime.jsxs(reactSelect.components.ValueContainer, _objectSpread$7(_objectSpread$7({}, props), {}, {
1266
+ innerProps: _objectSpread$7(_objectSpread$7({}, props.innerProps), {}, _defineProperty__default["default"]({}, "data-cy", "multi-domain-input-container")),
1267
+ children: [shouldCollapse ? firstChild.slice(0, visibleDomainsCount) : firstChild, shouldCollapse && /*#__PURE__*/jsxRuntime.jsx(Tag__default["default"], {
1268
+ style: "secondary",
1269
+ label: t("neetoForm.common.remainingItemsCount", {
1270
+ count: value.length - visibleDomainsCount
1271
+ })
1272
+ }), rest]
1273
+ }));
1274
+ };
1275
+ var ClearIndicator = function ClearIndicator(props) {
1276
+ return /*#__PURE__*/jsxRuntime.jsx(reactSelect.components.ClearIndicator, _objectSpread$7(_objectSpread$7({}, props), {}, {
1277
+ innerProps: _objectSpread$7(_objectSpread$7({}, props.innerProps), {}, _defineProperty__default["default"]({}, "data-cy", "clear-all-button")),
1278
+ children: /*#__PURE__*/jsxRuntime.jsx(Close__default["default"], {
1279
+ className: "cursor-pointer",
1280
+ size: 16
1281
+ })
1282
+ }));
1283
+ };
1284
+ var ERROR_MESSAGE_DELIMITER = ". ";
1285
+ var DELIMITER_KEYS = ["Enter", "Tab", ",", " "];
1286
+ var DOMAIN_SEPARATION_REGEX = /[^\s,]+/g;
1287
+ var FLEXIBLE_DOMAIN_REGEX = /^[a-zA-Z0-9-]+(\.[a-zA-Z0-9-]+)+$/;
1288
+ var VALID_DOMAIN_REGEX = /^(?:[a-zA-Z0-9-]{1,63}\.)+[a-zA-Z0-9-]{2,63}$/;
1289
+ var DOMAIN_VALIDATION_SCHEMA = yup__namespace.string().required(i18next.t("neetoForm.error.requiredField", {
1290
+ label: i18next.t("neetoForm.common.domain")
1291
+ })).test("verify domains", i18next.t("neetoForm.error.invalidDomain"), function (domain) {
1292
+ return VALID_DOMAIN_REGEX.test(domain);
1293
+ });
1294
+ var CUSTOM_STYLES = {
1295
+ input: ramda.assoc("overflow", "hidden"),
1296
+ multiValue: function multiValue(styles, _ref2) {
1297
+ var valid = _ref2.data.valid;
1298
+ return _objectSpread$7(_objectSpread$7({}, styles), {}, {
1299
+ border: valid ? STYLES.border["default"] : STYLES.border.error,
1300
+ color: valid ? STYLES.color["default"] : STYLES.color.error
1301
+ });
1302
+ }
1303
+ };
1304
+ var CUSTOM_COMPONENTS = {
1305
+ DropdownIndicator: null,
1306
+ MultiValueRemove: MultiValueRemove,
1307
+ ValueContainer: ValueContainer,
1308
+ ClearIndicator: ClearIndicator
1309
+ };
1310
+
1311
+ var removeDuplicateErrorMessages = ramda.pipe(ramda.filter(ramda.isNotNil), ramda.uniq, ramda.join(ERROR_MESSAGE_DELIMITER));
1312
+ var formatDomainInputOptions = function formatDomainInputOptions(domain) {
1313
+ var isValid;
1314
+ try {
1315
+ DOMAIN_VALIDATION_SCHEMA.validateSync(domain);
1316
+ isValid = true;
1317
+ } catch (_unused) {
1318
+ isValid = false;
1319
+ }
1320
+ return {
1321
+ label: domain,
1322
+ value: domain,
1323
+ valid: isValid
1324
+ };
1325
+ };
1326
+ var pruneDuplicates = ramda.pipe(ramda.pluck("value"), ramda.uniq, ramda.map(formatDomainInputOptions));
1327
+ var getValidDomains = function getValidDomains(domains) {
1328
+ return domains.filter(function (domain) {
1329
+ return domain === null || domain === void 0 ? void 0 : domain.valid;
1330
+ });
1331
+ };
1332
+ var getValidDomainsCount = function getValidDomainsCount(domains) {
1333
+ return getValidDomains(domains).length;
1334
+ };
1335
+ var formatErrorMessage = function formatErrorMessage(error) {
1336
+ if (typeof error === "string") return error;
1337
+ return removeDuplicateErrorMessages(error);
1338
+ };
1339
+
1340
+ var _excluded$2 = ["label", "value", "onChange", "error", "onBlur"];
1341
+ function ownKeys$6(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; }
1342
+ function _objectSpread$6(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys$6(Object(t), !0).forEach(function (r) { _defineProperty__default["default"](e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys$6(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
1343
+ var MultiDomainInput = function MultiDomainInput(_ref) {
1344
+ var _ref$label = _ref.label,
1345
+ label = _ref$label === void 0 ? "" : _ref$label,
1346
+ _ref$value = _ref.value,
1347
+ value = _ref$value === void 0 ? [] : _ref$value,
1348
+ _ref$onChange = _ref.onChange,
1349
+ onChange = _ref$onChange === void 0 ? neetoCist.noop : _ref$onChange,
1350
+ _ref$error = _ref.error,
1351
+ error = _ref$error === void 0 ? "" : _ref$error,
1352
+ _ref$onBlur = _ref.onBlur,
1353
+ onBlur = _ref$onBlur === void 0 ? neetoCist.noop : _ref$onBlur,
1354
+ otherProps = _objectWithoutProperties__default["default"](_ref, _excluded$2);
1355
+ var _useState = React.useState(""),
1356
+ _useState2 = _slicedToArray__default["default"](_useState, 2),
1357
+ inputValue = _useState2[0],
1358
+ setInputValue = _useState2[1];
1359
+ var _useState3 = React.useState(false),
1360
+ _useState4 = _slicedToArray__default["default"](_useState3, 2),
1361
+ isFocused = _useState4[0],
1362
+ setIsFocused = _useState4[1];
1363
+ var _useTranslation = reactI18next.useTranslation(),
1364
+ t = _useTranslation.t;
1365
+ var handleFilterDomains = function handleFilterDomains() {
1366
+ return onChange(getValidDomains(value));
1367
+ };
1368
+ var handleDomainChange = function handleDomainChange() {
1369
+ var inputValues = inputValue.match(DOMAIN_SEPARATION_REGEX) || [];
1370
+ var domainMatches = ramda.filter(ramda.test(FLEXIBLE_DOMAIN_REGEX), inputValues);
1371
+ var domains = domainMatches.map(formatDomainInputOptions);
1372
+ onChange(pruneDuplicates([].concat(_toConsumableArray__default["default"](value), _toConsumableArray__default["default"](domains))));
1373
+ setInputValue("");
1374
+ };
1375
+ var handleKeyDown = function handleKeyDown(event) {
1376
+ if (!inputValue) return;
1377
+ if (ramda.includes(event.key, DELIMITER_KEYS)) {
1378
+ handleDomainChange();
1379
+ event.preventDefault();
1380
+ event.stopPropagation();
1381
+ }
1382
+ };
1383
+ var onCreateOption = function onCreateOption(input) {
1384
+ var domain = formatDomainInputOptions(input);
1385
+ onChange(pruneDuplicates([].concat(_toConsumableArray__default["default"](value), [domain])));
1386
+ };
1387
+ var handleBlur = function handleBlur(event) {
1388
+ inputValue ? handleDomainChange() : onBlur(event);
1389
+ setIsFocused(false);
1390
+ };
1391
+ var isFilterDomainsLinkVisible = value.length > getValidDomainsCount(value);
1392
+ return /*#__PURE__*/jsxRuntime.jsxs("div", {
1393
+ className: "neeto-ui-input__wrapper neeto-ui-email-input__wrapper",
1394
+ children: [/*#__PURE__*/jsxRuntime.jsx("div", {
1395
+ className: "neeto-ui-email-input__label-wrapper",
1396
+ children: /*#__PURE__*/jsxRuntime.jsx(Label__default["default"], {
1397
+ className: "neeto-ui-email-input__label",
1398
+ "data-cy": "".concat(utils.hyphenize(label), "-input-label"),
1399
+ children: label
1400
+ })
1401
+ }), /*#__PURE__*/jsxRuntime.jsx(CreatableSelect__default["default"], _objectSpread$6({
1402
+ isMulti: true,
1403
+ required: true,
1404
+ classNamePrefix: "neeto-ui-react-select",
1405
+ components: CUSTOM_COMPONENTS,
1406
+ menuIsOpen: false,
1407
+ visibleDomainsCount: 3,
1408
+ className: classnames__default["default"]("neeto-ui-react-select__container neeto-ui-react-select__container--medium neeto-ui-email-input__select", {
1409
+ "neeto-ui-react-select__container--error": !!error
1410
+ }),
1411
+ styles: _objectSpread$6(_objectSpread$6({}, CUSTOM_STYLES), {}, {
1412
+ control: ramda.mergeLeft({
1413
+ maxHeight: "200px",
1414
+ overflowY: "auto"
1415
+ })
1416
+ }),
1417
+ onBlur: handleBlur,
1418
+ onFocus: function onFocus() {
1419
+ return setIsFocused(true);
1420
+ },
1421
+ onInputChange: setInputValue,
1422
+ onKeyDown: handleKeyDown
1423
+ }, _objectSpread$6({
1424
+ inputValue: inputValue,
1425
+ isFocused: isFocused,
1426
+ onChange: onChange,
1427
+ onCreateOption: onCreateOption,
1428
+ value: value
1429
+ }, otherProps))), !!error && /*#__PURE__*/jsxRuntime.jsxs("p", {
1430
+ className: "neeto-ui-input__error",
1431
+ "data-cy": "".concat(utils.hyphenize(label), "-input-error"),
1432
+ children: [formatErrorMessage(error), isFilterDomainsLinkVisible && /*#__PURE__*/jsxRuntime.jsxs("span", {
1433
+ className: "neeto-ui-font-semibold cursor-pointer",
1434
+ onClick: handleFilterDomains,
1435
+ children: [ERROR_MESSAGE_DELIMITER, t("neetoForm.domainRestriction.removeInvalidDomains")]
1436
+ })]
1437
+ }), /*#__PURE__*/jsxRuntime.jsx("p", {
1438
+ className: "neeto-ui-input__help-text",
1439
+ "data-cy": "".concat(utils.hyphenize(label), "-input-help"),
1440
+ children: t("neetoForm.domainRestriction.helpText")
1441
+ })]
1442
+ });
1443
+ };
1444
+
1445
+ var validateDomains = function validateDomains(value) {
1446
+ var schema = yup__namespace.array().of(yup__namespace.string().test("verify domains", i18next.t("neetoForm.error.invalidDomain"), function (domain) {
1447
+ return VALID_DOMAIN_REGEX.test(domain);
1448
+ })).ensure().compact().min(1, i18next.t("neetoForm.error.minOneEntity", {
1449
+ entity: i18next.t("neetoForm.common.domain")
1450
+ }));
1451
+
1452
+ // eslint-disable-next-line no-async-promise-executor
1453
+ return new Promise( /*#__PURE__*/function () {
1454
+ var _ref = _asyncToGenerator__default["default"]( /*#__PURE__*/_regeneratorRuntime__default["default"].mark(function _callee(resolve) {
1455
+ return _regeneratorRuntime__default["default"].wrap(function _callee$(_context) {
1456
+ while (1) switch (_context.prev = _context.next) {
1457
+ case 0:
1458
+ _context.prev = 0;
1459
+ _context.next = 3;
1460
+ return schema.validate(value);
1461
+ case 3:
1462
+ resolve(undefined);
1463
+ _context.next = 9;
1464
+ break;
1465
+ case 6:
1466
+ _context.prev = 6;
1467
+ _context.t0 = _context["catch"](0);
1468
+ resolve(_context.t0.message);
1469
+ case 9:
1470
+ case "end":
1471
+ return _context.stop();
1472
+ }
1473
+ }, _callee, null, [[0, 6]]);
1474
+ }));
1475
+ return function (_x) {
1476
+ return _ref.apply(this, arguments);
1477
+ };
1478
+ }());
1479
+ };
1480
+
1481
+ var RestrictedDomains = function RestrictedDomains() {
1482
+ var _useField = formik.useField({
1483
+ name: "restrictedDomains",
1484
+ validate: validateDomains
1485
+ }),
1486
+ _useField2 = _slicedToArray__default["default"](_useField, 3),
1487
+ _useField2$0$value = _useField2[0].value,
1488
+ domains = _useField2$0$value === void 0 ? [] : _useField2$0$value,
1489
+ meta = _useField2[1],
1490
+ _useField2$ = _useField2[2],
1491
+ setValue = _useField2$.setValue,
1492
+ setTouched = _useField2$.setTouched;
1493
+ var _useTranslation = reactI18next.useTranslation(),
1494
+ t = _useTranslation.t;
1495
+ var formattedDomains = ramda.map(formatDomainInputOptions, domains);
1496
+ return /*#__PURE__*/jsxRuntime.jsx("div", {
1497
+ className: "mb-4",
1498
+ children: /*#__PURE__*/jsxRuntime.jsx(MultiDomainInput, {
1499
+ error: meta.touched ? meta.error : "",
1500
+ label: t("neetoForm.domainRestriction.description"),
1501
+ name: "restrictedDomains",
1502
+ value: formattedDomains,
1503
+ onBlur: function onBlur() {
1504
+ return setTouched(true);
1505
+ },
1506
+ onChange: function onChange(value) {
1507
+ return setValue(neetoCist.nullSafe(ramda.pluck)("value", value));
1508
+ }
1509
+ })
1510
+ });
1511
+ };
1512
+
1513
+ function ownKeys$5(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; }
1514
+ function _objectSpread$5(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys$5(Object(t), !0).forEach(function (r) { _defineProperty__default["default"](e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys$5(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
1515
+ var Email = function Email(_ref) {
1516
+ var _ref$domainRestrictio = _ref.domainRestrictionHelpDocUrl,
1517
+ domainRestrictionHelpDocUrl = _ref$domainRestrictio === void 0 ? "" : _ref$domainRestrictio;
1518
+ var _useFormikContext = formik.useFormikContext(),
1519
+ _useFormikContext$val = _useFormikContext.values.isDomainRestrictionEnabled,
1520
+ isDomainRestrictionEnabled = _useFormikContext$val === void 0 ? false : _useFormikContext$val;
1521
+ var _useTranslation = reactI18next.useTranslation(),
1522
+ t = _useTranslation.t;
1523
+ return /*#__PURE__*/jsxRuntime.jsxs("div", {
1524
+ className: "flex flex-col space-y-4",
1525
+ children: [/*#__PURE__*/jsxRuntime.jsx(SwitchBlock, {
1526
+ className: "mt-4",
1527
+ name: "isDomainRestrictionEnabled",
1528
+ title: /*#__PURE__*/jsxRuntime.jsxs("div", {
1529
+ className: "flex gap-2",
1530
+ children: [t("neetoForm.domainRestriction.label"), /*#__PURE__*/jsxRuntime.jsx(HelpPopover__default["default"], _objectSpread$5({
1531
+ description: t("neetoForm.domainRestriction.popoverDescription"),
1532
+ popoverProps: {
1533
+ position: "top"
1534
+ }
1535
+ }, domainRestrictionHelpDocUrl && {
1536
+ helpLinkProps: {
1537
+ href: domainRestrictionHelpDocUrl
1538
+ }
1539
+ }))]
1540
+ })
1541
+ }), isDomainRestrictionEnabled && /*#__PURE__*/jsxRuntime.jsx(RestrictedDomains, {})]
1542
+ });
1543
+ };
1544
+
1545
+ var FileGroup = function FileGroup(_ref) {
1546
+ var name = _ref.name,
1547
+ label = _ref.label,
1548
+ checked = _ref.checked,
1549
+ handleAllowedFileTypesChange = _ref.handleAllowedFileTypesChange;
1550
+ return /*#__PURE__*/jsxRuntime.jsx(Checkbox__default["default"], {
1551
+ checked: checked,
1552
+ label: label,
1553
+ name: name,
1554
+ "data-cy": "neeto-form-engine-file-type-".concat(name),
1555
+ id: name,
1556
+ onChange: handleAllowedFileTypesChange
1557
+ });
1558
+ };
1559
+
1560
+ var buildFileTypesList = function buildFileTypesList(fileTypes) {
1561
+ return (fileTypes !== null && fileTypes !== void 0 ? fileTypes : "").split(", ");
1562
+ };
1563
+ var getAllowedFileTypes = function getAllowedFileTypes(_ref) {
1564
+ var type = _ref.type,
1565
+ isChecked = _ref.isChecked,
1566
+ allowedFileTypes = _ref.allowedFileTypes;
1567
+ var fileTypes = buildFileTypesList(allowedFileTypes);
1568
+ if (isChecked) {
1569
+ var fileTypesSet = new Set([].concat(_toConsumableArray__default["default"](noQuestions.FILE_TYPES_MAP[type]), _toConsumableArray__default["default"](fileTypes)));
1570
+ return Array.from(fileTypesSet).join(", ");
1571
+ }
1572
+ var newFileTypes = ramda.difference(fileTypes, noQuestions.FILE_TYPES_MAP[type]);
1573
+ return newFileTypes.join(", ");
1574
+ };
1575
+ var isFileTypeEnabled = function isFileTypeEnabled(type, allowedFileTypes) {
1576
+ var fileTypes = buildFileTypesList(allowedFileTypes);
1577
+ return ramda.isEmpty(ramda.difference(noQuestions.FILE_TYPES_MAP[type], fileTypes));
1578
+ };
1579
+
1580
+ var FileUpload = function FileUpload() {
1581
+ var _useTranslation = reactI18next.useTranslation(),
1582
+ t = _useTranslation.t;
1583
+ var _useFormikContext = formik.useFormikContext(),
1584
+ values = _useFormikContext.values,
1585
+ setFieldValue = _useFormikContext.setFieldValue;
1586
+ var allowedFileTypes = ramda.prop("allowedFileTypes", values);
1587
+ var handleAllowedFileTypesChange = function handleAllowedFileTypesChange(_ref) {
1588
+ var _ref$target = _ref.target,
1589
+ fileType = _ref$target.name,
1590
+ checked = _ref$target.checked;
1591
+ return setFieldValue("allowedFileTypes", getAllowedFileTypes({
1592
+ type: fileType,
1593
+ isChecked: checked,
1594
+ allowedFileTypes: allowedFileTypes
1595
+ }));
1596
+ };
1597
+ return /*#__PURE__*/jsxRuntime.jsxs(jsxRuntime.Fragment, {
1598
+ children: [/*#__PURE__*/jsxRuntime.jsx("div", {
1599
+ className: "w-full",
1600
+ children: /*#__PURE__*/jsxRuntime.jsx(Checkbox__default$1["default"], {
1601
+ id: "multipleFilesAllowed",
1602
+ label: t("neetoForm.fileUpload.enableMultipleFilesUpload"),
1603
+ name: "multipleFilesAllowed"
1604
+ })
1605
+ }), /*#__PURE__*/jsxRuntime.jsxs("div", {
1606
+ className: "flex flex-col space-y-3",
1607
+ children: [/*#__PURE__*/jsxRuntime.jsx(Typography__default["default"], {
1608
+ style: "body1",
1609
+ weight: "semibold",
1610
+ children: t("neetoForm.fileUpload.fileTypes")
1611
+ }), /*#__PURE__*/jsxRuntime.jsx("div", {
1612
+ className: "flex space-x-4",
1613
+ children: noQuestions.FILE_GROUPS.map(function (_ref2) {
1614
+ var name = _ref2.name,
1615
+ label = _ref2.label;
1616
+ return /*#__PURE__*/React.createElement(FileGroup, {
1617
+ handleAllowedFileTypesChange: handleAllowedFileTypesChange,
1618
+ label: label,
1619
+ name: name,
1620
+ checked: isFileTypeEnabled(name, allowedFileTypes),
1621
+ key: name
1622
+ });
1623
+ })
1624
+ })]
1625
+ })]
1626
+ });
1627
+ };
1628
+
1629
+ function ownKeys$4(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; }
1630
+ function _objectSpread$4(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys$4(Object(t), !0).forEach(function (r) { _defineProperty__default["default"](e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys$4(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
1631
+ var defaultConfig = {
1632
+ strict: true,
1633
+ matchKey: "value"
1634
+ };
1635
+ var findOptionByValue = function findOptionByValue(value) {
1636
+ var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : [];
1637
+ var config = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};
1638
+ var configObject = _objectSpread$4(_objectSpread$4({}, defaultConfig), config);
1639
+ var matchKey = configObject.matchKey,
1640
+ strict = configObject.strict;
1641
+ return options.find(function (option) {
1642
+ return (
1643
+ // eslint-disable-next-line eqeqeq
1644
+ strict ? option[matchKey] === value : option[matchKey] == value
1645
+ );
1646
+ });
1647
+ };
1648
+ var filterOptionsByValues = function filterOptionsByValues() {
1649
+ var values = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [];
1650
+ var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : [];
1651
+ var config = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};
1652
+ var configObject = _objectSpread$4(_objectSpread$4({}, defaultConfig), config);
1653
+ var matchKey = configObject.matchKey,
1654
+ strict = configObject.strict;
1655
+ return options.filter(function (option) {
1656
+ return values.some(function (value) {
1657
+ return (
1658
+ // eslint-disable-next-line eqeqeq
1659
+ strict ? option[matchKey] === value : option[matchKey] == value
1660
+ );
1661
+ });
1662
+ });
1663
+ };
1664
+ var destroyFromList = function destroyFromList(items, index) {
1665
+ var itemToRemove = items[index];
1666
+ if (itemToRemove) {
1667
+ var nextItems = _toConsumableArray__default["default"](items);
1668
+ nextItems.splice(index, 1);
1669
+ if (itemToRemove.id) {
1670
+ nextItems.push(_objectSpread$4(_objectSpread$4({}, itemToRemove), {}, {
1671
+ _destroy: true
1672
+ }));
1673
+ }
1674
+ return nextItems;
1675
+ }
1676
+ return items;
1677
+ };
1678
+ var insertToList = function insertToList(items, item, index) {
1679
+ var nextItems = _toConsumableArray__default["default"](items !== null && items !== void 0 ? items : []);
1680
+ nextItems.splice(index, 0, item);
1681
+ return nextItems;
1682
+ };
1683
+ var pushToList = function pushToList(items, item) {
1684
+ var nextItems = _toConsumableArray__default["default"](items !== null && items !== void 0 ? items : []);
1685
+ nextItems.push(item);
1686
+ return nextItems;
1687
+ };
1688
+ var formHelpers = {
1689
+ findOptionByValue: findOptionByValue,
1690
+ filterOptionsByValues: filterOptionsByValues,
1691
+ destroyFromList: destroyFromList,
1692
+ insertToList: insertToList,
1693
+ pushToList: pushToList
1694
+ };
1695
+
1696
+ function ownKeys$3(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; }
1697
+ function _objectSpread$3(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys$3(Object(t), !0).forEach(function (r) { _defineProperty__default["default"](e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys$3(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
1698
+ var Options = function Options(_ref) {
1699
+ var questionProps = _ref.questionProps;
1700
+ var _useTranslation = reactI18next.useTranslation(),
1701
+ t = _useTranslation.t;
1702
+ var _useBuildFormStore = buildForm.useBuildFormStore(function (store) {
1703
+ var _store$formState;
1704
+ return {
1705
+ selectedLanguage: (_store$formState = store["formState"]) === null || _store$formState === void 0 ? void 0 : _store$formState["selectedLanguage"]
1706
+ };
1707
+ }, shallow.shallow),
1708
+ selectedLanguage = _useBuildFormStore.selectedLanguage;
1709
+ var _useField = formik.useField("optionsAttributes"),
1710
+ _useField2 = _slicedToArray__default["default"](_useField, 3),
1711
+ optionsAttributes = _useField2[0].value;
1712
+ _useField2[1];
1713
+ var setOptionsAttributes = _useField2[2].setValue;
1714
+ var _ref2 = questionProps || {},
1715
+ _ref2$optionLabelProp = _ref2.optionLabelProps,
1716
+ optionLabelProps = _ref2$optionLabelProp === void 0 ? {} : _ref2$optionLabelProp,
1717
+ _ref2$freezeOptions = _ref2.freezeOptions,
1718
+ freezeOptions = _ref2$freezeOptions === void 0 ? false : _ref2$freezeOptions,
1719
+ _ref2$disableAddOptio = _ref2.disableAddOption,
1720
+ disableAddOption = _ref2$disableAddOptio === void 0 ? false : _ref2$disableAddOptio,
1721
+ _ref2$disableRemoveOp = _ref2.disableRemoveOption,
1722
+ disableRemoveOption = _ref2$disableRemoveOp === void 0 ? false : _ref2$disableRemoveOp;
1723
+ var handleRemoveOption = function handleRemoveOption(index) {
1724
+ var nextOptions = formHelpers.destroyFromList(optionsAttributes, index);
1725
+ setOptionsAttributes(nextOptions);
1726
+ };
1727
+ var isManageOptionDisabled = index.isFunction(freezeOptions) ? freezeOptions(selectedLanguage) : freezeOptions;
1728
+ var isAddOptionDisabled = disableAddOption || isManageOptionDisabled;
1729
+ var isRemoveOptionDisabled = disableRemoveOption || isManageOptionDisabled;
1730
+ return /*#__PURE__*/jsxRuntime.jsx("div", {
1731
+ className: "w-full",
1732
+ children: /*#__PURE__*/jsxRuntime.jsx(formik.FieldArray, {
1733
+ name: "optionsAttributes",
1734
+ children: function children(_ref3) {
1735
+ var handlePush = _ref3.handlePush;
1736
+ return /*#__PURE__*/jsxRuntime.jsxs(jsxRuntime.Fragment, {
1737
+ children: [/*#__PURE__*/jsxRuntime.jsx(Label__default["default"], _objectSpread$3(_objectSpread$3({
1738
+ className: "mb-1 block"
1739
+ }, optionLabelProps), {}, {
1740
+ children: t("neetoForm.questions.common.questionFields.field.options")
1741
+ })), /*#__PURE__*/jsxRuntime.jsx("div", {
1742
+ className: "flex w-2/3 flex-col space-y-2",
1743
+ children: optionsAttributes === null || optionsAttributes === void 0 ? void 0 : optionsAttributes.map(function (option, index) {
1744
+ var _option$id;
1745
+ return !option._destroy && /*#__PURE__*/jsxRuntime.jsxs("div", {
1746
+ className: "flex items-start gap-1",
1747
+ "data-cy": "neeto-form-engine-option-".concat(index),
1748
+ children: [/*#__PURE__*/jsxRuntime.jsx(InputWithMaxLength, {
1749
+ required: true,
1750
+ disabled: isManageOptionDisabled,
1751
+ name: "optionsAttributes.".concat(index, ".label"),
1752
+ placeholder: t("neetoForm.questions.common.questionFields.field.numberedOption", {
1753
+ number: index + 1
1754
+ })
1755
+ }), !isRemoveOptionDisabled && /*#__PURE__*/jsxRuntime.jsx(Button__default["default"], {
1756
+ "data-cy": "neeto-form-engine-delete-option-button",
1757
+ icon: Delete__default["default"],
1758
+ size: "small",
1759
+ style: "text",
1760
+ className: classnames__default["default"]({
1761
+ invisible: index < noQuestions.MINIMUM_OPTIONS
1762
+ }),
1763
+ tooltipProps: {
1764
+ position: "top",
1765
+ content: t("neetoForm.common.delete")
1766
+ },
1767
+ onClick: function onClick() {
1768
+ return handleRemoveOption(index);
1769
+ }
1770
+ })]
1771
+ }, "question-option-".concat((_option$id = option.id) !== null && _option$id !== void 0 ? _option$id : index));
1772
+ })
1773
+ }), !isAddOptionDisabled && /*#__PURE__*/jsxRuntime.jsx("div", {
1774
+ className: "mt-3 w-full",
1775
+ children: /*#__PURE__*/jsxRuntime.jsx(Button__default["default"], {
1776
+ "data-cy": "neeto-form-engine-add-option-button",
1777
+ icon: Plus__default["default"],
1778
+ iconPosition: "left",
1779
+ size: "small",
1780
+ style: "text",
1781
+ label: t("neetoForm.questions.common.questionFields.field.addOption"),
1782
+ onClick: handlePush({
1783
+ label: ""
1784
+ })
1785
+ })
1786
+ })]
1787
+ });
1788
+ }
1789
+ })
1790
+ });
1791
+ };
1792
+
1793
+ var RatingItem = function RatingItem(_ref) {
1794
+ var children = _ref.children;
1795
+ return /*#__PURE__*/jsxRuntime.jsx("div", {
1796
+ className: "flex w-16 flex-col items-center gap-3",
1797
+ children: children
1798
+ });
1799
+ };
1800
+ var Rating = function Rating() {
1801
+ return /*#__PURE__*/jsxRuntime.jsx("div", {
1802
+ className: "flex flex-col",
1803
+ children: /*#__PURE__*/jsxRuntime.jsx("div", {
1804
+ className: "w-full",
1805
+ children: /*#__PURE__*/jsxRuntime.jsx("div", {
1806
+ className: "flex gap-6",
1807
+ children: noQuestions.RATING_OPTIONS.map(function (_ref2) {
1808
+ var Icon = _ref2.icon,
1809
+ name = _ref2.name,
1810
+ color = _ref2.color;
1811
+ return /*#__PURE__*/jsxRuntime.jsxs(RatingItem, {
1812
+ children: [/*#__PURE__*/jsxRuntime.jsx(Icon, {
1813
+ color: color,
1814
+ size: 48
1815
+ }), /*#__PURE__*/jsxRuntime.jsx(InputWithMaxLength, {
1816
+ name: name,
1817
+ "data-cy": "neeto-form-engine-".concat(neetoCist.hyphenate(name))
1818
+ })]
1819
+ }, name);
1820
+ })
1821
+ })
1822
+ })
1823
+ });
1824
+ };
1825
+
1826
+ var StarRating = function StarRating() {
1827
+ var _useTranslation = reactI18next.useTranslation(),
1828
+ t = _useTranslation.t;
1829
+ var _useFormikContext = formik.useFormikContext(),
1830
+ setFieldValue = _useFormikContext.setFieldValue;
1831
+ var _useField = formik.useField("iconType"),
1832
+ _useField2 = _slicedToArray__default["default"](_useField, 3),
1833
+ iconType = _useField2[0].value;
1834
+ _useField2[1];
1835
+ var setIconType = _useField2[2].setValue;
1836
+ return /*#__PURE__*/jsxRuntime.jsxs(jsxRuntime.Fragment, {
1837
+ children: [/*#__PURE__*/jsxRuntime.jsxs("div", {
1838
+ className: "flex space-x-4",
1839
+ children: [/*#__PURE__*/jsxRuntime.jsx(Select__default["default"], {
1840
+ className: "w-1/2",
1841
+ "data-cy": "neeto-form-engine-star-rating-min-value",
1842
+ label: t("neetoForm.common.start"),
1843
+ name: "minValue",
1844
+ options: noQuestions.STAR_RATING_MIN_VALUE_OPTIONS,
1845
+ onChange: function onChange(option) {
1846
+ return setFieldValue("minValue", option === null || option === void 0 ? void 0 : option.value);
1847
+ }
1848
+ }), /*#__PURE__*/jsxRuntime.jsx(Select__default["default"], {
1849
+ className: "w-1/2",
1850
+ "data-cy": "neeto-form-engine-star-rating-max-value",
1851
+ label: t("neetoForm.common.end"),
1852
+ name: "maxValue",
1853
+ options: noQuestions.STAR_RATING_MAX_VALUE_OPTIONS,
1854
+ onChange: function onChange(option) {
1855
+ return setFieldValue("maxValue", option === null || option === void 0 ? void 0 : option.value);
1856
+ }
1857
+ })]
1858
+ }), /*#__PURE__*/jsxRuntime.jsx(Label__default["default"], {
1859
+ children: t("neetoForm.common.shape")
1860
+ }), /*#__PURE__*/jsxRuntime.jsx("div", {
1861
+ className: "flex gap-2",
1862
+ children: Object.entries(noQuestions.STAR_RATING_ICONS_MAP).map(function (_ref) {
1863
+ var _ref2 = _slicedToArray__default["default"](_ref, 2),
1864
+ name = _ref2[0],
1865
+ IconType = _ref2[1];
1866
+ var isActive = name === iconType;
1867
+ return /*#__PURE__*/jsxRuntime.jsx("div", {
1868
+ "data-cy": "neeto-form-engine-rating-icon-".concat(name),
1869
+ className: classnames__default["default"]("flex h-10 w-10 items-center justify-center gap-2", "neeto-ui-border-gray-800 neeto-ui-rounded-full cursor-pointer border", "transition-all duration-300 ease-in-out", {
1870
+ "neeto-ui-text-gray-800 neeto-ui-bg-gray-200": !isActive,
1871
+ "neeto-ui-text-white neeto-ui-bg-gray-800": isActive
1872
+ }),
1873
+ onClick: function onClick() {
1874
+ return setIconType(name);
1875
+ },
1876
+ children: /*#__PURE__*/jsxRuntime.jsx(IconType, {})
1877
+ }, name);
1878
+ })
1879
+ })]
1880
+ });
1881
+ };
1882
+
1883
+ var CHECKBOX = noQuestions.QUESTION_TYPES.CHECKBOX,
1884
+ RADIO = noQuestions.QUESTION_TYPES.RADIO,
1885
+ DROPDOWN = noQuestions.QUESTION_TYPES.DROPDOWN,
1886
+ STAR_RATING = noQuestions.QUESTION_TYPES.STAR_RATING,
1887
+ RATING = noQuestions.QUESTION_TYPES.RATING,
1888
+ FILE_UPLOAD = noQuestions.QUESTION_TYPES.FILE_UPLOAD,
1889
+ CAPTCHA = noQuestions.QUESTION_TYPES.CAPTCHA,
1890
+ EMAIL = noQuestions.QUESTION_TYPES.EMAIL;
1891
+ var transformValueForOption = function transformValueForOption(_ref) {
1892
+ var label = _ref.label,
1893
+ type = _ref.type;
1894
+ return "".concat(neetoCist.slugify(label), "-").concat(type);
1895
+ };
1896
+ var renderAdditionalData = function renderAdditionalData(_ref2) {
1897
+ var kind = _ref2.kind,
1898
+ questionProps = _ref2.questionProps,
1899
+ domainRestrictionHelpDocUrl = _ref2.domainRestrictionHelpDocUrl,
1900
+ enableDomainRestriction = _ref2.enableDomainRestriction;
1901
+ switch (kind) {
1902
+ case CHECKBOX:
1903
+ case RADIO:
1904
+ case DROPDOWN:
1905
+ return /*#__PURE__*/jsxRuntime.jsx(Options, {
1906
+ questionProps: questionProps
1907
+ });
1908
+ case RATING:
1909
+ return /*#__PURE__*/jsxRuntime.jsx(Rating, {});
1910
+ case STAR_RATING:
1911
+ return /*#__PURE__*/jsxRuntime.jsx(StarRating, {});
1912
+ case FILE_UPLOAD:
1913
+ return /*#__PURE__*/jsxRuntime.jsx(FileUpload, {});
1914
+ case CAPTCHA:
1915
+ return /*#__PURE__*/jsxRuntime.jsx(Captcha, {});
1916
+ case EMAIL:
1917
+ return enableDomainRestriction ? /*#__PURE__*/jsxRuntime.jsx(Email, {
1918
+ domainRestrictionHelpDocUrl: domainRestrictionHelpDocUrl
1919
+ }) : null;
1920
+ default:
1921
+ return null;
1922
+ }
1923
+ };
1924
+ var resolveActionComponent = function resolveActionComponent(action) {
1925
+ return ramda.equals(action, noQuestions.QUESTION_ACTIONS.ADD) ? Add : Edit;
1926
+ };
1927
+ var getQuestionKind = function getQuestionKind(questionKinds, pattern) {
1928
+ var questionKind = neetoCist.findBy(pattern, questionKinds);
1929
+ return questionKind ? ramda.assoc("kind", questionKind.type, questionKind) : null;
1930
+ };
1931
+ var buildKindOptions = function buildKindOptions(kinds) {
1932
+ return kinds.map(function (_ref3) {
1933
+ var label = _ref3.label,
1934
+ type = _ref3.type;
1935
+ return {
1936
+ label: label,
1937
+ value: transformValueForOption({
1938
+ label: label,
1939
+ type: type
1940
+ })
1941
+ };
1942
+ });
1943
+ };
1944
+ var extractKindFromOption = ramda.pipe(ramda.split("-"), ramda.last);
1945
+ var buildDefaultValueForKind = function buildDefaultValueForKind(questionKind) {
1946
+ return neetoCist.isPresent(questionKind) ? {
1947
+ value: transformValueForOption(questionKind)
1948
+ } : undefined;
1949
+ };
1950
+
1951
+ var _excluded$1 = ["isOpen", "onClose", "action", "question", "availableQuestionKinds", "fieldCodeHelpDocUrl", "domainRestrictionHelpDocUrl"];
1952
+ function ownKeys$2(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; }
1953
+ function _objectSpread$2(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys$2(Object(t), !0).forEach(function (r) { _defineProperty__default["default"](e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys$2(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
1954
+ var ManageQuestionPane = function ManageQuestionPane(_ref) {
1955
+ var isOpen = _ref.isOpen,
1956
+ onClose = _ref.onClose,
1957
+ action = _ref.action,
1958
+ question = _ref.question,
1959
+ availableQuestionKinds = _ref.availableQuestionKinds,
1960
+ fieldCodeHelpDocUrl = _ref.fieldCodeHelpDocUrl,
1961
+ domainRestrictionHelpDocUrl = _ref.domainRestrictionHelpDocUrl,
1962
+ props = _objectWithoutProperties__default["default"](_ref, _excluded$1);
1963
+ var initialFocusRef = React.useRef(null);
1964
+ var Component = resolveActionComponent(action);
1965
+ return /*#__PURE__*/jsxRuntime.jsx(Pane__default["default"], {
1966
+ initialFocusRef: initialFocusRef,
1967
+ isOpen: isOpen,
1968
+ onClose: onClose,
1969
+ children: /*#__PURE__*/jsxRuntime.jsx(Component, _objectSpread$2({}, _objectSpread$2({
1970
+ availableQuestionKinds: availableQuestionKinds,
1971
+ domainRestrictionHelpDocUrl: domainRestrictionHelpDocUrl,
1972
+ fieldCodeHelpDocUrl: fieldCodeHelpDocUrl,
1973
+ initialFocusRef: initialFocusRef,
1974
+ isOpen: isOpen,
1975
+ onClose: onClose,
1976
+ question: question
1977
+ }, props)))
1978
+ });
1979
+ };
1980
+
1981
+ var AddQuestion = reactUtils.withT(function (_ref) {
1982
+ var t = _ref.t,
1983
+ onAdd = _ref.onAdd,
1984
+ disabledAddButtonTooltipProps = _ref.disabledAddButtonTooltipProps,
1985
+ isDisabled = _ref.isDisabled;
1986
+ return /*#__PURE__*/jsxRuntime.jsx(Tooltip__default["default"], {
1987
+ disabled: !isDisabled,
1988
+ position: "top",
1989
+ content: (disabledAddButtonTooltipProps === null || disabledAddButtonTooltipProps === void 0 ? void 0 : disabledAddButtonTooltipProps.content) || t("neetoForm.questions.common.primaryPanel.noQuestionLeft"),
1990
+ children: /*#__PURE__*/jsxRuntime.jsx("span", {
1991
+ children: /*#__PURE__*/jsxRuntime.jsx(Button__default["default"], {
1992
+ "data-cy": "neeto-form-engine-add-question",
1993
+ disabled: isDisabled,
1994
+ icon: Plus__default["default"],
1995
+ iconPosition: "left",
1996
+ label: t("neetoForm.questions.common.primaryPanel.addQuestion"),
1997
+ style: "link",
1998
+ onClick: onAdd
1999
+ })
2000
+ })
2001
+ });
2002
+ });
2003
+
2004
+ var _excluded = ["questionKinds", "onValueChange", "formId", "isDeletable", "isRequiredField", "submitButtonProps", "cancelButtonProps", "isKindAlreadyActive", "getActiveKindDetails", "isDisabledFieldLabel", "disabledAddButtonTooltipProps", "enableFieldCode", "isFormEnabled", "savedTitle", "formTitle", "formDescription", "selectedLanguage", "availableLanguages", "onLanguageChange", "additionalActionOptions", "isReordering", "additionalQuestionKindPattern", "showActionBlock", "buildRequestArgs", "fieldCodeHelpDocUrl", "enableDomainRestriction", "domainRestrictionHelpDocUrl"];
2005
+ function ownKeys$1(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; }
2006
+ function _objectSpread$1(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys$1(Object(t), !0).forEach(function (r) { _defineProperty__default["default"](e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys$1(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
2007
+ var Form = function Form(_ref) {
2008
+ var questionKinds = _ref.questionKinds,
2009
+ onValueChange = _ref.onValueChange,
2010
+ formId = _ref.formId,
2011
+ isDeletable = _ref.isDeletable,
2012
+ isRequiredField = _ref.isRequiredField,
2013
+ submitButtonProps = _ref.submitButtonProps,
2014
+ cancelButtonProps = _ref.cancelButtonProps,
2015
+ isKindAlreadyActive = _ref.isKindAlreadyActive,
2016
+ getActiveKindDetails = _ref.getActiveKindDetails,
2017
+ isDisabledFieldLabel = _ref.isDisabledFieldLabel,
2018
+ disabledAddButtonTooltipProps = _ref.disabledAddButtonTooltipProps,
2019
+ enableFieldCode = _ref.enableFieldCode,
2020
+ isFormEnabled = _ref.isFormEnabled,
2021
+ savedTitle = _ref.savedTitle,
2022
+ formTitle = _ref.formTitle,
2023
+ formDescription = _ref.formDescription,
2024
+ selectedLanguage = _ref.selectedLanguage,
2025
+ availableLanguages = _ref.availableLanguages,
2026
+ onLanguageChange = _ref.onLanguageChange,
2027
+ additionalActionOptions = _ref.additionalActionOptions,
2028
+ isReordering = _ref.isReordering,
2029
+ additionalQuestionKindPattern = _ref.additionalQuestionKindPattern,
2030
+ showActionBlock = _ref.showActionBlock,
2031
+ buildRequestArgs = _ref.buildRequestArgs,
2032
+ fieldCodeHelpDocUrl = _ref.fieldCodeHelpDocUrl,
2033
+ enableDomainRestriction = _ref.enableDomainRestriction,
2034
+ domainRestrictionHelpDocUrl = _ref.domainRestrictionHelpDocUrl,
2035
+ formDomProps = _objectWithoutProperties__default["default"](_ref, _excluded);
2036
+ var containerRef = React.useRef();
2037
+ var _useTranslation = reactI18next.useTranslation(),
2038
+ t = _useTranslation.t;
2039
+ var formikContext = formik.useFormikContext();
2040
+ var _useState = React.useState(null),
2041
+ _useState2 = _slicedToArray__default["default"](_useState, 2),
2042
+ selectedQuestion = _useState2[0],
2043
+ setSelectedQuestion = _useState2[1];
2044
+ var _useState3 = React.useState(""),
2045
+ _useState4 = _slicedToArray__default["default"](_useState3, 2),
2046
+ selectedAction = _useState4[0],
2047
+ setSelectedAction = _useState4[1];
2048
+ var _useState5 = React.useState(false),
2049
+ _useState6 = _slicedToArray__default["default"](_useState5, 2),
2050
+ isDeleteAlertOpen = _useState6[0],
2051
+ setIsDeleteAlertOpen = _useState6[1];
2052
+ var _useState7 = React.useState(false),
2053
+ _useState8 = _slicedToArray__default["default"](_useState7, 2),
2054
+ isManageQuestionPaneOpen = _useState8[0],
2055
+ setIsManageQuestionPaneOpen = _useState8[1];
2056
+ var values = formikContext.values,
2057
+ setFieldValue = formikContext.setFieldValue,
2058
+ dirty = formikContext.dirty,
2059
+ isSubmitting = formikContext.isSubmitting,
2060
+ isValid = formikContext.isValid,
2061
+ errors = formikContext.errors,
2062
+ submitForm = formikContext.submitForm,
2063
+ resetForm = formikContext.resetForm;
2064
+ var setFormData = buildForm.useBuildFormStore(ramda.prop("setFormData"));
2065
+ var _useCreateQuestion = useFormApi.useCreateQuestion(formId, selectedLanguage, {
2066
+ onSuccess: utils.showThumbsUpToastr
2067
+ }),
2068
+ createQuestion = _useCreateQuestion.mutate;
2069
+ React.useEffect(function () {
2070
+ setFormData({
2071
+ formId: formId,
2072
+ enabled: isFormEnabled,
2073
+ title: savedTitle,
2074
+ values: values,
2075
+ dirty: dirty,
2076
+ isSubmitting: isSubmitting,
2077
+ isValid: isValid,
2078
+ errors: errors,
2079
+ submitForm: submitForm,
2080
+ resetForm: resetForm,
2081
+ selectedLanguage: selectedLanguage
2082
+ });
2083
+ }, [formId, isFormEnabled, savedTitle, setFormData, values, dirty, isSubmitting, isValid, errors, submitForm, resetForm, selectedLanguage]);
2084
+ var questions = values.questions;
2085
+ var handleSelect = function handleSelect(question) {
2086
+ setSelectedQuestion(question);
2087
+ };
2088
+ var handleAdd = function handleAdd() {
2089
+ setSelectedAction(noQuestions.QUESTION_ACTIONS.ADD);
2090
+ setIsManageQuestionPaneOpen(true);
2091
+ };
2092
+ var handleEdit = function handleEdit() {
2093
+ setSelectedAction(noQuestions.QUESTION_ACTIONS.EDIT);
2094
+ setIsManageQuestionPaneOpen(true);
2095
+ };
2096
+ var handleClone = function handleClone() {
2097
+ var values = duplicateFieldData({
2098
+ item: selectedQuestion,
2099
+ questionKinds: availableQuestionKinds,
2100
+ questions: questions
2101
+ });
2102
+ var displayOrder = selectedQuestion.displayOrder + 1;
2103
+ var attributes = ramda.mergeLeft({
2104
+ displayOrder: displayOrder
2105
+ }, values);
2106
+ var payload = _objectSpread$1({
2107
+ language: selectedLanguage,
2108
+ neetoFormQuestion: formatQuestionAttributesForClone(attributes)
2109
+ }, buildRequestArgs);
2110
+ createQuestion(payload, {
2111
+ onSuccess: function onSuccess(_ref2) {
2112
+ var questions = _ref2.questions;
2113
+ var newQuestion = neetoCist.findBy({
2114
+ displayOrder: displayOrder
2115
+ }, questions);
2116
+ handleSelect(newQuestion);
2117
+ }
2118
+ });
2119
+ };
2120
+ var handleDelete = function handleDelete() {
2121
+ setIsDeleteAlertOpen(true);
2122
+ };
2123
+ reactUtils.useOnClickOutside(containerRef, function () {
2124
+ return handleSelect(null);
2125
+ }, {
2126
+ enabled: !(isDeleteAlertOpen || isManageQuestionPaneOpen)
2127
+ });
2128
+ React.useEffect(function () {
2129
+ onValueChange === null || onValueChange === void 0 || onValueChange(questions);
2130
+ }, [questions]);
2131
+ var availableQuestionKinds = getAvailableQuestionKinds({
2132
+ allQuestionKinds: questionKinds,
2133
+ activeQuestions: questions,
2134
+ isKindAlreadyActive: isKindAlreadyActive
2135
+ });
2136
+ var hasActiveQuestions = questions && questions.length && questions.some(function (question) {
2137
+ return question._destroy !== true;
2138
+ });
2139
+ var handleLanguageChange = function handleLanguageChange(code) {
2140
+ resetForm();
2141
+ onLanguageChange(code);
2142
+ };
2143
+ var richTextQuestions = neetoCist.filterBy({
2144
+ kind: ramda.includes(ramda.__, noQuestions.RICH_TEXT_QUESTIONS)
2145
+ }, questions);
2146
+ var resetFormData = function resetFormData() {
2147
+ resetForm();
2148
+ setFormData({
2149
+ richTextFieldsToReset: ramda.pluck("fieldCode", richTextQuestions)
2150
+ });
2151
+ };
2152
+ return /*#__PURE__*/jsxRuntime.jsxs(jsxRuntime.Fragment, {
2153
+ children: [/*#__PURE__*/jsxRuntime.jsx(DeleteAlert, {
2154
+ handleSelect: handleSelect,
2155
+ selectedQuestion: selectedQuestion,
2156
+ isOpen: isDeleteAlertOpen,
2157
+ languagesCount: availableLanguages.length,
2158
+ onClose: function onClose() {
2159
+ return setIsDeleteAlertOpen(false);
2160
+ }
2161
+ }), /*#__PURE__*/jsxRuntime.jsxs(formik.Form, _objectSpread$1(_objectSpread$1({
2162
+ className: "neeto-form-nano-form-wrapper flex h-full flex-col"
2163
+ }, formDomProps), {}, {
2164
+ noValidate: true,
2165
+ children: [formTitle && /*#__PURE__*/jsxRuntime.jsx(Overview, {
2166
+ additionalActionOptions: additionalActionOptions,
2167
+ availableLanguages: availableLanguages,
2168
+ selectedLanguage: selectedLanguage,
2169
+ description: formDescription,
2170
+ title: formTitle,
2171
+ onLanguageChange: handleLanguageChange
2172
+ }), /*#__PURE__*/jsxRuntime.jsx("div", {
2173
+ className: "neeto-form-nano-form-wrapper__body min-h-0 w-full flex-grow space-y-6 overflow-y-auto px-6 pb-6",
2174
+ children: hasActiveQuestions ? /*#__PURE__*/jsxRuntime.jsxs("div", {
2175
+ className: "space-y-6",
2176
+ ref: containerRef,
2177
+ children: [/*#__PURE__*/jsxRuntime.jsx(dnd.DragDropContext, {
2178
+ onDragEnd: function onDragEnd(_ref3) {
2179
+ var source = _ref3.source,
2180
+ destination = _ref3.destination;
2181
+ return handleFieldDragEnd({
2182
+ source: source,
2183
+ destination: destination,
2184
+ items: questions,
2185
+ setValue: setFieldValue
2186
+ });
2187
+ },
2188
+ children: /*#__PURE__*/jsxRuntime.jsx(Questions, {
2189
+ getActiveKindDetails: getActiveKindDetails,
2190
+ isDeletable: isDeletable,
2191
+ questions: questions,
2192
+ selectedQuestion: selectedQuestion,
2193
+ allQuestionKinds: questionKinds,
2194
+ onClone: handleClone,
2195
+ onDelete: handleDelete,
2196
+ onEdit: handleEdit,
2197
+ onSelect: handleSelect
2198
+ })
2199
+ }), /*#__PURE__*/jsxRuntime.jsx("div", {
2200
+ className: "mb-8 w-full",
2201
+ children: /*#__PURE__*/jsxRuntime.jsx(AddQuestion, {
2202
+ disabledAddButtonTooltipProps: disabledAddButtonTooltipProps,
2203
+ isDisabled: ramda.isEmpty(availableQuestionKinds),
2204
+ onAdd: handleAdd
2205
+ })
2206
+ })]
2207
+ }) : /*#__PURE__*/jsxRuntime.jsx(AddFirstQuestion, {
2208
+ children: /*#__PURE__*/jsxRuntime.jsx(AddQuestion, {
2209
+ disabledAddButtonTooltipProps: disabledAddButtonTooltipProps,
2210
+ isDisabled: ramda.isEmpty(availableQuestionKinds),
2211
+ onAdd: handleAdd
2212
+ })
2213
+ })
2214
+ }), (showActionBlock || dirty) && /*#__PURE__*/jsxRuntime.jsx("div", {
2215
+ className: "neeto-ui-border-gray-300 neeto-form-nano-form-wrapper__footer neeto-ui-bg-white sticky bottom-0 flex flex-shrink-0 justify-end border-t px-6 py-4",
2216
+ children: /*#__PURE__*/jsxRuntime.jsx(ActionBlock__default["default"], {
2217
+ submitButtonProps: submitButtonProps,
2218
+ isSubmitting: isReordering,
2219
+ cancelButtonProps: _objectSpread$1({
2220
+ label: t("neetoForm.common.reset"),
2221
+ onClick: resetFormData
2222
+ }, cancelButtonProps)
2223
+ })
2224
+ }), /*#__PURE__*/jsxRuntime.jsx(ManageQuestionPane, {
2225
+ additionalQuestionKindPattern: additionalQuestionKindPattern,
2226
+ availableQuestionKinds: availableQuestionKinds,
2227
+ buildRequestArgs: buildRequestArgs,
2228
+ domainRestrictionHelpDocUrl: domainRestrictionHelpDocUrl,
2229
+ enableDomainRestriction: enableDomainRestriction,
2230
+ enableFieldCode: enableFieldCode,
2231
+ fieldCodeHelpDocUrl: fieldCodeHelpDocUrl,
2232
+ getActiveKindDetails: getActiveKindDetails,
2233
+ handleSelect: handleSelect,
2234
+ isDisabledFieldLabel: isDisabledFieldLabel,
2235
+ isRequiredField: isRequiredField,
2236
+ questions: questions,
2237
+ action: selectedAction,
2238
+ allQuestionKinds: questionKinds,
2239
+ isOpen: isManageQuestionPaneOpen,
2240
+ question: selectedQuestion,
2241
+ onClose: function onClose() {
2242
+ return setIsManageQuestionPaneOpen(false);
2243
+ }
2244
+ })]
2245
+ }))]
2246
+ });
2247
+ };
2248
+
2249
+ function ownKeys(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; }
2250
+ function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty__default["default"](e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
2251
+ var BuildForm = function BuildForm(_ref) {
2252
+ var id = _ref.id,
2253
+ onUpdate = _ref.onUpdate,
2254
+ buildRequestArgs = _ref.buildRequestArgs,
2255
+ _ref$nonRemovableFiel = _ref.nonRemovableFields,
2256
+ nonRemovableFields = _ref$nonRemovableFiel === void 0 ? [] : _ref$nonRemovableFiel,
2257
+ _ref$requiredFields = _ref.requiredFields,
2258
+ requiredFields = _ref$requiredFields === void 0 ? [] : _ref$requiredFields,
2259
+ formDomProps = _ref.formDomProps,
2260
+ _ref$showActionBlock = _ref.showActionBlock,
2261
+ showActionBlock = _ref$showActionBlock === void 0 ? false : _ref$showActionBlock,
2262
+ submitButtonProps = _ref.submitButtonProps,
2263
+ cancelButtonProps = _ref.cancelButtonProps,
2264
+ questionKinds = _ref.questionKinds,
2265
+ _ref$isKindAlreadyAct = _ref.isKindAlreadyActive,
2266
+ isKindAlreadyActive = _ref$isKindAlreadyAct === void 0 ? isQuestionKindAlreadyActive : _ref$isKindAlreadyAct,
2267
+ _ref$getActiveKindDet = _ref.getActiveKindDetails,
2268
+ getActiveKindDetails = _ref$getActiveKindDet === void 0 ? noQuestions.getActiveQuestionKindDetails : _ref$getActiveKindDet,
2269
+ isQuestionDeletable = _ref.isQuestionDeletable,
2270
+ isFieldRequired = _ref.isFieldRequired,
2271
+ isFieldLabelDisabled = _ref.isFieldLabelDisabled,
2272
+ _ref$showLoader = _ref.showLoader,
2273
+ showLoader = _ref$showLoader === void 0 ? false : _ref$showLoader,
2274
+ _ref$kindUniqueOn = _ref.kindUniqueOn,
2275
+ kindUniqueOn = _ref$kindUniqueOn === void 0 ? ["type"] : _ref$kindUniqueOn,
2276
+ _ref$allowAdditionalG = _ref.allowAdditionalGuests,
2277
+ allowAdditionalGuests = _ref$allowAdditionalG === void 0 ? false : _ref$allowAdditionalG,
2278
+ disabledAddButtonTooltipProps = _ref.disabledAddButtonTooltipProps,
2279
+ _ref$enableFieldCode = _ref.enableFieldCode,
2280
+ enableFieldCode = _ref$enableFieldCode === void 0 ? false : _ref$enableFieldCode,
2281
+ _ref$availableLanguag = _ref.availableLanguages,
2282
+ availableLanguages = _ref$availableLanguag === void 0 ? noQuestions.DEFAULT_AVAILABLE_LANGUAGES : _ref$availableLanguag,
2283
+ formDescription = _ref.formDescription,
2284
+ _ref$formTitle = _ref.formTitle,
2285
+ formTitle = _ref$formTitle === void 0 ? "" : _ref$formTitle,
2286
+ _ref$selectedLanguage = _ref.selectedLanguage,
2287
+ selectedLanguage = _ref$selectedLanguage === void 0 ? "en" : _ref$selectedLanguage,
2288
+ _ref$onLanguageChange = _ref.onLanguageChange,
2289
+ onLanguageChange = _ref$onLanguageChange === void 0 ? neetoCist.noop : _ref$onLanguageChange,
2290
+ _ref$additionalAction = _ref.additionalActionOptions,
2291
+ additionalActionOptions = _ref$additionalAction === void 0 ? [] : _ref$additionalAction,
2292
+ additionalQuestionKindPattern = _ref.additionalQuestionKindPattern,
2293
+ fieldCodeHelpDocUrl = _ref.fieldCodeHelpDocUrl,
2294
+ _ref$enableDomainRest = _ref.enableDomainRestriction,
2295
+ enableDomainRestriction = _ref$enableDomainRest === void 0 ? true : _ref$enableDomainRest,
2296
+ domainRestrictionHelpDocUrl = _ref.domainRestrictionHelpDocUrl,
2297
+ className = _ref.className;
2298
+ var queryClient = reactQuery.useQueryClient();
2299
+ var _useReorderQuestions = useFormApi.useReorderQuestions(id, {
2300
+ onSuccess: utils.showThumbsUpToastr
2301
+ }),
2302
+ reorderQuestions = _useReorderQuestions.mutate,
2303
+ isReordering = _useReorderQuestions.isPending;
2304
+ var _useFetchQuestions = useFormApi.useFetchQuestions({
2305
+ formId: id,
2306
+ language: selectedLanguage
2307
+ }),
2308
+ data = _useFetchQuestions.data,
2309
+ isLoading = _useFetchQuestions.isLoading,
2310
+ isQuestionsPending = _useFetchQuestions.isPending;
2311
+ var _ref2 = data || noQuestions.QUESTIONS_INITIAL_VALUE,
2312
+ isFormEnabled = _ref2.enabled,
2313
+ savedTitle = _ref2.title,
2314
+ questions = _ref2.questions,
2315
+ isQuestionsLoading = _ref2.isQuestionsLoading;
2316
+ React.useEffect(function () {
2317
+ if (data) {
2318
+ onUpdate === null || onUpdate === void 0 || onUpdate(data);
2319
+ }
2320
+ }, [data]);
2321
+ if (isLoading || showLoader && isQuestionsLoading && !isQuestionsPending) {
2322
+ return /*#__PURE__*/jsxRuntime.jsx("div", {
2323
+ className: "flex h-full w-full items-center justify-center py-6",
2324
+ children: /*#__PURE__*/jsxRuntime.jsx(PageLoader__default["default"], {})
2325
+ });
2326
+ }
2327
+ var handleSubmit = function handleSubmit(_ref3, _ref4) {
2328
+ var questions = _ref3.questions;
2329
+ var setSubmitting = _ref4.setSubmitting;
2330
+ var payload = {
2331
+ neetoFormQuestions: {
2332
+ questions: buildReorderPayload(questions)
2333
+ }
2334
+ };
2335
+ reorderQuestions(payload, {
2336
+ onSettled: function onSettled() {
2337
+ return setSubmitting(false);
2338
+ }
2339
+ });
2340
+ };
2341
+ var onValueChange = function onValueChange(questions) {
2342
+ var _queryClient$getQuery = queryClient.getQueryState([useFormApi.QUERY_KEYS.QUESTIONS, id, selectedLanguage]),
2343
+ dataUpdateCount = _queryClient$getQuery.dataUpdateCount;
2344
+ if (dataUpdateCount > 0) {
2345
+ queryClient.setQueryData([useFormApi.QUERY_KEYS.QUESTIONS, "preview/".concat(id), selectedLanguage], ramda.assoc("questions", questions));
2346
+ }
2347
+ };
2348
+ var isDeletable = isQuestionDeletable !== null && isQuestionDeletable !== void 0 ? isQuestionDeletable : function (question) {
2349
+ return !nonRemovableFields.includes(question.kind);
2350
+ };
2351
+ var isRequiredField = isFieldRequired !== null && isFieldRequired !== void 0 ? isFieldRequired : function (_ref5) {
2352
+ var kind = _ref5.kind;
2353
+ return ramda.concat(noQuestions.MANDATORY_KINDS, requiredFields).includes(kind);
2354
+ };
2355
+ var isDisabledFieldLabel = isFieldLabelDisabled !== null && isFieldLabelDisabled !== void 0 ? isFieldLabelDisabled : function () {
2356
+ return false;
2357
+ };
2358
+ var defaultQuestionKinds = allowAdditionalGuests ? noQuestions.QUESTION_KINDS : neetoCist.removeBy({
2359
+ type: constants.QUESTION_KIND.ADDITIONAL_GUESTS.value
2360
+ }, noQuestions.QUESTION_KINDS);
2361
+ return /*#__PURE__*/jsxRuntime.jsxs("div", {
2362
+ className: classnames__default["default"]("neeto-form-nano-form-outer-wrapper relative", className),
2363
+ children: [/*#__PURE__*/jsxRuntime.jsx(formik.Formik, {
2364
+ enableReinitialize: true,
2365
+ initialValues: {
2366
+ questions: questions
2367
+ },
2368
+ onSubmit: handleSubmit,
2369
+ children: function children(_ref6) {
2370
+ var errors = _ref6.errors,
2371
+ setFieldError = _ref6.setFieldError;
2372
+ return /*#__PURE__*/jsxRuntime.jsx(Form, _objectSpread(_objectSpread({}, _objectSpread(_objectSpread({}, formDomProps), {}, {
2373
+ additionalActionOptions: additionalActionOptions,
2374
+ additionalQuestionKindPattern: additionalQuestionKindPattern,
2375
+ availableLanguages: availableLanguages,
2376
+ buildRequestArgs: buildRequestArgs,
2377
+ cancelButtonProps: cancelButtonProps,
2378
+ disabledAddButtonTooltipProps: disabledAddButtonTooltipProps,
2379
+ domainRestrictionHelpDocUrl: domainRestrictionHelpDocUrl,
2380
+ enableDomainRestriction: enableDomainRestriction,
2381
+ enableFieldCode: enableFieldCode,
2382
+ fieldCodeHelpDocUrl: fieldCodeHelpDocUrl,
2383
+ formDescription: formDescription,
2384
+ formTitle: formTitle,
2385
+ getActiveKindDetails: getActiveKindDetails,
2386
+ isDeletable: isDeletable,
2387
+ isDisabledFieldLabel: isDisabledFieldLabel,
2388
+ isFormEnabled: isFormEnabled,
2389
+ isKindAlreadyActive: isKindAlreadyActive,
2390
+ isReordering: isReordering,
2391
+ isRequiredField: isRequiredField,
2392
+ kindUniqueOn: kindUniqueOn,
2393
+ onLanguageChange: onLanguageChange,
2394
+ onValueChange: onValueChange,
2395
+ savedTitle: savedTitle,
2396
+ selectedLanguage: selectedLanguage,
2397
+ showActionBlock: showActionBlock,
2398
+ submitButtonProps: submitButtonProps
2399
+ })), {}, {
2400
+ formId: id,
2401
+ questionKinds: ramda.isNil(questionKinds) ? defaultQuestionKinds : questionKinds,
2402
+ onChange: function onChange(event) {
2403
+ if (ramda.isEmpty(errors)) return;
2404
+ setFieldError(event.target.name);
2405
+ }
2406
+ }));
2407
+ }
2408
+ }), isQuestionsLoading && !isQuestionsPending && /*#__PURE__*/jsxRuntime.jsx("div", {
2409
+ className: "neeto-ui-bg-white absolute inset-0 flex items-center justify-center",
2410
+ children: /*#__PURE__*/jsxRuntime.jsx(PageLoader__default["default"], {})
2411
+ })]
2412
+ });
2413
+ };
2414
+
2415
+ module.exports = BuildForm;
2416
+ //# sourceMappingURL=BuildForm.js.map