@bigbinary/neeto-molecules 4.0.30 → 4.0.32

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.
@@ -18,9 +18,10 @@ var i18next = require('i18next');
18
18
  var _toConsumableArray = require('@babel/runtime/helpers/toConsumableArray');
19
19
  var injectCss = require('./inject-css-B6qYtOJe.js');
20
20
  var reactUtils = require('@bigbinary/neeto-commons-frontend/react-utils');
21
- var Delete = require('@bigbinary/neeto-icons/Delete');
22
21
  var Edit = require('@bigbinary/neeto-icons/Edit');
23
22
  var Drag = require('@bigbinary/neeto-icons/Drag');
23
+ var Copy = require('@bigbinary/neeto-icons/Copy');
24
+ var Delete = require('@bigbinary/neeto-icons/Delete');
24
25
  var Input = require('@bigbinary/neetoui/formik/Input');
25
26
  var Textarea$1 = require('@bigbinary/neetoui/formik/Textarea');
26
27
  var ImageUploader = require('@bigbinary/neeto-image-uploader-frontend/ImageUploader');
@@ -104,6 +105,20 @@ var IMAGE_UPLOAD_CONFIG = {
104
105
  "image/svg": [".svg"]
105
106
  }
106
107
  };
108
+ var INPUT_TYPES = {
109
+ TEXT: "text",
110
+ NUMBER: "number"
111
+ };
112
+ var OPTION_ACTIONS = {
113
+ UPDATE_IMAGE: "update_image",
114
+ UPDATE_VALUES: "update_values",
115
+ UPDATE_LABEL: "update_label",
116
+ DELETE: "delete",
117
+ REORDER: "reorder",
118
+ ADD: "add",
119
+ BULK_ADD: "bulk_add",
120
+ CLONE: "clone"
121
+ };
107
122
 
108
123
  var FormError = function FormError(_ref) {
109
124
  var error = _ref.error;
@@ -149,12 +164,53 @@ var resolveFormikValue = function resolveFormikValue(path, values) {
149
164
  return acc && acc[key] !== undefined ? acc[key] : undefined;
150
165
  }, values);
151
166
  };
167
+ var handleNumberKeyDown = function handleNumberKeyDown(event, onKeyDown) {
168
+ var allowedKeys = ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", ".", "-"];
169
+ var controlKeys = ["Backspace", "Delete", "ArrowUp", "ArrowDown", "ArrowLeft", "ArrowRight", "Tab", "Enter"];
170
+ if ((event.ctrlKey || event.metaKey) && ["a", "c", "v", "x", "z"].includes(event.key.toLowerCase())) {
171
+ return;
172
+ }
173
+ if (![].concat(allowedKeys, controlKeys).includes(event.key)) {
174
+ event.preventDefault();
175
+ }
176
+ onKeyDown === null || onKeyDown === void 0 || onKeyDown(event);
177
+ };
178
+ var handleInputBlur = function handleInputBlur(event, _ref) {
179
+ var id = _ref.id,
180
+ inputIndex = _ref.inputIndex,
181
+ onChange = _ref.onChange,
182
+ onBlur = _ref.onBlur,
183
+ field = _ref.field,
184
+ config = _ref.config;
185
+ var value = event.target.value;
186
+ var finalValue = !value && config !== null && config !== void 0 && config.defaultValue ? config.defaultValue : value;
187
+ onChange({
188
+ id: id,
189
+ value: finalValue,
190
+ inputIndex: inputIndex,
191
+ isOnBlur: true
192
+ });
193
+ onBlur === null || onBlur === void 0 || onBlur(id, finalValue, inputIndex);
194
+ field.onBlur(event);
195
+ };
196
+ var getMultiInputError = function getMultiInputError(isMultiInput, meta) {
197
+ if (!isMultiInput || !meta.error) return null;
198
+ if (Array.isArray(meta.error)) {
199
+ var hasValuesError = meta.error.some(function (optionError) {
200
+ return Array.isArray(optionError.values) && optionError.values.some(ramda.identity);
201
+ });
202
+ if (hasValuesError) {
203
+ return i18next.t("neetoMolecules.optionFields.allFieldsRequired");
204
+ }
205
+ }
206
+ return null;
207
+ };
152
208
 
