@configuratorware/configurator-frontendgui 1.34.2 → 1.35.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (23) hide show
  1. package/App/Modules/Creator/Components/Option/index.js +42 -11
  2. package/App/Modules/Creator/Components/OptionsList/index.js +4 -1
  3. package/App/Modules/Creator/Components/ProductPart/index.js +19 -5
  4. package/App/Modules/Creator/Components/ProductPartsList/index.js +8 -4
  5. package/App/Modules/Creator/Containers/InvalidConfigurationNotice/index.js +6 -3
  6. package/App/Modules/Creator/Containers/OptionsList/index.js +5 -0
  7. package/App/Modules/Creator/Containers/ProductPartsList/index.js +8 -2
  8. package/App/Reducers/Configurator/Actions.js +80 -12
  9. package/App/Reducers/Configurator/Reducer.js +34 -1
  10. package/App/Services/ConfiguratorService.js +5 -0
  11. package/package.json +4 -4
  12. package/src/App/Modules/Creator/Components/Option/__snapshots__/index.test.js.snap +126 -67
  13. package/src/App/Modules/Creator/Components/Option/index.js +32 -3
  14. package/src/App/Modules/Creator/Components/Option/index.test.js +16 -0
  15. package/src/App/Modules/Creator/Components/OptionsList/index.js +3 -0
  16. package/src/App/Modules/Creator/Components/ProductPart/index.js +13 -5
  17. package/src/App/Modules/Creator/Components/ProductPartsList/index.js +4 -0
  18. package/src/App/Modules/Creator/Containers/InvalidConfigurationNotice/index.js +4 -1
  19. package/src/App/Modules/Creator/Containers/OptionsList/index.js +2 -0
  20. package/src/App/Modules/Creator/Containers/ProductPartsList/index.js +4 -1
  21. package/src/App/Reducers/Configurator/Actions.js +40 -0
  22. package/src/App/Reducers/Configurator/Reducer.js +31 -0
  23. package/src/App/Services/ConfiguratorService.js +4 -0
@@ -17,7 +17,11 @@ var _clsx = _interopRequireDefault(require("clsx"));
17
17
 
18
18
  var _Grid = _interopRequireDefault(require("@material-ui/core/Grid/Grid"));
19
19
 
20
- var _core = require("@material-ui/core");
20
+ var _useMediaQuery = _interopRequireDefault(require("@material-ui/core/useMediaQuery"));
21
+
22
+ var _Typography = _interopRequireDefault(require("@material-ui/core/Typography"));
23
+
24
+ var _TextField = _interopRequireDefault(require("@material-ui/core/TextField"));
21
25
 
22
26
  var _BlockRounded = _interopRequireDefault(require("@material-ui/icons/BlockRounded"));
23
27
 
@@ -184,7 +188,8 @@ var styles = function styles(theme) {
184
188
  '& $text': {
185
189
  width: textWidthWithAmount
186
190
  }
187
- }
191
+ },
192
+ optionTextInput: {}
188
193
  };
189
194
  };
190
195
 
@@ -197,6 +202,7 @@ var Option = function Option(_ref) {
197
202
  onClick = props.onClick,
198
203
  onSelect = props.onSelect,
199
204
  onToggle = props.onToggle,
205
+ onInputTextChange = props.onInputTextChange,
200
206
  option = props.option,
201
207
  optionclassification = props.optionclassification,
202
208
  selected = props.selected,
@@ -212,9 +218,16 @@ var Option = function Option(_ref) {
212
218
  imageAvailable = _useState2[0],
213
219
  setImageAvailable = _useState2[1];
214
220
 
221
+ var selectedoptions = optionclassification.selectedoptions;
222
+
223
+ var _useState3 = (0, _react.useState)((0, _lodash.get)((0, _lodash.find)(selectedoptions, ['identifier', option.identifier]), 'inputText', '')),
224
+ _useState4 = _slicedToArray(_useState3, 2),
225
+ inputText = _useState4[0],
226
+ setInputText = _useState4[1];
227
+
215
228
  var query = new URLSearchParams(location.search);
216
229
  var hidePrices = query.has('_hide_prices') && query.get('_hide_prices') === '1';
217
- var smallerScreen = (0, _core.useMediaQuery)('(min-device-width : 300px) and (max-device-width : 340px)');
230
+ var smallerScreen = (0, _useMediaQuery["default"])('(min-device-width : 300px) and (max-device-width : 340px)');
218
231
  var thumbnail = (0, _lodash.get)(option, 'thumbnail', '');
219
232
  var detailImage = (0, _lodash.get)(option, 'detailImage');
220
233
  var optionIdentifier = (0, _lodash.get)(option, 'identifier', '');
@@ -222,6 +235,7 @@ var Option = function Option(_ref) {
222
235
  var resultStatus = (0, _lodash.get)(option, 'check_results.status', true);
223
236
  var optionIsMultiSelect = (0, _lodash.get)(option, 'is_multiselect', false);
224
237
  var optionAmount = (0, _lodash.get)(option, 'amount', 0);
238
+ var hasTextinput = (0, _lodash.get)(option, 'hasTextinput', false);
225
239
 
226
240
  var translations = _objectSpread(_objectSpread({}, (0, _i18n.t)('common')), (0, _i18n.t)('optionlistitem'));
227
241
 
@@ -265,7 +279,7 @@ var Option = function Option(_ref) {
265
279
  event.preventDefault();
266
280
  event.stopPropagation();
267
281
 
268
- if (isEnabled()) {
282
+ if (isEnabled() && !(hasTextinput && selected)) {
269
283
  onOptionSelected();
270
284
  onClick();
271
285
  }
@@ -343,7 +357,7 @@ var Option = function Option(_ref) {
343
357
  var renderNotAvailableImage = function renderNotAvailableImage() {
344
358
  return /*#__PURE__*/_react["default"].createElement("div", {
345
359
  className: 'imageNotAvailableElement'
346
- }, /*#__PURE__*/_react["default"].createElement(_core.Typography, {
360
+ }, /*#__PURE__*/_react["default"].createElement(_Typography["default"], {
347
361
  variant: 'caption'
348
362
  }, translations.imageNotAvailable));
349
363
  };
@@ -356,7 +370,7 @@ var Option = function Option(_ref) {
356
370
  className: classes.iconWithText
357
371
  }, /*#__PURE__*/_react["default"].createElement(_BlockRounded["default"], {
358
372
  className: classes.materialIcon
359
- }), ' ', /*#__PURE__*/_react["default"].createElement(_core.Typography, {
373
+ }), ' ', /*#__PURE__*/_react["default"].createElement(_Typography["default"], {
360
374
  variant: 'body2'
361
375
  }, translations.notAvailable));
362
376
 
@@ -366,7 +380,7 @@ var Option = function Option(_ref) {
366
380
  onClick: onLateDeliveryClicked
367
381
  }, /*#__PURE__*/_react["default"].createElement(_RestoreRounded["default"], {
368
382
  className: classes.materialIcon
369
- }), ' ', /*#__PURE__*/_react["default"].createElement(_core.Typography, {
383
+ }), ' ', /*#__PURE__*/_react["default"].createElement(_Typography["default"], {
370
384
  variant: 'body2'
371
385
  }, translations.lateDelivery)));
372
386
 
@@ -410,7 +424,7 @@ var Option = function Option(_ref) {
410
424
  onClick: onDetailsClicked
411
425
  }, /*#__PURE__*/_react["default"].createElement(_InfoRounded["default"], {
412
426
  className: (0, _clsx["default"])(classes.materialIcon, (0, _customClassName["default"])('rule-info-icon-option'))
413
- }), /*#__PURE__*/_react["default"].createElement(_core.Typography, {
427
+ }), /*#__PURE__*/_react["default"].createElement(_Typography["default"], {
414
428
  variant: 'body2',
415
429
  className: classes.iconWithText
416
430
  }, translations.details))), resultStatus !== true && /*#__PURE__*/_react["default"].createElement("div", null, /*#__PURE__*/_react["default"].createElement("a", {
@@ -418,7 +432,7 @@ var Option = function Option(_ref) {
418
432
  onClick: onIncompatibilityClicked
419
433
  }, /*#__PURE__*/_react["default"].createElement(_WarningRounded["default"], {
420
434
  className: (0, _clsx["default"])(classes.materialIcon, (0, _customClassName["default"])('rule-alert-icon-option'))
421
- }), /*#__PURE__*/_react["default"].createElement(_core.Typography, {
435
+ }), /*#__PURE__*/_react["default"].createElement(_Typography["default"], {
422
436
  variant: 'body2'
423
437
  }, translations.incompatibility))), renderStockStatus(), renderOptionGroup());
424
438
  };
@@ -427,13 +441,13 @@ var Option = function Option(_ref) {
427
441
  return /*#__PURE__*/_react["default"].createElement(_Grid["default"], {
428
442
  item: true,
429
443
  xs: 12
430
- }, /*#__PURE__*/_react["default"].createElement(_core.Typography, {
444
+ }, /*#__PURE__*/_react["default"].createElement(_Typography["default"], {
431
445
  component: 'div',
432
446
  className: classes.optionList,
433
447
  variant: 'body2'
434
448
  }, /*#__PURE__*/_react["default"].createElement("div", {
435
449
  className: classes.title
436
- }, option.title), !hidePrices && /*#__PURE__*/_react["default"].createElement("div", {
450
+ }, option.title), hasTextinput && renderTextInput(), !hidePrices && /*#__PURE__*/_react["default"].createElement("div", {
437
451
  className: classes.price
438
452
  }, option.priceFormatted), smallerScreen && renderControls('horizontal'), option["abstract"] && /*#__PURE__*/_react["default"].createElement(_Markdown["default"], {
439
453
  className: classes.description
@@ -453,6 +467,21 @@ var Option = function Option(_ref) {
453
467
  }
454
468
  };
455
469
 
470
+ var handleTextInputChange = function handleTextInputChange(event) {
471
+ setInputText(event.target.value);
472
+ onInputTextChange(option.identifier, event.target.value);
473
+ };
474
+
475
+ var renderTextInput = function renderTextInput() {
476
+ return /*#__PURE__*/_react["default"].createElement(_TextField["default"], {
477
+ className: classes.optionTextInput,
478
+ label: '',
479
+ value: inputText,
480
+ onChange: handleTextInputChange,
481
+ disabled: !selected
482
+ });
483
+ };
484
+
456
485
  var getRootClassName = function getRootClassName() {
457
486
  return (0, _clsx["default"])(classes.root, selected && 'selected', (0, _customClassName["default"])('option'));
458
487
  };
@@ -511,6 +540,7 @@ Option.defaultProps = {
511
540
  onClick: function onClick() {},
512
541
  onSelect: function onSelect() {},
513
542
  onToggle: function onToggle() {},
543
+ onInputTextChange: function onInputTextChange() {},
514
544
  optionclassification: {},
515
545
  option: {},
516
546
  selected: false,
@@ -525,6 +555,7 @@ Option.propTypes = {
525
555
  onClick: _propTypes["default"].func,
526
556
  onSelect: _propTypes["default"].func,
527
557
  onToggle: _propTypes["default"].func,
558
+ onInputTextChange: _propTypes["default"].func,
528
559
  option: _propTypes["default"].object,
529
560
  optionclassification: _propTypes["default"].object,
530
561
  selected: _propTypes["default"].bool,
@@ -94,7 +94,8 @@ var OptionsList = function OptionsList(_ref2) {
94
94
  viewStockInformation = props.viewStockInformation,
95
95
  LoadingComponent = props.LoadingComponent,
96
96
  OptionComponent = props.OptionComponent,
97
- isAdminMode = props.isAdminMode;
97
+ isAdminMode = props.isAdminMode,
98
+ setOptionInputText = props.setOptionInputText;
98
99
  var classes = useStyles();
99
100
 
100
101
  var createOptions = function createOptions() {
@@ -143,6 +144,7 @@ var OptionsList = function OptionsList(_ref2) {
143
144
  viewDetails: viewDetails,
144
145
  viewStockInformation: viewStockInformation,
145
146
  onClick: onOptionClicked,
147
+ onInputTextChange: setOptionInputText,
146
148
  onToggle: onToggle,
147
149
  isAdminMode: isAdminMode
148
150
  });
@@ -205,6 +207,7 @@ OptionsList.propTypes = {
205
207
  onClose: _propTypes["default"].func,
206
208
  onSelect: _propTypes["default"].func,
207
209
  onToggle: _propTypes["default"].func,
210
+ setOptionInputText: _propTypes["default"].func,
208
211
  options: _propTypes["default"].array,
209
212
  optionclassification: _propTypes["default"].object,
210
213
  show: _propTypes["default"].bool,
@@ -1,11 +1,13 @@
1
1
  "use strict";
2
2
 
3
+ function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); }
4
+
3
5
  Object.defineProperty(exports, "__esModule", {
4
6
  value: true
5
7
  });
6
8
  exports["default"] = exports.StyledProductPart = void 0;
7
9
 
8
- var _react = _interopRequireDefault(require("react"));
10
+ var _react = _interopRequireWildcard(require("react"));
9
11
 
10
12
  var _propTypes = _interopRequireDefault(require("prop-types"));
11
13
 
@@ -25,6 +27,10 @@ var _styles = require("@material-ui/core/styles");
25
27
 
26
28
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }
27
29
 
30
+ function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
31
+
32
+ function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || _typeof(obj) !== "object" && typeof obj !== "function") { return { "default": obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj["default"] = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
33
+
28
34
  function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
29
35
 
30
36
  var ProductPart = function ProductPart(_ref) {
@@ -35,9 +41,16 @@ var ProductPart = function ProductPart(_ref) {
35
41
  verticalMode = _ref.verticalMode,
36
42
  setAnchorRef = _ref.setAnchorRef,
37
43
  classes = _ref.classes,
38
- optionListVisible = _ref.optionListVisible;
39
- var selected = optionListVisible && (0, _get["default"])(selectedOption, 'identifier', null) === (0, _get["default"])(optionclassification, 'identifier', '');
44
+ optionListVisible = _ref.optionListVisible,
45
+ onCloseSelected = _ref.onCloseSelected;
46
+ var selected = (0, _get["default"])(selectedOption, 'identifier', null) === (0, _get["default"])(optionclassification, 'identifier', '');
47
+ var selectedAndVisible = optionListVisible && selected;
40
48
  var direction = verticalMode ? 'vertical' : 'horizontal';
49
+ (0, _react.useEffect)(function () {
50
+ if (!optionListVisible && selected) {
51
+ onCloseSelected(optionclassification);
52
+ }
53
+ }, [optionListVisible]);
41
54
 
42
55
  var displayImage = function displayImage() {
43
56
  var imageUrl = displaySwitchedOptions && selectedOption ? (0, _getImageUrl["default"])(selectedOption.thumbnail) : (0, _getImageUrl["default"])(optionclassification.thumbnail);
@@ -66,7 +79,7 @@ var ProductPart = function ProductPart(_ref) {
66
79
  className: (0, _clsx["default"])(classes.root, direction, (0, _customClassName["default"])('component')),
67
80
  ref: setAnchorRef
68
81
  }, /*#__PURE__*/_react["default"].createElement("div", {
69
- className: "".concat(classes.marker, " ").concat(direction, " ").concat(selected ? 'selected' : '')
82
+ className: "".concat(classes.marker, " ").concat(direction, " ").concat(selectedAndVisible ? 'selected' : '')
70
83
  }), /*#__PURE__*/_react["default"].createElement("div", {
71
84
  className: "".concat(classes.content, " ").concat(direction),
72
85
  onClick: onClick
@@ -91,7 +104,8 @@ ProductPart.propTypes = {
91
104
  verticalMode: _propTypes["default"].bool,
92
105
  setAnchorRef: _propTypes["default"].func,
93
106
  classes: _propTypes["default"].object,
94
- optionListVisible: _propTypes["default"].bool
107
+ optionListVisible: _propTypes["default"].bool,
108
+ onCloseSelected: _propTypes["default"].func
95
109
  };
96
110
  var StyledProductPart = (0, _styles.withStyles)(function (theme) {
97
111
  var _root, _selected;
@@ -90,7 +90,8 @@ var ProductPartsList = function ProductPartsList(_ref) {
90
90
  ProductPartComponent = _ref.ProductPartComponent,
91
91
  CallToActionComponent = _ref.CallToActionComponent,
92
92
  width = _ref.width,
93
- optionListVisible = _ref.optionListVisible;
93
+ optionListVisible = _ref.optionListVisible,
94
+ onCloseSelectedPart = _ref.onCloseSelectedPart;
94
95
  var classes = useStyles();
95
96
 
96
97
  var _useState = (0, _react.useState)(null),
@@ -113,7 +114,8 @@ var ProductPartsList = function ProductPartsList(_ref) {
113
114
  optionclassification: option,
114
115
  selectedOption: selectedoptionclassification,
115
116
  verticalMode: vertical,
116
- optionListVisible: optionListVisible
117
+ optionListVisible: optionListVisible,
118
+ onCloseSelected: onCloseSelectedPart
117
119
  }, refProps));
118
120
  })), showStartHere && width !== 'xs' && /*#__PURE__*/_react["default"].createElement(CallToActionComponent, {
119
121
  offsetDirection: vertical ? 'right' : 'top',
@@ -131,7 +133,8 @@ ProductPartsList.defaultProps = {
131
133
  selectedoptionclassification: {},
132
134
  showStartHere: false,
133
135
  vertical: true,
134
- ProductPartComponent: _ProductPart["default"]
136
+ ProductPartComponent: _ProductPart["default"],
137
+ onCloseSelectedPart: function onCloseSelectedPart() {}
135
138
  };
136
139
  ProductPartsList.propTypes = {
137
140
  onSelect: _propTypes["default"].func,
@@ -143,7 +146,8 @@ ProductPartsList.propTypes = {
143
146
  ProductPartComponent: _propTypes["default"].elementType,
144
147
  CallToActionComponent: _propTypes["default"].elementType,
145
148
  width: _propTypes["default"].string,
146
- optionListVisible: _propTypes["default"].bool
149
+ optionListVisible: _propTypes["default"].bool,
150
+ onCloseSelectedPart: _propTypes["default"].func
147
151
  };
148
152
 
149
153
  var _default = (0, _core.withWidth)({
@@ -46,16 +46,19 @@ var getValidationErrors = function getValidationErrors(configuratorState) {
46
46
  return (0, _cached.getCached)('getValidationErrors', validation, optionclassifications && optionclassifications.length).use(function () {
47
47
  var errors = validation.validationErrors || validation.errors || {};
48
48
  return !optionclassifications ? [] : Object.entries(errors).map(function (_ref) {
49
+ var _optionclassification;
50
+
49
51
  var _ref2 = _slicedToArray(_ref, 2),
50
52
  key = _ref2[0],
51
53
  error = _ref2[1];
52
54
 
53
55
  return {
54
- title: optionclassifications.find(function (_ref3) {
56
+ title: ((_optionclassification = optionclassifications.find(function (_ref3) {
55
57
  var identifier = _ref3.identifier;
56
58
  return identifier === key;
57
- }).title,
58
- errors: error.errors
59
+ })) === null || _optionclassification === void 0 ? void 0 : _optionclassification.title) || error.componentTitle,
60
+ errors: error.errors,
61
+ key: key
59
62
  };
60
63
  });
61
64
  });
@@ -15,6 +15,8 @@ var _OptionsList = _interopRequireDefault(require("../../Components/OptionsList"
15
15
 
16
16
  var _configuration = require("../../../../configuration");
17
17
 
18
+ var _ServiceLocator = require("../../../../ServiceLocator");
19
+
18
20
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }
19
21
 
20
22
  var mapStateToProps = function mapStateToProps(_ref) {
@@ -40,6 +42,9 @@ var mapDispatchToProps = function mapDispatchToProps(dispatch) {
40
42
  },
41
43
  onClose: function onClose() {
42
44
  return dispatch((0, _Actions2.setVisible)('optionlist', false));
45
+ },
46
+ setOptionInputText: function setOptionInputText(identifier, value) {
47
+ return _ServiceLocator.Services.configurator.setOptionInputText(identifier, value);
43
48
  }
44
49
  };
45
50
  };
@@ -15,6 +15,8 @@ var _CallToAction = _interopRequireDefault(require("../../../../Shared/Component
15
15
 
16
16
  var _memoize = _interopRequireDefault(require("../../../../../Utils/Function/memoize"));
17
17
 
18
+ var _Actions = require("../../../../Reducers/Configurator/Actions");
19
+
18
20
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }
19
21
 
20
22
  var removeHiddenComponents = (0, _memoize["default"])(function (components) {
@@ -41,8 +43,12 @@ var mapStateToProps = function mapStateToProps(_ref2) {
41
43
  };
42
44
  };
43
45
 
44
- var mapDispatchToProps = function mapDispatchToProps() {
45
- return {};
46
+ var mapDispatchToProps = function mapDispatchToProps(dispatch) {
47
+ return {
48
+ onCloseSelectedPart: function onCloseSelectedPart(optionClassification) {
49
+ return dispatch((0, _Actions.applyOptionInputText)(optionClassification));
50
+ }
51
+ };
46
52
  };
47
53
 
48
54
  var _default = (0, _ComponentContainer.containerConnect)(mapStateToProps, mapDispatchToProps);
@@ -3,12 +3,15 @@
3
3
  Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
- exports.setSelectedCalculation = exports.switchSelectedAmount = exports.setComment = exports.deleteSelectedAmounts = exports.setSelectedAmounts = exports.deleteSelectedAmount = exports.clearBulkNames = exports.saveBulkNames = exports.setSelectedAmount = exports.loadDesignerData = exports.receiveDesignerData = exports.loadConfiguration = exports.viewOptionDetails = exports.selectMultipleOptions = exports.selectOption = exports.resolveConflicts = exports.loadInitialOptionclassification = exports.fetchInitialConfiguration = exports.setConflictingSwitchoptionData = exports.setOptionclassificationChecked = exports.setCalculationEnabled = exports.setSelectedVariantIdentifier = exports.setStockInformationOption = exports.setLoadIdentifier = exports.setLoadCode = exports.fetchInspirations = exports.fetchClientData = exports.fetchCodesnippets = exports.fetchConfigurationVariants = exports.validateConfiguration = exports.saveConfiguration = exports.fetchOptionDetails = exports.doCalculation = exports.switchOptions = exports.switchOptionsBasic = exports.fetchOptions = exports.fetchConfigurationByCodeAsync = exports.fetchConfigurationByCode = exports.fetchConfiguration = exports.inspectValidationResults = exports.inspectCheckResults = exports.setCustomTitle = exports.receiveInspirations = exports.receiveClientData = exports.fetchConfigurationForDesignerProductPreview = exports.receiveCodesnippets = exports.receiveConfigurationVariants = exports.receiveValidation = exports.receiveSavedConfiguration = exports.clearOptionDetails = exports.receiveOptionDetails = exports.skipNextAutoResolve = exports.setCalculationAutoResolveEnabled = exports.setCalculationErrorsResolved = exports.invalidateCalculation = exports.receiveCalculation = exports.receiveSwitchoptionsresult = exports.receiveOptions = exports.selectOptionclassification = exports.applyVariantAmountPreSelection = exports.setDefaultSelectedVariantIdentifier = exports.deleteMissingVariants = exports.receiveConfiguration = exports.DELETE_SELECTED_AMOUNTS = exports.SET_SELECTED_AMOUNTS = exports.SET_COMMENT = exports.SET_SELECTED_CALCULATION = exports.DELETE_SELECTED_AMOUNT = exports.CLEAR_BULKNAMES = exports.SAVE_BULKNAMES = exports.SWITCH_SELECTED_AMOUNT = exports.SET_SELECTED_AMOUNT = exports.SET_CONFLICTING_SWITCHOPTION_DATA = exports.SET_OPTIONCLASSIFICATION_CHECKED = exports.SET_CALCULATION_AUTO_RESOLVE_ENABLED = exports.SET_CALCULATION_ERRORS_RESOLVED = exports.SET_CALCULATION_ENABLED = exports.SET_SELECTED_VARIANT_IDENTIFIER = exports.SET_STOCK_INFORMATION_OPTION = exports.SET_LOAD_IDENTIFIER = exports.SET_LOAD_CODE = exports.SET_CUSTOM_TITLE = exports.RECEIVE_INSPIRATIONS = exports.RECEIVE_CLIENT_DATA = exports.RECEIVE_CODESNIPPETS = exports.RECEIVE_CONFIGURATIONVARIANTS = exports.RECEIVE_VALIDATION = exports.RECEIVE_SAVEDCONFIGURATION = exports.RECEIVE_OPTIONDETAILS = exports.INVALIDATE_CALCULATION = exports.RECEIVE_CALCULATION = exports.RECEIVE_SWITCHOPTIONSRESULT = exports.RECEIVE_OPTIONS = exports.SELECT_OPTIONCLASSIFICATION = exports.RECEIVE_DESIGNER_DATA = exports.RECEIVE_CONFIGURATION = void 0;
6
+ exports.setOptionInputText = exports.setSelectedCalculation = exports.switchSelectedAmount = exports.setComment = exports.deleteSelectedAmounts = exports.setSelectedAmounts = exports.deleteSelectedAmount = exports.clearBulkNames = exports.saveBulkNames = exports.setSelectedAmount = exports.loadDesignerData = exports.receiveDesignerData = exports.loadConfiguration = exports.viewOptionDetails = exports.selectMultipleOptions = exports.applyOptionInputText = exports.selectOption = exports.resolveConflicts = exports.loadInitialOptionclassification = exports.fetchInitialConfiguration = exports.setConflictingSwitchoptionData = exports.setOptionclassificationChecked = exports.setCalculationEnabled = exports.setSelectedVariantIdentifier = exports.setStockInformationOption = exports.setLoadIdentifier = exports.setLoadCode = exports.fetchInspirations = exports.fetchClientData = exports.fetchCodesnippets = exports.fetchConfigurationVariants = exports.validateConfiguration = exports.saveConfiguration = exports.fetchOptionDetails = exports.doCalculation = exports.switchOptions = exports.switchOptionsBasic = exports.fetchOptions = exports.fetchConfigurationByCodeAsync = exports.fetchConfigurationByCode = exports.fetchConfiguration = exports.inspectValidationResults = exports.inspectCheckResults = exports.setCustomTitle = exports.receiveInspirations = exports.receiveClientData = exports.fetchConfigurationForDesignerProductPreview = exports.receiveCodesnippets = exports.receiveConfigurationVariants = exports.receiveValidation = exports.receiveSavedConfiguration = exports.clearOptionDetails = exports.receiveOptionDetails = exports.skipNextAutoResolve = exports.setCalculationAutoResolveEnabled = exports.setCalculationErrorsResolved = exports.invalidateCalculation = exports.receiveCalculation = exports.receiveSwitchoptionsresult = exports.receiveOptions = exports.selectOptionclassification = exports.applyVariantAmountPreSelection = exports.setDefaultSelectedVariantIdentifier = exports.deleteMissingVariants = exports.receiveConfiguration = exports.DELETE_SELECTED_AMOUNTS = exports.SET_SELECTED_AMOUNTS = exports.SET_COMMENT = exports.SET_SELECTED_CALCULATION = exports.DELETE_SELECTED_AMOUNT = exports.CLEAR_BULKNAMES = exports.SAVE_BULKNAMES = exports.SWITCH_SELECTED_AMOUNT = exports.RESET_OPTION_INPUT_TEXTS = exports.SET_OPTION_INPUT_TEXT = exports.SET_SELECTED_AMOUNT = exports.SET_CONFLICTING_SWITCHOPTION_DATA = exports.SET_OPTIONCLASSIFICATION_CHECKED = exports.SET_CALCULATION_AUTO_RESOLVE_ENABLED = exports.SET_CALCULATION_ERRORS_RESOLVED = exports.SET_CALCULATION_ENABLED = exports.SET_SELECTED_VARIANT_IDENTIFIER = exports.SET_STOCK_INFORMATION_OPTION = exports.SET_LOAD_IDENTIFIER = exports.SET_LOAD_CODE = exports.SET_CUSTOM_TITLE = exports.RECEIVE_INSPIRATIONS = exports.RECEIVE_CLIENT_DATA = exports.RECEIVE_CODESNIPPETS = exports.RECEIVE_CONFIGURATIONVARIANTS = exports.RECEIVE_VALIDATION = exports.RECEIVE_SAVEDCONFIGURATION = exports.RECEIVE_OPTIONDETAILS = exports.INVALIDATE_CALCULATION = exports.RECEIVE_CALCULATION = exports.RECEIVE_SWITCHOPTIONSRESULT = exports.RECEIVE_OPTIONS = exports.SELECT_OPTIONCLASSIFICATION = exports.RECEIVE_DESIGNER_DATA = exports.RECEIVE_CONFIGURATION = void 0;
7
+ exports.resetOptionInputTexts = void 0;
7
8
 
8
9
  var apiActions = _interopRequireWildcard(require("../Actions"));
9
10
 
10
11
  var _lodash = require("lodash");
11
12
 
13
+ var _find = _interopRequireDefault(require("lodash/find"));
14
+
12
15
  var _uniq = _interopRequireDefault(require("lodash/uniq"));
13
16
 
14
17
  var _i18n = require("../../../Framework/i18n");
@@ -121,6 +124,10 @@ var SET_CONFLICTING_SWITCHOPTION_DATA = 'SET_CONFLICTING_SWITCHOPTION_DATA';
121
124
  exports.SET_CONFLICTING_SWITCHOPTION_DATA = SET_CONFLICTING_SWITCHOPTION_DATA;
122
125
  var SET_SELECTED_AMOUNT = 'SET_SELECTED_AMOUNT';
123
126
  exports.SET_SELECTED_AMOUNT = SET_SELECTED_AMOUNT;
127
+ var SET_OPTION_INPUT_TEXT = 'SET_OPTION_INPUT_TEXT';
128
+ exports.SET_OPTION_INPUT_TEXT = SET_OPTION_INPUT_TEXT;
129
+ var RESET_OPTION_INPUT_TEXTS = 'RESET_OPTION_INPUT_TEXTS';
130
+ exports.RESET_OPTION_INPUT_TEXTS = RESET_OPTION_INPUT_TEXTS;
124
131
  var SWITCH_SELECTED_AMOUNT = 'SWITCH_SELECTED_AMOUNT';
125
132
  exports.SWITCH_SELECTED_AMOUNT = SWITCH_SELECTED_AMOUNT;
126
133
  var SAVE_BULKNAMES = 'SAVE_BULKNAMES';
@@ -895,7 +902,7 @@ exports.setCalculationEnabled = setCalculationEnabled;
895
902
  var setOptionclassificationChecked = function setOptionclassificationChecked(optionclassification) {
896
903
  return function (dispatch, getState) {
897
904
  if (_typeof(optionclassification) !== 'object') {
898
- optionclassification = find(getState().configurator.configuration.optionclassifications, {
905
+ optionclassification = (0, _find["default"])(getState().configurator.configuration.optionclassifications, {
899
906
  identifier: optionclassification
900
907
  });
901
908
  }
@@ -1094,17 +1101,60 @@ var selectOption = function selectOption(option) {
1094
1101
 
1095
1102
  exports.selectOption = selectOption;
1096
1103
 
1104
+ var applyOptionInputText = function applyOptionInputText(optionClassification) {
1105
+ return function (dispatch, getState) {
1106
+ var switchOptionData = _defineProperty({}, optionClassification.identifier, []);
1107
+
1108
+ var _getState$configurato4 = getState().configurator,
1109
+ configuration = _getState$configurato4.configuration,
1110
+ optionInputTexts = _getState$configurato4.optionInputTexts;
1111
+
1112
+ if (!optionClassification.selectedoptions) {
1113
+ return;
1114
+ }
1115
+
1116
+ var _iterator3 = _createForOfIteratorHelper(optionClassification.selectedoptions),
1117
+ _step3;
1118
+
1119
+ try {
1120
+ for (_iterator3.s(); !(_step3 = _iterator3.n()).done;) {
1121
+ var selectedOption = _step3.value;
1122
+ var inputText = (0, _lodash.get)((0, _find["default"])(optionInputTexts, ['optionIdentifier', selectedOption.identifier]), 'inputText', null);
1123
+
1124
+ if (inputText && inputText !== selectedOption.inputText) {
1125
+ switchOptionData[optionClassification.identifier].push(_objectSpread(_objectSpread({}, selectedOption), {}, {
1126
+ inputText: inputText,
1127
+ check_results: null
1128
+ }));
1129
+ }
1130
+ }
1131
+ } catch (err) {
1132
+ _iterator3.e(err);
1133
+ } finally {
1134
+ _iterator3.f();
1135
+ }
1136
+
1137
+ dispatch(resetOptionInputTexts());
1138
+
1139
+ if (switchOptionData[optionClassification.identifier].length > 0) {
1140
+ return dispatch(switchOptions(configuration, switchOptionData, false, true, true));
1141
+ }
1142
+ };
1143
+ };
1144
+
1145
+ exports.applyOptionInputText = applyOptionInputText;
1146
+
1097
1147
  var selectMultipleOptions = function selectMultipleOptions(optionsList) {
1098
1148
  return function (dispatch, getState) {
1099
1149
  var configuration = (0, _Selectors.getConfiguration)((0, _Selectors.getConfigurator)(getState()));
1100
1150
  var switchOptionData = {};
1101
1151
 
1102
- var _iterator3 = _createForOfIteratorHelper(optionsList),
1103
- _step3;
1152
+ var _iterator4 = _createForOfIteratorHelper(optionsList),
1153
+ _step4;
1104
1154
 
1105
1155
  try {
1106
- for (_iterator3.s(); !(_step3 = _iterator3.n()).done;) {
1107
- var component = _step3.value;
1156
+ for (_iterator4.s(); !(_step4 = _iterator4.n()).done;) {
1157
+ var component = _step4.value;
1108
1158
  switchOptionData[component.identifier] = component.selectedoptions.map(function (_ref5) {
1109
1159
  var identifier = _ref5.identifier,
1110
1160
  amount = _ref5.amount;
@@ -1116,9 +1166,9 @@ var selectMultipleOptions = function selectMultipleOptions(optionsList) {
1116
1166
  });
1117
1167
  }
1118
1168
  } catch (err) {
1119
- _iterator3.e(err);
1169
+ _iterator4.e(err);
1120
1170
  } finally {
1121
- _iterator3.f();
1171
+ _iterator4.f();
1122
1172
  }
1123
1173
 
1124
1174
  return dispatch(switchOptions(configuration, switchOptionData, false, false, true));
@@ -1133,9 +1183,9 @@ var viewOptionDetails = function viewOptionDetails(option) {
1133
1183
  return;
1134
1184
  }
1135
1185
 
1136
- var _getState$configurato4 = getState().configurator,
1137
- configuration = _getState$configurato4.configuration,
1138
- optiondetails = _getState$configurato4.optiondetails;
1186
+ var _getState$configurato5 = getState().configurator,
1187
+ configuration = _getState$configurato5.configuration,
1188
+ optiondetails = _getState$configurato5.optiondetails;
1139
1189
 
1140
1190
  if (optiondetails.identifier !== option.identifier) {
1141
1191
  dispatch(fetchOptionDetails(option.identifier, configuration));
@@ -1353,4 +1403,22 @@ var setSelectedCalculation = function setSelectedCalculation(identifier, value)
1353
1403
  };
1354
1404
  };
1355
1405
 
1356
- exports.setSelectedCalculation = setSelectedCalculation;
1406
+ exports.setSelectedCalculation = setSelectedCalculation;
1407
+
1408
+ var setOptionInputText = function setOptionInputText(identifier, value) {
1409
+ return {
1410
+ type: SET_OPTION_INPUT_TEXT,
1411
+ identifier: identifier,
1412
+ value: value
1413
+ };
1414
+ };
1415
+
1416
+ exports.setOptionInputText = setOptionInputText;
1417
+
1418
+ var resetOptionInputTexts = function resetOptionInputTexts() {
1419
+ return {
1420
+ type: RESET_OPTION_INPUT_TEXTS
1421
+ };
1422
+ };
1423
+
1424
+ exports.resetOptionInputTexts = resetOptionInputTexts;
@@ -20,6 +20,8 @@ var _lodash = _interopRequireDefault(require("lodash"));
20
20
 
21
21
  var _get = _interopRequireDefault(require("lodash/get"));
22
22
 
23
+ var _findIndex = _interopRequireDefault(require("lodash/findIndex"));
24
+
23
25
  var _omit = _interopRequireDefault(require("lodash/omit"));
24
26
 
25
27
  var _forEach = _interopRequireDefault(require("lodash/forEach"));
@@ -71,7 +73,8 @@ var initialState = {
71
73
  checkedOptionclassifications: {},
72
74
  filteredOptionclassifications: [],
73
75
  selectedVariantIdentifier: null,
74
- selectedAmountsUpdated: false
76
+ selectedAmountsUpdated: false,
77
+ optionInputTexts: []
75
78
  };
76
79
 
77
80
  function configurationHandler(state, action) {
@@ -571,6 +574,36 @@ function configurationModifierHandler(state, action) {
571
574
  return (0, _set["default"])(state, "configuration.customdata.userSelectedCalculation.".concat(action.identifier), action.value);
572
575
  }
573
576
 
577
+ case actionTypes.SET_OPTION_INPUT_TEXT:
578
+ {
579
+ var optionInputTexts = state.optionInputTexts;
580
+ var optionInputTextIndex = (0, _findIndex["default"])(optionInputTexts, ['optionIdentifier', action.identifier]);
581
+
582
+ if (optionInputTextIndex !== -1) {
583
+ optionInputTexts[optionInputTextIndex] = {
584
+ optionIdentifier: action.identifier,
585
+ inputText: action.value
586
+ };
587
+ } else if (optionInputTextIndex === -1 && action.value) {
588
+ optionInputTexts.push({
589
+ optionIdentifier: action.identifier,
590
+ inputText: action.value
591
+ });
592
+ }
593
+
594
+ return _objectSpread(_objectSpread({}, state), {}, {
595
+ optionInputTexts: optionInputTexts
596
+ });
597
+ }
598
+
599
+ case actionTypes.RESET_OPTION_INPUT_TEXTS:
600
+ {
601
+ var _optionInputTexts = [];
602
+ return _objectSpread(_objectSpread({}, state), {}, {
603
+ optionInputTexts: _optionInputTexts
604
+ });
605
+ }
606
+
574
607
  default:
575
608
  return state;
576
609
  }
@@ -1127,6 +1127,11 @@ var ConfiguratorService = /*#__PURE__*/function (_AbstractConfigurator) {
1127
1127
  value: function setSelectedVariantIdentifier(identifier) {
1128
1128
  return _ServiceLocator.Services.store.dispatch(configuratorActions.setSelectedVariantIdentifier(identifier));
1129
1129
  }
1130
+ }, {
1131
+ key: "setOptionInputText",
1132
+ value: function setOptionInputText(identifier, value) {
1133
+ return _ServiceLocator.Services.store.dispatch(configuratorActions.setOptionInputText(identifier, value));
1134
+ }
1130
1135
  /**
1131
1136
  * A simple method for saving the configuration without any additional design data or screenshot
1132
1137
  * @param {string} saveType
package/package.json CHANGED
@@ -1,12 +1,12 @@
1
1
  {
2
2
  "name": "@configuratorware/configurator-frontendgui",
3
- "version": "1.34.2",
3
+ "version": "1.35.1",
4
4
  "license": "UNLICENSED",
5
5
  "private": false,
6
6
  "main": "./index.js",
7
7
  "dependencies": {
8
8
  "@babel/polyfill": "^7.12.1",
9
- "@configuratorware/scripts": "1.34.2",
9
+ "@configuratorware/scripts": "1.35.1",
10
10
  "@hot-loader/react-dom": "^17.0.1",
11
11
  "@material-ui/core": "^4.12.2",
12
12
  "@material-ui/icons": "^4.11.2",
@@ -39,8 +39,8 @@
39
39
  "react-router-dom": "^5.2.0",
40
40
  "react-swipeable": "^5.5.1",
41
41
  "react-zoom-pan-pinch": "^2.1.3",
42
- "redhotmagma-graphics-editor": "1.34.2",
43
- "redhotmagma-visualization": "1.34.2",
42
+ "redhotmagma-graphics-editor": "1.35.1",
43
+ "redhotmagma-visualization": "1.35.1",
44
44
  "redux": "^4.1.0",
45
45
  "redux-logger": "^3.0.6",
46
46
  "redux-persist": "^5.10.0",