153
- 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; }
154
- 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), true).forEach(function (r) { _defineProperty(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; }
209
+ 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; }
210
+ 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), true).forEach(function (r) { _defineProperty(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; }
155
211
  var attachPosition = function attachPosition(options) {
156
212
  return options.map(function (option, index) {
157
- return _objectSpread$4(_objectSpread$4({}, option), {}, {
213
+ return _objectSpread$5(_objectSpread$5({}, option), {}, {
158
214
  position: index
159
215
  });
160
216
  });
@@ -169,7 +225,11 @@ var useOptionFields = function useOptionFields(_ref) {
169
225
  destroyFlagName = _ref.destroyFlagName,
170
226
  isNewItemsPrefilled = _ref.isNewItemsPrefilled,
171
227
  isAddOptionEnabled = _ref.isAddOptionEnabled,
172
- isPictureChoice = _ref.isPictureChoice;
228
+ isPictureChoice = _ref.isPictureChoice,
229
+ isMultiInput = _ref.isMultiInput,
230
+ inputConfig = _ref.inputConfig;
231
+ var _useTranslation = reactI18next.useTranslation(),
232
+ t = _useTranslation.t;
173
233
  var _useState = React.useState(false),
174
234
  _useState2 = _slicedToArray(_useState, 2),
175
235
  shouldFocus = _useState2[0],
@@ -184,9 +244,15 @@ var useOptionFields = function useOptionFields(_ref) {
184
244
  _useField2[1];
185
245
  var helpers = _useField2[2];
186
246
  var setValue = helpers.setValue;
187
- var handleChange = function handleChange(id, value) {
188
- var isOnBlur = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;
189
- var fieldType = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : "label";
247
+ var handleChange = function handleChange(_ref2) {
248
+ var id = _ref2.id,
249
+ value = _ref2.value,
250
+ _ref2$inputIndex = _ref2.inputIndex,
251
+ inputIndex = _ref2$inputIndex === void 0 ? 0 : _ref2$inputIndex,
252
+ _ref2$isOnBlur = _ref2.isOnBlur,
253
+ isOnBlur = _ref2$isOnBlur === void 0 ? false : _ref2$isOnBlur,
254
+ _ref2$fieldType = _ref2.fieldType,
255
+ fieldType = _ref2$fieldType === void 0 ? "label" : _ref2$fieldType;
190
256
  var index = neetoCist.findIndexById(id, options);
191
257
  var currentOption = options[index];
192
258
 
@@ -194,7 +260,18 @@ var useOptionFields = function useOptionFields(_ref) {
194
260
  if (isPictureChoice && fieldType === "image") {
195
261
  var _nextOptions = ramda.assocPath([index, "image"], value, options);
196
262
  setValue(_nextOptions);
197
- onChange === null || onChange === void 0 || onChange(_nextOptions);
263
+ onChange === null || onChange === void 0 || onChange(_nextOptions, OPTION_ACTIONS.UPDATE_IMAGE);
264
+ return;
265
+ }
266
+
267
+ // Handle multi-input changes
268
+ if (isMultiInput && typeof inputIndex === "number") {
269
+ var currentValues = currentOption.values || [];
270
+ var newValues = ramda.clone(currentValues);
271
+ newValues[inputIndex] = value;
272
+ var _nextOptions2 = ramda.assocPath([index, "values"], newValues, options);
273
+ setValue(_nextOptions2);
274
+ onChange === null || onChange === void 0 || onChange(_nextOptions2, OPTION_ACTIONS.UPDATE_VALUES);
198
275
  return;
199
276
  }
200
277
 
@@ -214,7 +291,7 @@ var useOptionFields = function useOptionFields(_ref) {
214
291
  // Update options with the determined value (always updating label field)
215
292
  var nextOptions = ramda.assocPath([index, "label"], valueToUpdate, options);
216
293
  setValue(nextOptions);
217
- onChange === null || onChange === void 0 || onChange(nextOptions);
294
+ onChange === null || onChange === void 0 || onChange(nextOptions, OPTION_ACTIONS.UPDATE_LABEL);
218
295
  };
219
296
  var handleDelete = function handleDelete(id, arrayHelpers) {
220
297
  var nextOptions;
@@ -226,11 +303,11 @@ var useOptionFields = function useOptionFields(_ref) {
226
303
  arrayHelpers.remove(indexToDelete);
227
304
  nextOptions = attachPosition(ramda.remove(indexToDelete, 1, options));
228
305
  }
229
- onChange === null || onChange === void 0 || onChange(nextOptions);
306
+ onChange === null || onChange === void 0 || onChange(nextOptions, OPTION_ACTIONS.DELETE);
230
307
  };
231
- var handleDragEnd = function handleDragEnd(_ref2) {
232
- var source = _ref2.source,
233
- destination = _ref2.destination;
308
+ var handleDragEnd = function handleDragEnd(_ref3) {
309
+ var source = _ref3.source,
310
+ destination = _ref3.destination;
234
311
  // When dragged outside of draggable
235
312
  if (destination === null) return;
236
313
  var deletedOptions = options.filter(ramda.prop(destroyFlagName));
@@ -238,22 +315,26 @@ var useOptionFields = function useOptionFields(_ref) {
238
315
  var nextOptions = ramda.move(source.index, destination.index, filteredOptions);
239
316
  var finalOptions = attachPosition(nextOptions);
240
317
  setValue([].concat(_toConsumableArray(deletedOptions), _toConsumableArray(finalOptions)));
241
- onChange === null || onChange === void 0 || onChange([].concat(_toConsumableArray(deletedOptions), _toConsumableArray(finalOptions)));
318
+ onChange === null || onChange === void 0 || onChange([].concat(_toConsumableArray(deletedOptions), _toConsumableArray(finalOptions)), OPTION_ACTIONS.REORDER);
242
319
  };
243
320
  var handleAddOption = function handleAddOption() {
244
321
  var id = randomId();
245
- var newOption = _objectSpread$4({
322
+ var newOption = _objectSpread$5(_objectSpread$5({
246
323
  id: "draft-".concat(id),
247
324
  altId: "alt-".concat(id),
248
325
  label: isNewItemsPrefilled ? _generateLabel(itemLabel, options) : "",
249
326
  position: options.length
250
327
  }, isPictureChoice && {
251
328
  image: null
329
+ }), isMultiInput && {
330
+ values: inputConfig.map(function (config) {
331
+ return config.defaultValue || "";
332
+ })
252
333
  });
253
334
  setShouldFocus(true);
254
335
  var nextOptions = ramda.append(newOption, options);
255
336
  setValue(nextOptions);
256
- onChange === null || onChange === void 0 || onChange(nextOptions);
337
+ onChange === null || onChange === void 0 || onChange(nextOptions, OPTION_ACTIONS.ADD);
257
338
  };
258
339
  var handleBulkAddOption = function handleBulkAddOption(optionsString) {
259
340
  setShouldFocus(true);
@@ -268,7 +349,27 @@ var useOptionFields = function useOptionFields(_ref) {
268
349
  });
269
350
  var nextOptions = [].concat(_toConsumableArray(options), _toConsumableArray(newOptions));
270
351
  setValue(nextOptions);
271
- onChange === null || onChange === void 0 || onChange(nextOptions);
352
+ onChange === null || onChange === void 0 || onChange(nextOptions, OPTION_ACTIONS.BULK_ADD);
353
+ };
354
+ var handleClone = function handleClone(id) {
355
+ var index = neetoCist.findIndexById(id, options);
356
+ var optionToClone = options[index];
357
+ if (!optionToClone) return;
358
+ var newId = randomId();
359
+ var clonedOption = _objectSpread$5(_objectSpread$5({}, optionToClone), {}, {
360
+ id: "draft-".concat(newId),
361
+ altId: "alt-".concat(newId),
362
+ label: isMultiInput ? optionToClone.label : t("neetoMolecules.optionFields.clonedOption", {
363
+ originalLabel: optionToClone.label
364
+ })
365
+ }, isMultiInput && optionToClone.values && {
366
+ values: ramda.clone(optionToClone.values)
367
+ });
368
+ setShouldFocus(true);
369
+ var nextOptions = ramda.insert(index + 1, clonedOption, options);
370
+ var optionsWithUpdatedPositions = attachPosition(nextOptions);
371
+ setValue(optionsWithUpdatedPositions);
372
+ onChange === null || onChange === void 0 || onChange(optionsWithUpdatedPositions, OPTION_ACTIONS.CLONE);
272
373
  };
273
374
  var handleKeyDown = function handleKeyDown(event) {
274
375
  if (event.key !== "Enter") return;
@@ -291,17 +392,18 @@ var useOptionFields = function useOptionFields(_ref) {
291
392
  handleChange: handleChange,
292
393
  handleKeyDown: handleKeyDown,
293
394
  handleDelete: handleDelete,
294
- handleDragEnd: handleDragEnd
395
+ handleDragEnd: handleDragEnd,
396
+ handleClone: handleClone
295
397
  };
296
398
  };
297
399
 
298
400
  var css = ".neeto-molecules-option-fields__image-uploader img{max-height:100px}";
299
401
  injectCss.n(css,{});
300
402
 
301
- 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; }
302
- 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), true).forEach(function (r) { _defineProperty(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; }
403
+ 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; }
404
+ 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), true).forEach(function (r) { _defineProperty(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; }
303
405
  var DragHandle = function DragHandle(props) {
304
- return /*#__PURE__*/jsxRuntime.jsx("div", _objectSpread$3(_objectSpread$3({
406
+ return /*#__PURE__*/jsxRuntime.jsx("div", _objectSpread$4(_objectSpread$4({
305
407
  className: "neeto-ui-text-gray-500 flex h-8 flex-shrink-0 cursor-grab items-center",
306
408
  "data-cy": "drag-handle",
307
409
  "data-testid": "drag-handle"
@@ -313,29 +415,84 @@ var DragHandle = function DragHandle(props) {
313
415
  }));
314
416
  };
315
417
 
316
- 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; }
317
- 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), true).forEach(function (r) { _defineProperty(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; }
418
+ var OptionActions = reactUtils.withT(function (_ref) {
419
+ var t = _ref.t,
420
+ disabled = _ref.disabled,
421
+ _ref$hideCloneOption = _ref.hideCloneOption,
422
+ hideCloneOption = _ref$hideCloneOption === void 0 ? false : _ref$hideCloneOption,
423
+ _ref$hideDeleteOption = _ref.hideDeleteOption,
424
+ hideDeleteOption = _ref$hideDeleteOption === void 0 ? false : _ref$hideDeleteOption,
425
+ optionIndex = _ref.optionIndex,
426
+ id = _ref.id,
427
+ arrayHelpers = _ref.arrayHelpers,
428
+ onClone = _ref.onClone,
429
+ onDelete = _ref.onDelete,
430
+ _ref$className = _ref.className,
431
+ className = _ref$className === void 0 ? "" : _ref$className;
432
+ return /*#__PURE__*/jsxRuntime.jsxs("div", {
433
+ className: "flex items-center gap-1 ".concat(className),
434
+ children: [!hideCloneOption && /*#__PURE__*/jsxRuntime.jsx(Button, {
435
+ disabled: disabled,
436
+ className: "p-0.5",
437
+ "data-cy": "clone-option-button-".concat(optionIndex),
438
+ "data-testid": "clone-option-button-".concat(optionIndex),
439
+ icon: Copy,
440
+ size: "small",
441
+ style: "text",
442
+ tooltipProps: {
443
+ content: t("neetoMolecules.common.actions.clone"),
444
+ position: "top",
445
+ touch: ["hold", 500]
446
+ },
447
+ onClick: function onClick() {
448
+ return onClone(id);
449
+ }
450
+ }), !hideDeleteOption && /*#__PURE__*/jsxRuntime.jsx(Button, {
451
+ disabled: disabled,
452
+ className: "p-0.5",
453
+ "data-cy": "delete-option-button-".concat(optionIndex),
454
+ "data-testid": "delete-option-button-".concat(optionIndex),
455
+ icon: Delete,
456
+ size: "small",
457
+ style: "text",
458
+ tooltipProps: {
459
+ content: t("neetoMolecules.common.actions.delete"),
460
+ position: "top",
461
+ touch: ["hold", 500]
462
+ },
463
+ onClick: function onClick() {
464
+ return onDelete(id, arrayHelpers);
465
+ }
466
+ })]
467
+ });
468
+ });
469
+
470
+ 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; }
471
+ 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), true).forEach(function (r) { _defineProperty(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; }
318
472
  var BlockOption = reactUtils.withT(function (_ref) {
319
473
  var t = _ref.t,
320
474
  innerRef = _ref.innerRef,
321
475
  _ref$hideDeleteOption = _ref.hideDeleteOption,
322
476
  hideDeleteOption = _ref$hideDeleteOption === void 0 ? false : _ref$hideDeleteOption,
477
+ _ref$hideCloneOption = _ref.hideCloneOption,
478
+ hideCloneOption = _ref$hideCloneOption === void 0 ? false : _ref$hideCloneOption,
323
479
  draggableProps = _ref.draggableProps,
324
480
  dragHandleProps = _ref.dragHandleProps,
325
481
  label = _ref.label,
326
482
  onEdit = _ref.onEdit,
483
+ onClone = _ref.onClone,
327
484
  handleDeleteClick = _ref.handleDeleteClick,
328
485
  id = _ref.id,
329
486
  isDraggable = _ref.isDraggable,
330
487
  optionIndex = _ref.optionIndex,
331
488
  arrayHelpers = _ref.arrayHelpers;
332
- return /*#__PURE__*/jsxRuntime.jsx("div", _objectSpread$2(_objectSpread$2(_objectSpread$2({
489
+ return /*#__PURE__*/jsxRuntime.jsx("div", _objectSpread$3(_objectSpread$3(_objectSpread$3({
333
490
  ref: innerRef
334
491
  }, draggableProps), dragHandleProps), {}, {
335
492
  children: /*#__PURE__*/jsxRuntime.jsxs("div", {
336
493
  className: "neeto-ui-border-gray-400 hover:neeto-ui-bg-gray-200 neeto-ui-rounded-sm shadow-xs group relative mb-2 flex h-10 cursor-pointer items-center gap-2 border p-3 transition-colors duration-300 ease-in-out",
337
494
  "data-cy": "address-field-block",
338
- children: [isDraggable && /*#__PURE__*/jsxRuntime.jsx(DragHandle, _objectSpread$2(_objectSpread$2({}, dragHandleProps), {}, {
495
+ children: [isDraggable && /*#__PURE__*/jsxRuntime.jsx(DragHandle, _objectSpread$3(_objectSpread$3({}, dragHandleProps), {}, {
339
496
  "data-testid": "drag-handle-".concat(optionIndex)
340
497
  })), /*#__PURE__*/jsxRuntime.jsx(Typography, {
341
498
  className: "flex-grow truncate leading-4",
@@ -360,21 +517,15 @@ var BlockOption = reactUtils.withT(function (_ref) {
360
517
  onClick: function onClick() {
361
518
  return onEdit(id);
362
519
  }
363
- }), !hideDeleteOption && /*#__PURE__*/jsxRuntime.jsx(Button, {
364
- className: "neeto-ui-rounded hover:neeto-ui-bg-gray-400 p-1",
365
- "data-cy": "address-field-delete-button",
366
- "data-testid": "delete-option-button-".concat(optionIndex),
367
- icon: Delete,
368
- size: "small",
369
- style: "text",
370
- tooltipProps: {
371
- content: t("neetoMolecules.common.actions.delete"),
372
- position: "top",
373
- touch: ["hold", 500]
374
- },
375
- onClick: function onClick() {
376
- return handleDeleteClick(id, arrayHelpers);
377
- }
520
+ }), /*#__PURE__*/jsxRuntime.jsx(OptionActions, {
521
+ arrayHelpers: arrayHelpers,
522
+ hideCloneOption: hideCloneOption,
523
+ hideDeleteOption: hideDeleteOption,
524
+ id: id,
525
+ onClone: onClone,
526
+ optionIndex: optionIndex,
527
+ className: "flex items-center gap-2",
528
+ onDelete: handleDeleteClick
378
529
  })]
379
530
  })]
380
531
  })
@@ -393,11 +544,12 @@ var ImageOption = function ImageOption(_ref) {
393
544
  _onChange = _ref.onChange,
394
545
  _onBlur = _ref.onBlur,
395
546
  onDelete = _ref.onDelete,
547
+ onClone = _ref.onClone,
396
548
  arrayHelpers = _ref.arrayHelpers,
397
549
  _ref$hideDeleteOption = _ref.hideDeleteOption,
398
- hideDeleteOption = _ref$hideDeleteOption === void 0 ? false : _ref$hideDeleteOption;
399
- var _useTranslation = reactI18next.useTranslation(),
400
- t = _useTranslation.t;
550
+ hideDeleteOption = _ref$hideDeleteOption === void 0 ? false : _ref$hideDeleteOption,
551
+ _ref$hideCloneOption = _ref.hideCloneOption,
552
+ hideCloneOption = _ref$hideCloneOption === void 0 ? false : _ref$hideCloneOption;
401
553
  var imageFieldName = name.replace(".label", ".image");
402
554
  var _useField = formik.useField(imageFieldName),
403
555
  _useField2 = _slicedToArray(_useField, 3);
@@ -407,7 +559,12 @@ var ImageOption = function ImageOption(_ref) {
407
559
  var handleImageChange = function handleImageChange(changedImage) {
408
560
  var imageValue = ramda.isEmpty(changedImage === null || changedImage === void 0 ? void 0 : changedImage.url) ? null : changedImage;
409
561
  setValue(imageValue, false);
410
- _onChange(id, imageValue, false, "image");
562
+ _onChange({
563
+ id: id,
564
+ value: imageValue,
565
+ isOnBlur: false,
566
+ fieldType: "image"
567
+ });
411
568
  };
412
569
  return /*#__PURE__*/jsxRuntime.jsx("div", {
413
570
  className: classnames("flex w-full items-center justify-center", {
@@ -438,56 +595,59 @@ var ImageOption = function ImageOption(_ref) {
438
595
  "data-testid": "input-option-".concat(optionIndex),
439
596
  onChange: function onChange(_ref2) {
440
597
  var target = _ref2.target;
441
- return _onChange(id, target.value);
598
+ return _onChange({
599
+ id: id,
600
+ value: target.value
601
+ });
442
602
  },
443
603
  onFocus: function onFocus(_ref3) {
444
604
  var target = _ref3.target;
445
605
  return target.select();
446
606
  }
447
607
  }, "onBlur", function onBlur(event) {
448
- _onChange(id, event.target.value, true);
608
+ _onChange({
609
+ id: id,
610
+ value: event.target.value,
611
+ isOnBlur: true
612
+ });
449
613
  _onBlur === null || _onBlur === void 0 || _onBlur(id, event.target.value);
450
614
  for (var _len = arguments.length, args = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {
451
615
  args[_key - 1] = arguments[_key];
452
616
  }
453
617
  field.onBlur.apply(field, [event].concat(args));
454
618
  }))
455
- }), !hideDeleteOption && /*#__PURE__*/jsxRuntime.jsx("div", {
456
- className: "absolute right-2 top-2 opacity-0 transition-opacity duration-200 group-hover:opacity-100",
457
- children: /*#__PURE__*/jsxRuntime.jsx(Button, {
619
+ }), /*#__PURE__*/jsxRuntime.jsx("div", {
620
+ className: "absolute right-3 top-1/2 flex -translate-y-1/2 items-center gap-1 opacity-0 transition-opacity duration-200 group-hover:opacity-100",
621
+ children: /*#__PURE__*/jsxRuntime.jsx(OptionActions, {
622
+ arrayHelpers: arrayHelpers,
458
623
  disabled: disabled,
459
- className: "p-0.5",
460
- "data-cy": "delete-option-button-".concat(optionIndex),
461
- "data-testid": "delete-option-button-".concat(optionIndex),
462
- icon: Delete,
463
- size: "small",
464
- style: "text",
465
- tooltipProps: {
466
- content: t("neetoMolecules.common.actions.delete"),
467
- position: "top",
468
- touch: ["hold", 500]
469
- },
470
- onClick: function onClick() {
471
- return onDelete(id, arrayHelpers);
472
- }
624
+ hideCloneOption: hideCloneOption,
625
+ hideDeleteOption: hideDeleteOption,
626
+ id: id,
627
+ onClone: onClone,
628
+ onDelete: onDelete,
629
+ optionIndex: optionIndex
473
630
  })
474
631
  })]
475
632
  })
476
633
  });
477
634
  };
478
635
 
479
- 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; }
480
- 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), true).forEach(function (r) { _defineProperty(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; }
636
+ 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; }
637
+ 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), true).forEach(function (r) { _defineProperty(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; }
481
638
  var InputOption = function InputOption(_ref) {
482
639
  var shouldFocus = _ref.shouldFocus,
483
640
  _ref$hideDeleteOption = _ref.hideDeleteOption,
484
641
  hideDeleteOption = _ref$hideDeleteOption === void 0 ? false : _ref$hideDeleteOption,
642
+ _ref$hideCloneOption = _ref.hideCloneOption,
643
+ hideCloneOption = _ref$hideCloneOption === void 0 ? false : _ref$hideCloneOption,
485
644
  innerRef = _ref.innerRef,
486
645
  draggableProps = _ref.draggableProps,
487
646
  dragHandleProps = _ref.dragHandleProps,
488
647
  isPictureChoice = _ref.isPictureChoice,
489
648
  onKeyDown = _ref.onKeyDown,
490
649
  onDelete = _ref.onDelete,
650
+ onClone = _ref.onClone,
491
651
  _onChange = _ref.onChange,
492
652
  optionIndex = _ref.optionIndex,
493
653
  disabled = _ref.disabled,
@@ -498,29 +658,29 @@ var InputOption = function InputOption(_ref) {
498
658
  placeholder = _ref.placeholder,
499
659
  _onBlur = _ref.onBlur,
500
660
  arrayHelpers = _ref.arrayHelpers;
501
- var _useTranslation = reactI18next.useTranslation(),
502
- t = _useTranslation.t;
503
661
  var Component = isTextArea ? Textarea$1 : Input;
504
662
  var _useField = formik.useField(name),
505
663
  _useField2 = _slicedToArray(_useField, 1),
506
664
  field = _useField2[0];
507
- return /*#__PURE__*/jsxRuntime.jsx("div", _objectSpread$1(_objectSpread$1({
665
+ return /*#__PURE__*/jsxRuntime.jsx("div", _objectSpread$2(_objectSpread$2({
508
666
  ref: innerRef
509
- }, _objectSpread$1(_objectSpread$1({}, draggableProps), dragHandleProps)), {}, {
667
+ }, _objectSpread$2(_objectSpread$2({}, draggableProps), dragHandleProps)), {}, {
510
668
  "data-cy": "form-block-options",
511
669
  children: /*#__PURE__*/jsxRuntime.jsxs("div", {
512
670
  className: "nf-input-options group relative mb-2 flex items-start gap-1",
513
- children: [isDraggable && /*#__PURE__*/jsxRuntime.jsx(DragHandle, _objectSpread$1(_objectSpread$1({}, dragHandleProps), {}, {
671
+ children: [isDraggable && /*#__PURE__*/jsxRuntime.jsx(DragHandle, _objectSpread$2(_objectSpread$2({}, dragHandleProps), {}, {
514
672
  "data-testid": "drag-handle-".concat(optionIndex)
515
673
  })), isPictureChoice ? /*#__PURE__*/jsxRuntime.jsx(ImageOption, {
516
674
  arrayHelpers: arrayHelpers,
517
675
  disabled: disabled,
518
676
  field: field,
677
+ hideCloneOption: hideCloneOption,
519
678
  hideDeleteOption: hideDeleteOption,
520
679
  id: id,
521
680
  name: name,
522
681
  onBlur: _onBlur,
523
682
  onChange: _onChange,
683
+ onClone: onClone,
524
684
  onDelete: onDelete,
525
685
  onKeyDown: onKeyDown,
526
686
  optionIndex: optionIndex,
@@ -534,33 +694,33 @@ var InputOption = function InputOption(_ref) {
534
694
  autoFocus: shouldFocus,
535
695
  "data-cy": "option-input-".concat(optionIndex),
536
696
  "data-testid": "".concat(isTextArea ? "textarea-option" : "input-option", "-").concat(optionIndex),
537
- suffix: !hideDeleteOption && /*#__PURE__*/jsxRuntime.jsx(Button, {
697
+ suffix: /*#__PURE__*/jsxRuntime.jsx(OptionActions, {
698
+ arrayHelpers: arrayHelpers,
538
699
  disabled: disabled,
539
- className: "p-0.5",
540
- "data-cy": "delete-option-button-".concat(optionIndex),
541
- "data-testid": "delete-option-button-".concat(optionIndex),
542
- icon: Delete,
543
- size: "small",
544
- style: "text",
545
- tooltipProps: {
546
- content: t("neetoMolecules.common.actions.delete"),
547
- position: "top",
548
- touch: ["hold", 500]
549
- },
550
- onClick: function onClick() {
551
- return onDelete(id, arrayHelpers);
552
- }
700
+ hideCloneOption: hideCloneOption,
701
+ hideDeleteOption: hideDeleteOption,
702
+ id: id,
703
+ onClone: onClone,
704
+ onDelete: onDelete,
705
+ optionIndex: optionIndex
553
706
  }),
554
707
  onChange: function onChange(_ref2) {
555
708
  var target = _ref2.target;
556
- return _onChange(id, target.value);
709
+ return _onChange({
710
+ id: id,
711
+ value: target.value
712
+ });
557
713
  },
558
714
  onFocus: function onFocus(_ref3) {
559
715
  var target = _ref3.target;
560
716
  return target.select();
561
717
  },
562
718
  onBlur: function onBlur(event) {
563
- _onChange(id, event.target.value, true);
719
+ _onChange({
720
+ id: id,
721
+ value: event.target.value,
722
+ isOnBlur: true
723
+ });
564
724
  _onBlur === null || _onBlur === void 0 || _onBlur(id, event.target.value);
565
725
  for (var _len = arguments.length, args = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {
566
726
  args[_key - 1] = arguments[_key];
@@ -572,19 +732,127 @@ var InputOption = function InputOption(_ref) {
572
732
  }));
573
733
  };
574
734
 
735
+ 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; }
736
+ 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), true).forEach(function (r) { _defineProperty(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; }
737
+ var MultiInputOption = reactUtils.withT(function (_ref) {
738
+ var shouldFocus = _ref.shouldFocus,
739
+ _ref$hideDeleteOption = _ref.hideDeleteOption,
740
+ hideDeleteOption = _ref$hideDeleteOption === void 0 ? false : _ref$hideDeleteOption,
741
+ _ref$hideCloneOption = _ref.hideCloneOption,
742
+ hideCloneOption = _ref$hideCloneOption === void 0 ? false : _ref$hideCloneOption,
743
+ innerRef = _ref.innerRef,
744
+ draggableProps = _ref.draggableProps,
745
+ dragHandleProps = _ref.dragHandleProps,
746
+ _onKeyDown = _ref.onKeyDown,
747
+ onDelete = _ref.onDelete,
748
+ onClone = _ref.onClone,
749
+ _onChange = _ref.onChange,
750
+ optionIndex = _ref.optionIndex,
751
+ disabled = _ref.disabled,
752
+ id = _ref.id,
753
+ isDraggable = _ref.isDraggable,
754
+ name = _ref.name,
755
+ placeholder = _ref.placeholder,
756
+ _onBlur = _ref.onBlur,
757
+ arrayHelpers = _ref.arrayHelpers,
758
+ _ref$inputConfig = _ref.inputConfig,
759
+ inputConfig = _ref$inputConfig === void 0 ? [] : _ref$inputConfig;
760
+ return /*#__PURE__*/jsxRuntime.jsx("div", _objectSpread$1(_objectSpread$1({
761
+ ref: innerRef
762
+ }, _objectSpread$1(_objectSpread$1({}, draggableProps), dragHandleProps)), {}, {
763
+ "data-cy": "form-block-multi-options",
764
+ "data-testid": "form-block-multi-options",
765
+ children: /*#__PURE__*/jsxRuntime.jsxs("div", {
766
+ className: "nf-multi-input-options group relative mb-2 flex items-center gap-1",
767
+ children: [isDraggable && /*#__PURE__*/jsxRuntime.jsx(DragHandle, _objectSpread$1(_objectSpread$1({}, dragHandleProps), {}, {
768
+ "data-testid": "drag-handle-".concat(optionIndex)
769
+ })), /*#__PURE__*/jsxRuntime.jsx("div", {
770
+ className: "flex flex-1 flex-col gap-2",
771
+ children: /*#__PURE__*/jsxRuntime.jsx("div", {
772
+ className: "flex gap-2",
773
+ children: inputConfig.map(function (config, inputIndex) {
774
+ var _field$value;
775
+ var inputName = "".concat(name.replace(".label", ""), ".values.").concat(inputIndex);
776
+ var inputType = config.type || INPUT_TYPES.TEXT;
777
+ var isNumberType = inputType === INPUT_TYPES.NUMBER;
778
+ var _useField = formik.useField(inputName),
779
+ _useField2 = _slicedToArray(_useField, 1),
780
+ field = _useField2[0];
781
+ return /*#__PURE__*/jsxRuntime.jsx("div", {
782
+ className: "flex-1",
783
+ children: /*#__PURE__*/jsxRuntime.jsx(Input, _objectSpread$1(_objectSpread$1({
784
+ disabled: disabled,
785
+ autoFocus: shouldFocus && inputIndex === 0,
786
+ "data-cy": "multi-option-input-".concat(optionIndex, "-").concat(inputIndex),
787
+ "data-testid": "multi-option-input-".concat(optionIndex, "-").concat(inputIndex)
788
+ }, isNumberType && {
789
+ min: config.min,
790
+ max: config.max
791
+ }), {}, {
792
+ name: inputName,
793
+ type: inputType,
794
+ value: (_field$value = field.value) !== null && _field$value !== void 0 ? _field$value : config.defaultValue,
795
+ placeholder: config.placeholder || "".concat(placeholder, " ").concat(inputIndex + 1),
796
+ onFocus: function onFocus(_ref2) {
797
+ var target = _ref2.target;
798
+ return target.select();
799
+ },
800
+ onBlur: function onBlur(event) {
801
+ return handleInputBlur(event, {
802
+ id: id,
803
+ inputIndex: inputIndex,
804
+ onChange: _onChange,
805
+ onBlur: _onBlur,
806
+ field: field,
807
+ config: config
808
+ });
809
+ },
810
+ onChange: function onChange(_ref3) {
811
+ var target = _ref3.target;
812
+ return _onChange({
813
+ id: id,
814
+ value: target.value,
815
+ inputIndex: inputIndex
816
+ });
817
+ },
818
+ onKeyDown: function onKeyDown(event) {
819
+ return isNumberType ? handleNumberKeyDown(event, _onKeyDown) : _onKeyDown === null || _onKeyDown === void 0 ? void 0 : _onKeyDown(event);
820
+ }
821
+ }))
822
+ }, inputIndex);
823
+ })
824
+ })
825
+ }), /*#__PURE__*/jsxRuntime.jsx(OptionActions, {
826
+ arrayHelpers: arrayHelpers,
827
+ disabled: disabled,
828
+ hideCloneOption: hideCloneOption,
829
+ hideDeleteOption: hideDeleteOption,
830
+ id: id,
831
+ onClone: onClone,
832
+ onDelete: onDelete,
833
+ optionIndex: optionIndex
834
+ })]
835
+ })
836
+ }));
837
+ });
838
+
575
839
  var OptionField = function OptionField(_ref) {
576
840
  var option = _ref.option,
577
841
  editable = _ref.editable,
578
842
  dragHandleProps = _ref.dragHandleProps,
579
843
  draggableProps = _ref.draggableProps,
580
844
  handleDeleteClick = _ref.handleDeleteClick,
845
+ handleCloneClick = _ref.handleCloneClick,
581
846
  hideDeleteOption = _ref.hideDeleteOption,
847
+ hideCloneOption = _ref.hideCloneOption,
582
848
  innerRef = _ref.innerRef,
583
849
  onEdit = _ref.onEdit,
584
850
  draggable = _ref.draggable,
585
851
  disabled = _ref.disabled,
586
852
  isPictureChoice = _ref.isPictureChoice,
587
853
  isTextArea = _ref.isTextArea,
854
+ isMultiInput = _ref.isMultiInput,
855
+ inputConfig = _ref.inputConfig,
588
856
  shouldFocus = _ref.shouldFocus,
589
857
  isEditable = _ref.isEditable,
590
858
  itemLabel = _ref.itemLabel,
@@ -600,19 +868,46 @@ var OptionField = function OptionField(_ref) {
600
868
  dragHandleProps: dragHandleProps,
601
869
  draggableProps: draggableProps,
602
870
  handleDeleteClick: handleDeleteClick,
871
+ hideCloneOption: hideCloneOption,
603
872
  hideDeleteOption: hideDeleteOption,
604
873
  innerRef: innerRef,
605
874
  onEdit: onEdit,
606
875
  optionIndex: optionIndex,
607
876
  id: option.id,
608
877
  isDraggable: draggable && !disabled,
609
- label: option.label
878
+ label: option.label,
879
+ onClone: handleCloneClick
880
+ });
881
+ }
882
+ if (isMultiInput) {
883
+ return /*#__PURE__*/jsxRuntime.jsx(MultiInputOption, {
884
+ arrayHelpers: arrayHelpers,
885
+ dragHandleProps: dragHandleProps,
886
+ draggableProps: draggableProps,
887
+ hideCloneOption: hideCloneOption,
888
+ hideDeleteOption: hideDeleteOption,
889
+ innerRef: innerRef,
890
+ inputConfig: inputConfig,
891
+ name: name,
892
+ onBlur: onBlur,
893
+ option: option,
894
+ optionIndex: optionIndex,
895
+ shouldFocus: shouldFocus,
896
+ disabled: !isEditable || disabled,
897
+ id: option.id,
898
+ isDraggable: draggable && !disabled,
899
+ placeholder: generatePlaceholder(itemLabel, optionIndex),
900
+ onChange: handleChange,
901
+ onClone: handleCloneClick,
902
+ onDelete: handleDeleteClick,
903
+ onKeyDown: handleKeyDown
610
904
  });
611
905
  }
612
906
  return /*#__PURE__*/jsxRuntime.jsx(InputOption, {
613
907
  arrayHelpers: arrayHelpers,
614
908
  dragHandleProps: dragHandleProps,
615
909
  draggableProps: draggableProps,
910
+ hideCloneOption: hideCloneOption,
616
911
  hideDeleteOption: hideDeleteOption,
617
912
  innerRef: innerRef,
618
913
  isPictureChoice: isPictureChoice,
@@ -626,6 +921,7 @@ var OptionField = function OptionField(_ref) {
626
921
  isDraggable: draggable && !disabled,
627
922
  placeholder: generatePlaceholder(itemLabel, optionIndex),
628
923
  onChange: handleChange,
924
+ onClone: handleCloneClick,
629
925
  onDelete: handleDeleteClick,
630
926
  onKeyDown: handleKeyDown
631
927
  });
@@ -638,6 +934,7 @@ var OptionFields = function OptionFields(_ref) {
638
934
  var name = _ref.name,
639
935
  error = _ref.error,
640
936
  onDelete = _ref.onDelete,
937
+ onClone = _ref.onClone,
641
938
  onChange = _ref.onChange,
642
939
  onBlur = _ref.onBlur,
643
940
  _ref$onEdit = _ref.onEdit,
@@ -656,10 +953,16 @@ var OptionFields = function OptionFields(_ref) {
656
953
  isAddOptionEnabled = _ref$isAddOptionEnabl === void 0 ? true : _ref$isAddOptionEnabl,
657
954
  _ref$isDeleteOptionEn = _ref.isDeleteOptionEnabled,
658
955
  isDeleteOptionEnabled = _ref$isDeleteOptionEn === void 0 ? true : _ref$isDeleteOptionEn,
956
+ _ref$isCloneOptionEna = _ref.isCloneOptionEnabled,
957
+ isCloneOptionEnabled = _ref$isCloneOptionEna === void 0 ? true : _ref$isCloneOptionEna,
659
958
  _ref$isPictureChoice = _ref.isPictureChoice,
660
959
  isPictureChoice = _ref$isPictureChoice === void 0 ? false : _ref$isPictureChoice,
661
960
  _ref$isTextArea = _ref.isTextArea,
662
961
  isTextArea = _ref$isTextArea === void 0 ? false : _ref$isTextArea,
962
+ _ref$isMultiInput = _ref.isMultiInput,
963
+ isMultiInput = _ref$isMultiInput === void 0 ? false : _ref$isMultiInput,
964
+ _ref$inputConfig = _ref.inputConfig,
965
+ inputConfig = _ref$inputConfig === void 0 ? [] : _ref$inputConfig,
663
966
  _ref$shouldDestroy = _ref.shouldDestroy,
664
967
  shouldDestroy = _ref$shouldDestroy === void 0 ? false : _ref$shouldDestroy,
665
968
  _ref$destroyFlagName = _ref.destroyFlagName,
@@ -686,6 +989,7 @@ var OptionFields = function OptionFields(_ref) {
686
989
  field = _useField2[0],
687
990
  meta = _useField2[1];
688
991
  var fieldError = meta.touched ? meta.error : null;
992
+ var multiInputError = getMultiInputError(isMultiInput, meta);
689
993
  var options = (_field$value = field.value) !== null && _field$value !== void 0 ? _field$value : [];
690
994
  var _useOptionFields = useOptionFields({
691
995
  options: options,
@@ -697,7 +1001,9 @@ var OptionFields = function OptionFields(_ref) {
697
1001
  name: name,
698
1002
  isNewItemsPrefilled: isNewItemsPrefilled,
699
1003
  isAddOptionEnabled: isAddOptionEnabled,
700
- isPictureChoice: isPictureChoice
1004
+ isPictureChoice: isPictureChoice,
1005
+ isMultiInput: isMultiInput,
1006
+ inputConfig: inputConfig
701
1007
  }),
702
1008
  shouldFocus = _useOptionFields.shouldFocus,
703
1009
  handleAddOption = _useOptionFields.handleAddOption,
@@ -705,7 +1011,8 @@ var OptionFields = function OptionFields(_ref) {
705
1011
  handleChange = _useOptionFields.handleChange,
706
1012
  handleKeyDown = _useOptionFields.handleKeyDown,
707
1013
  handleDelete = _useOptionFields.handleDelete,
708
- handleDragEnd = _useOptionFields.handleDragEnd;
1014
+ handleDragEnd = _useOptionFields.handleDragEnd,
1015
+ handleClone = _useOptionFields.handleClone;
709
1016
 
710
1017
  // Temporarily disables the modifications to options when changed are getting saved to server
711
1018
  // This condition only needed for server id generated types
@@ -717,15 +1024,20 @@ var OptionFields = function OptionFields(_ref) {
717
1024
  return !deleted;
718
1025
  });
719
1026
  var hideDeleteOption = filteredOptions.length <= minOptions || disabled || !isDeleteOptionEnabled;
1027
+ var hideCloneOption = disabled || !isCloneOptionEnabled;
720
1028
  var optionFieldProps = {
721
1029
  disabled: disabled,
722
1030
  draggable: draggable,
723
1031
  editable: editable,
724
1032
  handleChange: handleChange,
725
1033
  handleDeleteClick: onDelete !== null && onDelete !== void 0 ? onDelete : handleDelete,
1034
+ handleCloneClick: onClone !== null && onClone !== void 0 ? onClone : handleClone,
726
1035
  handleKeyDown: handleKeyDown,
727
1036
  hideDeleteOption: hideDeleteOption,
1037
+ hideCloneOption: hideCloneOption,
1038
+ inputConfig: inputConfig,
728
1039
  isEditable: isEditable,
1040
+ isMultiInput: isMultiInput,
729
1041
  isPictureChoice: isPictureChoice,
730
1042
  isTextArea: isTextArea,
731
1043
  itemLabel: itemLabel,
@@ -765,6 +1077,7 @@ var OptionFields = function OptionFields(_ref) {
765
1077
  isDropDisabled: !draggable || disabled,
766
1078
  renderClone: renderDragClone,
767
1079
  children: function children(_ref3) {
1080
+ var _ref5;
768
1081
  var innerRef = _ref3.innerRef,
769
1082
  droppableProps = _ref3.droppableProps,
770
1083
  placeholder = _ref3.placeholder;
@@ -802,7 +1115,7 @@ var OptionFields = function OptionFields(_ref) {
802
1115
  });
803
1116
  }
804
1117
  }), placeholder, /*#__PURE__*/jsxRuntime.jsx(FormError, {
805
- error: error !== null && error !== void 0 ? error : fieldError
1118
+ error: (_ref5 = error !== null && error !== void 0 ? error : multiInputError) !== null && _ref5 !== void 0 ? _ref5 : fieldError
806
1119
  })]
807
1120
  }));
808
1121
  }
@@ -818,7 +1131,7 @@ var OptionFields = function OptionFields(_ref) {
818
1131
  size: "small",
819
1132
  style: "link",
820
1133
  onClick: handleAddOption
821
- }, buttonProps)), bulkActionProps.enabled && !isPictureChoice && /*#__PURE__*/jsxRuntime.jsx(Button, {
1134
+ }, buttonProps)), bulkActionProps.enabled && !isPictureChoice && !isMultiInput && /*#__PURE__*/jsxRuntime.jsx(Button, {
822
1135
  "data-cy": "add-bulk-option-link",
823
1136
  "data-testid": "add-bulk-option-link",
824
1137
  disabled: !isEditable,