@configuratorware/configurator-frontendgui 1.46.11 → 1.47.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 (43) hide show
  1. package/App/Modules/Creator/Components/Option/index.js +2 -1
  2. package/App/Modules/Designer/Components/ColorPalettes/ColorPalettesSearch.js +1 -0
  3. package/App/Modules/Designer/Components/ColorPalettes/index.js +2 -0
  4. package/App/Modules/Designer/Components/DesignAreaControlbox/index.js +2 -0
  5. package/App/Modules/Designer/Components/DesignerSelectionToolbox/CustomFontOverlay.js +2 -1
  6. package/App/Modules/Designer/Components/ImageColorize/index.js +1 -0
  7. package/App/Modules/Designer/Components/ImageEditDialog/ImageUpload.js +3 -1
  8. package/App/Modules/Designer/Components/ImageEditDialog/index.js +32 -2
  9. package/App/Modules/Designer/Components/TextControlbox/index.js +2 -0
  10. package/App/Modules/Designer/Containers/ImageEditDialog.js +6 -2
  11. package/App/Reducers/Configurator/Actions.js +1 -0
  12. package/App/Reducers/ImageGallery/Actions.js +11 -2
  13. package/App/Reducers/ImageGallery/Reducer.js +8 -1
  14. package/App/Services/DesignerService.js +11 -6
  15. package/App/Shared/Components/AcceptDesign/index.js +1 -0
  16. package/App/Shared/Components/AddToBasket/index.js +1 -0
  17. package/App/Shared/Components/ReceiveOfferForm/index.js +5 -0
  18. package/App/configuration.js +1 -0
  19. package/package.json +4 -4
  20. package/public/translations/de_DE.json +3 -2
  21. package/public/translations/en_GB.json +3 -2
  22. package/src/App/Modules/Creator/Components/Option/__snapshots__/index.test.js.snap +1 -0
  23. package/src/App/Modules/Creator/Components/Option/index.js +1 -0
  24. package/src/App/Modules/Designer/Components/ColorPalettes/ColorPalettesSearch.js +1 -0
  25. package/src/App/Modules/Designer/Components/ColorPalettes/index.js +2 -0
  26. package/src/App/Modules/Designer/Components/DesignAreaControlbox/index.js +2 -0
  27. package/src/App/Modules/Designer/Components/DesignerSelectionToolbox/CustomFontOverlay.js +1 -0
  28. package/src/App/Modules/Designer/Components/ImageColorize/__snapshots__/ImageColorize.test.js.snap +2 -0
  29. package/src/App/Modules/Designer/Components/ImageColorize/index.js +1 -0
  30. package/src/App/Modules/Designer/Components/ImageEditDialog/ImageUpload.js +2 -0
  31. package/src/App/Modules/Designer/Components/ImageEditDialog/index.js +34 -0
  32. package/src/App/Modules/Designer/Components/TextControlbox/__snapshots__/index.test.jsx.snap +2 -0
  33. package/src/App/Modules/Designer/Components/TextControlbox/index.js +2 -0
  34. package/src/App/Modules/Designer/Containers/ImageEditDialog.js +6 -0
  35. package/src/App/Reducers/Configurator/Actions.js +1 -0
  36. package/src/App/Reducers/ImageGallery/Actions.js +9 -1
  37. package/src/App/Reducers/ImageGallery/Reducer.js +7 -0
  38. package/src/App/Services/DesignerService.js +6 -0
  39. package/src/App/Shared/Components/AcceptDesign/index.js +1 -0
  40. package/src/App/Shared/Components/AddToBasket/index.js +1 -0
  41. package/src/App/Shared/Components/ReceiveOfferForm/__snapshots__/index.test.jsx.snap +10 -0
  42. package/src/App/Shared/Components/ReceiveOfferForm/index.js +5 -0
  43. package/src/App/configuration.js +1 -0
@@ -408,7 +408,8 @@ var Option = function Option(_ref) {
408
408
  label: '',
409
409
  value: inputText,
410
410
  onChange: handleTextInputChange,
411
- disabled: !selected
411
+ disabled: !selected,
412
+ translate: "no"
412
413
  });
413
414
  };
414
415
  var getRootClassName = function getRootClassName() {
@@ -102,6 +102,7 @@ var ColorPalettesSearch = exports.ColorPalettesSearch = (0, _styles.withStyles)(
102
102
  onChange: props.changeText,
103
103
  onKeyUp: keyUp,
104
104
  margin: "normal",
105
+ translate: "no",
105
106
  InputProps: {
106
107
  endAdornment: /*#__PURE__*/_react["default"].createElement(_InputAdornment["default"], {
107
108
  position: "end"
@@ -584,6 +584,7 @@ var ColorPalettes = /*#__PURE__*/function (_React$Component) {
584
584
  },
585
585
  fullWidth: true,
586
586
  value: colorPalette.title,
587
+ translate: "no",
587
588
  InputProps: {
588
589
  classes: {
589
590
  input: classes.outlinedInput,
@@ -656,6 +657,7 @@ var ColorPalettes = /*#__PURE__*/function (_React$Component) {
656
657
  variant: "outlined",
657
658
  label: (0, _i18n.t)('colorPalettes.colorCode'),
658
659
  placeholder: (0, _i18n.t)('colorPalettes.colorSpecify'),
660
+ translate: "no",
659
661
  fullWidth: true,
660
662
  InputProps: {
661
663
  classes: {
@@ -308,6 +308,7 @@ var DesignAreaControlbox = /*#__PURE__*/function (_React$Component) {
308
308
  },
309
309
  fullWidth: true,
310
310
  value: area.title,
311
+ translate: "no",
311
312
  InputProps: {
312
313
  classes: {
313
314
  input: classes.outlinedInput,
@@ -353,6 +354,7 @@ var DesignAreaControlbox = /*#__PURE__*/function (_React$Component) {
353
354
  },
354
355
  fullWidth: true,
355
356
  value: productionMethod.title,
357
+ translate: "no",
356
358
  InputProps: {
357
359
  classes: {
358
360
  input: classes.outlinedInput,
@@ -112,7 +112,8 @@ var CustomFontOverlay = exports.CustomFontOverlay = function CustomFontOverlay(p
112
112
  classes: {
113
113
  input: classes.customFieldInput
114
114
  }
115
- }
115
+ },
116
+ translate: "no"
116
117
  }))), /*#__PURE__*/_react["default"].createElement(_DialogActions["default"], null, /*#__PURE__*/_react["default"].createElement(_MainButton["default"], {
117
118
  onClick: closeOverlay,
118
119
  size: "medium",
@@ -456,6 +456,7 @@ var ImageColorize = /*#__PURE__*/function (_React$Component) {
456
456
  return !disableInputs && _this2.onEditClick(colorKey);
457
457
  },
458
458
  value: _this2.getColorName(vectorizeColorsMap[colorKey]),
459
+ translate: "no",
459
460
  InputProps: {
460
461
  disableUnderline: true
461
462
  },
@@ -351,7 +351,8 @@ var ImageEditDialog = /*#__PURE__*/function (_React$Component) {
351
351
  ownershipChecked: false,
352
352
  ownershipErrorVisible: false,
353
353
  error: null,
354
- imageData: null
354
+ imageData: null,
355
+ uploadDelayed: false
355
356
  };
356
357
  _this.ownershipGroup = /*#__PURE__*/_react["default"].createRef();
357
358
  _this.dropZone = /*#__PURE__*/_react["default"].createRef();
@@ -395,6 +396,7 @@ var ImageEditDialog = /*#__PURE__*/function (_React$Component) {
395
396
  onChange: this.handleInputChange
396
397
  }))), selectedFile !== null && /*#__PURE__*/_react["default"].createElement(_react["default"].Fragment, null, imageData && /*#__PURE__*/_react["default"].createElement("img", {
397
398
  className: "".concat(classes.imagePreview, " ").concat(imageData.isBright ? classes.checkerBackground : ''),
399
+ alt: selectedFile.name,
398
400
  src: imageData.src
399
401
  }), error === null ? /*#__PURE__*/_react["default"].createElement("div", {
400
402
  className: classes.uploadTextIconContainer
@@ -302,6 +302,29 @@ var styles = function styles(theme) {
302
302
  },
303
303
  buttonContent: {
304
304
  color: theme.palette.primary.darkText
305
+ },
306
+ delayMessageContainer: {
307
+ position: 'absolute',
308
+ top: 0,
309
+ left: 0,
310
+ bottom: 0,
311
+ right: 0,
312
+ display: 'flex',
313
+ alignItems: 'center',
314
+ zIndex: 3,
315
+ backgroundColor: 'transparent'
316
+ },
317
+ delayMessageInner: {
318
+ flex: 1,
319
+ alignItems: 'center',
320
+ flexDirection: 'column',
321
+ display: 'flex',
322
+ paddingTop: 72
323
+ },
324
+ delayMessage: {
325
+ color: theme.palette.text.secondary,
326
+ fontSize: 18,
327
+ fontWeight: 'bold'
305
328
  }
306
329
  };
307
330
  };
@@ -397,7 +420,8 @@ var ImageEditDialog = /*#__PURE__*/function (_React$Component) {
397
420
  onNewUploadClick = _this$props2.onNewUploadClick,
398
421
  uploadImage = _this$props2.uploadImage,
399
422
  selectUserImage = _this$props2.selectUserImage,
400
- showUploadPanel = _this$props2.showUploadPanel;
423
+ showUploadPanel = _this$props2.showUploadPanel,
424
+ uploadDelayed = _this$props2.uploadDelayed;
401
425
  var userImagesIndex = this.state.userImagesIndex;
402
426
  var userImagesIndexes = [];
403
427
  for (var i = userImagesIndex; i < userImages.length && i < userImagesIndex + 3; i++) {
@@ -416,7 +440,13 @@ var ImageEditDialog = /*#__PURE__*/function (_React$Component) {
416
440
  scroll: "paper"
417
441
  }, /*#__PURE__*/_react["default"].createElement(_DialogContent["default"], {
418
442
  className: "".concat(classes.dialogContent, " ").concat(colorPreviewBlockActive ? 'color-preview-block' : '')
419
- }, loaderComponent, /*#__PURE__*/_react["default"].createElement(_Grid["default"], {
443
+ }, loaderComponent, uploadDelayed && /*#__PURE__*/_react["default"].createElement("div", {
444
+ className: classes.delayMessageContainer
445
+ }, /*#__PURE__*/_react["default"].createElement("div", {
446
+ className: classes.delayMessageInner
447
+ }, /*#__PURE__*/_react["default"].createElement(_Typography["default"], {
448
+ className: classes.delayMessage
449
+ }, (0, _i18n.t)('imageEditDialog.uploadDelayed')))), /*#__PURE__*/_react["default"].createElement(_Grid["default"], {
420
450
  container: true,
421
451
  className: classes.rootContainerWrapper
422
452
  }, showNewUploadArea && /*#__PURE__*/_react["default"].createElement(_Grid["default"], {
@@ -295,6 +295,7 @@ var TextControlbox = /*#__PURE__*/function (_React$Component2) {
295
295
  margin: "normal",
296
296
  fullWidth: true,
297
297
  variant: "outlined",
298
+ translate: "no",
298
299
  multiline: true,
299
300
  editorBackgroundColor: editorBackgroundColor
300
301
  }, renderEditorComponent(_this2.props)) : /*#__PURE__*/_react["default"].createElement(_TextField["default"], {
@@ -305,6 +306,7 @@ var TextControlbox = /*#__PURE__*/function (_React$Component2) {
305
306
  margin: "normal",
306
307
  fullWidth: true,
307
308
  variant: "outlined",
309
+ translate: "no",
308
310
  multiline: true,
309
311
  rowsMax: 2,
310
312
  InputLabelProps: {
@@ -753,7 +753,8 @@ var ImageEditDialogContainer = exports.ImageEditDialogContainer = /*#__PURE__*/f
753
753
  customControlElements = _this$props6.customControlElements,
754
754
  checkOwnership = _this$props6.checkOwnership,
755
755
  designProductionMethod = _this$props6.designProductionMethod,
756
- client = _this$props6.client;
756
+ client = _this$props6.client,
757
+ uploadDelayed = _this$props6.uploadDelayed;
757
758
  var _this$state3 = this.state,
758
759
  preview = _this$state3.preview,
759
760
  clipping = _this$state3.clipping,
@@ -785,6 +786,7 @@ var ImageEditDialogContainer = exports.ImageEditDialogContainer = /*#__PURE__*/f
785
786
  backgroundSelected: clipping,
786
787
  preview: preview,
787
788
  colorPickerEnabled: !!clipping,
789
+ uploadDelayed: uploadDelayed,
788
790
  continueButtonDisabled: continueButtonDisabled,
789
791
  continueClick: this.continueClick,
790
792
  showWarningMessage: showWarningMessage,
@@ -892,6 +894,7 @@ var mapStateToProps = function mapStateToProps(state) {
892
894
  var initialColorMaxAmount = (0, _Selectors2.getInitialMaxColorAmount)(state);
893
895
  var colorPreviewRequirementFulfilled = (0, _Selectors3.isColorPreviewCompatible)(state, userImage);
894
896
  var client = (0, _Selectors5.getClient)((0, _Selectors5.getConfigurator)(state));
897
+ var uploadDelayed = imageGallery.uploadDelayed;
895
898
  return {
896
899
  Component: open ? ImageEditDialogContainer : function () {
897
900
  return null;
@@ -920,7 +923,8 @@ var mapStateToProps = function mapStateToProps(state) {
920
923
  initialColorMaxAmount: initialColorMaxAmount,
921
924
  colorPreviewRequirementFulfilled: colorPreviewRequirementFulfilled,
922
925
  designProductionMethod: designProductionMethod,
923
- client: client
926
+ client: client,
927
+ uploadDelayed: uploadDelayed
924
928
  };
925
929
  };
926
930
  var mapDispatchToProps = function mapDispatchToProps(dispatch) {
@@ -676,6 +676,7 @@ var fetchInitialConfiguration = exports.fetchInitialConfiguration = function fet
676
676
  dispatch((0, _Actions2.reportConfigurationNotFoundError)((0, _i18n.t)('loadConfiguration.error.loadingFailed')));
677
677
  } else {
678
678
  _ServiceLocator.Services.analytics.triggerEvent(_Constant.EventTypes.load_item, configuration.data.item.identifier);
679
+ dispatch(setLoadCode(null));
679
680
  }
680
681
  });
681
682
  } else if ((0, _configuration.getConf)('loadVariantsFirst')) {
@@ -4,7 +4,7 @@ function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" ==
4
4
  Object.defineProperty(exports, "__esModule", {
5
5
  value: true
6
6
  });
7
- exports.uploadImage = exports.updateImage = exports.setSelectedImageData = exports.setSelectedImageByIdentifier = exports.setSelectedImage = exports.setModeToEdit = exports.setModeToAdd = exports.selectTags = exports.selectTag = exports.receiveGalleryTags = exports.getGalleryUrlForTags = exports.fetchTags = exports.fetchGallery = exports.editImage = exports.dismissError = exports.commitChanges = exports.addImagesFromDesignArea = exports.addGalleryImageToUserImages = exports.WN_UPLOAD_IMAGE = exports.WN_LOAD_TAGS = exports.WN_LOAD_IMAGES = exports.URL_UPLOAD = exports.URL_TAGS = exports.URL_GALLERY = exports.UPDATE_IMAGE = exports.SET_SELECTED_IMAGE = exports.SET_MODE = exports.SELECT_GALLERY_TAGS = exports.SELECT_GALLERY_TAG = exports.RECEIVE_IMAGE_UPLOAD_DATA = exports.RECEIVE_GALLERY_TAGS = exports.RECEIVE_GALLERY = exports.ImageGalleryModes = exports.DISMISS_ERROR = exports.COMMIT_CHANGES = exports.ADD_IMAGES_FROM_DESIGN_AREA = exports.ADD_GALLERY_IMAGE_TO_USER_IMAGES = void 0;
7
+ exports.uploadImage = exports.updateUploadDelayed = exports.updateImage = exports.setSelectedImageData = exports.setSelectedImageByIdentifier = exports.setSelectedImage = exports.setModeToEdit = exports.setModeToAdd = exports.selectTags = exports.selectTag = exports.receiveGalleryTags = exports.getGalleryUrlForTags = exports.fetchTags = exports.fetchGallery = exports.editImage = exports.dismissError = exports.commitChanges = exports.addImagesFromDesignArea = exports.addGalleryImageToUserImages = exports.WN_UPLOAD_IMAGE = exports.WN_LOAD_TAGS = exports.WN_LOAD_IMAGES = exports.URL_UPLOAD = exports.URL_TAGS = exports.URL_GALLERY = exports.UPDATE_UPLOAD_DELAYED = exports.UPDATE_IMAGE = exports.SET_SELECTED_IMAGE = exports.SET_MODE = exports.SELECT_GALLERY_TAGS = exports.SELECT_GALLERY_TAG = exports.RECEIVE_IMAGE_UPLOAD_DATA = exports.RECEIVE_GALLERY_TAGS = exports.RECEIVE_GALLERY = exports.ImageGalleryModes = exports.DISMISS_ERROR = exports.COMMIT_CHANGES = exports.ADD_IMAGES_FROM_DESIGN_AREA = exports.ADD_GALLERY_IMAGE_TO_USER_IMAGES = void 0;
8
8
  var _Actions = require("../Actions");
9
9
  var _Actions2 = require("../UI/Actions");
10
10
  var _Selectors = require("./Selectors");
@@ -28,6 +28,7 @@ var RECEIVE_IMAGE_UPLOAD_DATA = exports.RECEIVE_IMAGE_UPLOAD_DATA = 'imageGaller
28
28
  var WN_LOAD_IMAGES = exports.WN_LOAD_IMAGES = 'imageGallery/LOAD_IMAGES';
29
29
  var WN_LOAD_TAGS = exports.WN_LOAD_TAGS = 'imageGallery/LOAD_TAGS';
30
30
  var WN_UPLOAD_IMAGE = exports.WN_UPLOAD_IMAGE = 'imageGallery/UPLOAD_IMAGE';
31
+ var UPDATE_UPLOAD_DELAYED = exports.UPDATE_UPLOAD_DELAYED = 'imageGallery/UPDATE_UPLOAD_DELAYED';
31
32
  var URL_TAGS = exports.URL_TAGS = 'imagegalleryimage/tags';
32
33
  var URL_GALLERY = exports.URL_GALLERY = 'imagegalleryimage?&tags={tag}';
33
34
  var URL_UPLOAD = exports.URL_UPLOAD = 'userimages/designer/edit';
@@ -110,6 +111,12 @@ var updateImage = exports.updateImage = function updateImage(identifier, imageDa
110
111
  });
111
112
  };
112
113
  };
114
+ var updateUploadDelayed = exports.updateUploadDelayed = function updateUploadDelayed(uploadDelayed) {
115
+ return {
116
+ type: UPDATE_UPLOAD_DELAYED,
117
+ uploadDelayed: uploadDelayed
118
+ };
119
+ };
113
120
  var uploadImage = exports.uploadImage = function uploadImage(file) {
114
121
  return (0, _Actions2.createAsyncTask)(WN_UPLOAD_IMAGE, /*#__PURE__*/function () {
115
122
  var _ref = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee(dispatch, getState) {
@@ -126,7 +133,9 @@ var uploadImage = exports.uploadImage = function uploadImage(file) {
126
133
  _context.next = 8;
127
134
  return dispatch((0, _Actions.postDataAsync)(URL_UPLOAD, data, (0, _Actions.createDefaultReceiver)(RECEIVE_IMAGE_UPLOAD_DATA, {
128
135
  vectorizedLogoMandatory: vectorizedLogoMandatory
129
- }), {}, {}, {
136
+ }), {
137
+ timeout: 180000
138
+ }, {}, {
130
139
  useLocalErrorHandling: true
131
140
  }));
132
141
  case 8:
@@ -56,7 +56,8 @@ var initialState = {
56
56
  userImages: [],
57
57
  selectedImage: null,
58
58
  lastErrorCode: null,
59
- mode: null
59
+ mode: null,
60
+ uploadDelayed: false
60
61
  };
61
62
  function imageGalleryReducer() {
62
63
  var state = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : initialState;
@@ -254,6 +255,12 @@ function imageGalleryReducer() {
254
255
  lastErrorCode: null
255
256
  });
256
257
  }
258
+ case actionTypes.UPDATE_UPLOAD_DELAYED:
259
+ {
260
+ return _objectSpread(_objectSpread({}, state), {}, {
261
+ uploadDelayed: action.uploadDelayed
262
+ });
263
+ }
257
264
  default:
258
265
  return state;
259
266
  }
@@ -235,27 +235,32 @@ var DesignerService = exports["default"] = /*#__PURE__*/function () {
235
235
  key: "uploadFile",
236
236
  value: function () {
237
237
  var _uploadFile = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee5(file) {
238
- var response, url, term;
238
+ var timeout, response, url, term;
239
239
  return _regeneratorRuntime().wrap(function _callee5$(_context5) {
240
240
  while (1) switch (_context5.prev = _context5.next) {
241
241
  case 0:
242
- _context5.next = 2;
242
+ timeout = setTimeout(function () {
243
+ _ServiceLocator.Services.store.dispatch((0, _Actions.updateUploadDelayed)(true));
244
+ }, 10000);
245
+ _context5.next = 3;
243
246
  return _ServiceLocator.Services.store.dispatch((0, _Actions.uploadImage)(file));
244
- case 2:
247
+ case 3:
245
248
  response = _context5.sent;
249
+ clearTimeout(timeout);
246
250
  url = (0, _get["default"])(response, 'data.preview.url');
247
251
  term = (0, _get["default"])(response, 'data.message');
248
252
  if (term) {
249
253
  _ServiceLocator.Services.ui.alertMessage((0, _i18n.t)(term));
250
254
  }
251
255
  if (url) {
252
- _context5.next = 8;
256
+ _context5.next = 10;
253
257
  break;
254
258
  }
255
259
  throw new Error('Preview image url is not specified!');
256
- case 8:
260
+ case 10:
261
+ _ServiceLocator.Services.store.dispatch((0, _Actions.updateUploadDelayed)(false));
257
262
  return _context5.abrupt("return", "".concat((0, _configuration.getConf)('network.host')).concat(url));
258
- case 9:
263
+ case 12:
259
264
  case "end":
260
265
  return _context5.stop();
261
266
  }
@@ -96,6 +96,7 @@ var AcceptDesign = /*#__PURE__*/function (_React$Component) {
96
96
  onChange: handleChange,
97
97
  margin: "normal",
98
98
  variant: "outlined",
99
+ translate: "no",
99
100
  classes: {
100
101
  root: classes.MuiFormControlRoot
101
102
  }
@@ -123,6 +123,7 @@ var AddToBasket = /*#__PURE__*/function (_React$Component) {
123
123
  onChange: handleChange,
124
124
  margin: "normal",
125
125
  variant: "outlined",
126
+ translate: "no",
126
127
  classes: {
127
128
  root: classes.MuiFormControlRoot
128
129
  }
@@ -211,6 +211,7 @@ var ReceiveOfferForm = /*#__PURE__*/function (_React$Component) {
211
211
  label: (0, _i18n.t)('receiveOfferForm.name'),
212
212
  margin: "dense",
213
213
  variant: "outlined",
214
+ translate: "no",
214
215
  fullWidth: true,
215
216
  error: !!name.error,
216
217
  helperText: getErrorMessage(name.error),
@@ -233,6 +234,7 @@ var ReceiveOfferForm = /*#__PURE__*/function (_React$Component) {
233
234
  label: (0, _i18n.t)('receiveOfferForm.company'),
234
235
  margin: "dense",
235
236
  variant: "outlined",
237
+ translate: "no",
236
238
  fullWidth: true,
237
239
  error: !!company.error,
238
240
  helperText: getErrorMessage(company.error),
@@ -310,6 +312,7 @@ var ReceiveOfferForm = /*#__PURE__*/function (_React$Component) {
310
312
  label: (0, _i18n.t)('receiveOfferForm.city'),
311
313
  margin: "dense",
312
314
  variant: "outlined",
315
+ translate: "no",
313
316
  fullWidth: true,
314
317
  error: !!city.error,
315
318
  helperText: getErrorMessage(city.error),
@@ -332,6 +335,7 @@ var ReceiveOfferForm = /*#__PURE__*/function (_React$Component) {
332
335
  label: (0, _i18n.t)('receiveOfferForm.street'),
333
336
  margin: "dense",
334
337
  variant: "outlined",
338
+ translate: "no",
335
339
  fullWidth: true,
336
340
  error: !!street.error,
337
341
  helperText: getErrorMessage(street.error),
@@ -354,6 +358,7 @@ var ReceiveOfferForm = /*#__PURE__*/function (_React$Component) {
354
358
  label: (0, _i18n.t)('receiveOfferForm.country'),
355
359
  margin: "dense",
356
360
  variant: "outlined",
361
+ translate: "no",
357
362
  fullWidth: true,
358
363
  error: !!country.error,
359
364
  helperText: getErrorMessage(country.error),
@@ -397,6 +397,7 @@ function setLanguage() {
397
397
  }
398
398
  applicationConfiguration.language = language.replace('_', '-');
399
399
  _Api["default"].setLanguage(applicationConfiguration.language);
400
+ document.documentElement.lang = language.substring(0, 2);
400
401
  (0, _Translations.initLanguage)(applicationConfiguration.language, applicationConfiguration.network.baseURL);
401
402
  }
402
403
 
package/package.json CHANGED
@@ -1,12 +1,12 @@
1
1
  {
2
2
  "name": "@configuratorware/configurator-frontendgui",
3
- "version": "1.46.11",
3
+ "version": "1.47.0",
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.46.11",
9
+ "@configuratorware/scripts": "1.47.0",
10
10
  "@material-ui/core": "^4.12.4",
11
11
  "@material-ui/icons": "^4.11.3",
12
12
  "@material-ui/lab": "^4.0.0-alpha.61",
@@ -36,8 +36,8 @@
36
36
  "react-router-dom": "^5.3.4",
37
37
  "react-swipeable": "^5.5.1",
38
38
  "react-zoom-pan-pinch": "^2.1.3",
39
- "redhotmagma-graphics-editor": "1.46.11",
40
- "redhotmagma-visualization": "1.46.11",
39
+ "redhotmagma-graphics-editor": "1.47.0",
40
+ "redhotmagma-visualization": "1.47.0",
41
41
  "redux": "^4.1.0",
42
42
  "redux-logger": "^3.0.6",
43
43
  "redux-persist": "^5.10.0",
@@ -104,7 +104,7 @@
104
104
  "imageOwnershipError": "Bitte bestätigen, um fortzufahren",
105
105
  "uploadSizeError": "Die gewählte Datei is größer als die maximal erlaubte Größe von %{uploadSize} MB",
106
106
  "uploadFormatError": "Zulässige Bildformate: %{formats}",
107
- "processingFailed": "Die gewählte Datei kann leider nicht verwendet werden. Bitte eine andere Datei wählen.",
107
+ "processingFailed": "Bei der Verarbeitung der Bilddatei ist ein Problem aufgetreten. Ihre Bilddatei ist möglicherweise zu groß oder beschädigt.",
108
108
  "termsAndConditions": "Ich habe die %{termsAndConditionsLink} gelesen und erkläre mich einverstanden.",
109
109
  "termsAndConditionsLink": "",
110
110
  "termsAndConditionsLinkLabel": "AGB",
@@ -327,7 +327,8 @@
327
327
  "changeColorAmount": "Farbanzahl wählen",
328
328
  "imageWithoutVectorization": "Das gewählte Produktionsverfahren „%{designProductionMethodName}“ ermöglicht den Druck mit beliebigen Farben. Eine Bearbeitung des Bildes ist also nicht notwendig. <br/> Sollten Sie dennoch wünschen, die Farben Ihres Bildes zu verändern, nutzen Sie die Funktion „Farben bearbeiten“",
329
329
  "editColors": "Farben bearbeiten",
330
- "resetButton": "Bearbeitung zurücksetzen"
330
+ "resetButton": "Bearbeitung zurücksetzen",
331
+ "uploadDelayed": "Bitte haben Sie Geduld, dieser Vorgang kann länger dauern!"
331
332
  },
332
333
  "vector_not_paths_only": "Bei eingebetteten Texten oder Bildern kann es zu Abweichungen in der Darstellung kommen. Um eine einheitliche Darstellung zu garantieren, sollten diese in Pfade umgewandelt werden.",
333
334
  "errorTypes": {
@@ -104,7 +104,7 @@
104
104
  "imageOwnershipError": "Please accept to confirm.",
105
105
  "uploadSizeError": "The selected file is larger than the maximum allowed size of %{uploadSize} MB.",
106
106
  "uploadFormatError": "Allowed file types: %{formats}",
107
- "processingFailed": "The selected file cannot be processed. Please select another file.",
107
+ "processingFailed": "There was a problem in processing the image file. Your image file might be too huge or could be corrupted.",
108
108
  "termsAndConditions": "I have read the %{termsAndConditionsLink} and agree to them.",
109
109
  "termsAndConditionsLink": "",
110
110
  "termsAndConditionsLinkLabel": "terms and conditions",
@@ -327,7 +327,8 @@
327
327
  "imageWithoutVectorization": "The chosen production method „%{designProductionMethodName}“ allows printing with any colours. It is therefore not necessary to edit the image. <br/> Should you nevertheless wish to change the colours of your image, use the function „Edit colours“",
328
328
  "editColors": "edit colors",
329
329
  "resetButton": "Reset changes",
330
- "pictureEmbroideryHint": "For visualization of the embroidery on the product, please activate color preview."
330
+ "pictureEmbroideryHint": "For visualization of the embroidery on the product, please activate color preview.",
331
+ "uploadDelayed": "Please be patient, this operation might take longer!"
331
332
  },
332
333
  "vector_not_paths_only": "Embedded texts or images can lead to anomalous results. To ensure a consistent display those embedded data should be converted to vectors.",
333
334
  "errorTypes": {
@@ -325,6 +325,7 @@ exports[`Option renders with TextInput 1`] = `
325
325
  </div>
326
326
  <div
327
327
  class="MuiFormControl-root MuiTextField-root Option-optionTextInput-148"
328
+ translate="no"
328
329
  >
329
330
  <div
330
331
  class="MuiInputBase-root MuiInput-root MuiInput-underline Mui-disabled Mui-disabled MuiInputBase-formControl MuiInput-formControl"
@@ -455,6 +455,7 @@ const Option = ({ children, render, ...props }) => {
455
455
  value={inputText}
456
456
  onChange={handleTextInputChange}
457
457
  disabled={!selected}
458
+ translate="no"
458
459
  />
459
460
  );
460
461
  };
@@ -78,6 +78,7 @@ export const ColorPalettesSearch = withStyles(styles, { name: 'ColorPalettesSear
78
78
  onChange={props.changeText}
79
79
  onKeyUp={keyUp}
80
80
  margin="normal"
81
+ translate="no"
81
82
  InputProps={{
82
83
  endAdornment: (
83
84
  <InputAdornment position="end">
@@ -591,6 +591,7 @@ class ColorPalettes extends React.Component {
591
591
  inputProps={{ readOnly: true }}
592
592
  fullWidth={true}
593
593
  value={colorPalette.title}
594
+ translate="no"
594
595
  InputProps={{
595
596
  classes: {
596
597
  input: classes.outlinedInput,
@@ -672,6 +673,7 @@ class ColorPalettes extends React.Component {
672
673
  variant="outlined"
673
674
  label={t('colorPalettes.colorCode')}
674
675
  placeholder={t('colorPalettes.colorSpecify')}
676
+ translate="no"
675
677
  fullWidth
676
678
  InputProps={{
677
679
  classes: {
@@ -356,6 +356,7 @@ class DesignAreaControlbox extends React.Component {
356
356
  inputProps={{ readOnly: true }}
357
357
  fullWidth={true}
358
358
  value={area.title}
359
+ translate="no"
359
360
  InputProps={{
360
361
  classes: {
361
362
  input: classes.outlinedInput,
@@ -422,6 +423,7 @@ class DesignAreaControlbox extends React.Component {
422
423
  inputProps={{ readOnly: true }}
423
424
  fullWidth={true}
424
425
  value={productionMethod.title}
426
+ translate="no"
425
427
  InputProps={{
426
428
  classes: {
427
429
  input: classes.outlinedInput,
@@ -91,6 +91,7 @@ export const CustomFontOverlay = props => {
91
91
  input: classes.customFieldInput,
92
92
  },
93
93
  }}
94
+ translate="no"
94
95
  />
95
96
  </div>
96
97
  </DialogContent>
@@ -125,6 +125,7 @@ Array [
125
125
  >
126
126
  <div
127
127
  class="MuiFormControl-root MuiTextField-root MuiFormControl-fullWidth"
128
+ translate="no"
128
129
  >
129
130
  <div
130
131
  class="MuiInputBase-root MuiInput-root Mui-disabled Mui-disabled MuiInputBase-fullWidth MuiInput-fullWidth MuiInputBase-formControl MuiInput-formControl"
@@ -187,6 +188,7 @@ Array [
187
188
  >
188
189
  <div
189
190
  class="MuiFormControl-root MuiTextField-root MuiFormControl-fullWidth"
191
+ translate="no"
190
192
  >
191
193
  <div
192
194
  class="MuiInputBase-root MuiInput-root Mui-disabled Mui-disabled MuiInputBase-fullWidth MuiInput-fullWidth MuiInputBase-formControl MuiInput-formControl"
@@ -433,6 +433,7 @@ class ImageColorize extends React.Component {
433
433
  fullWidth
434
434
  onClick={() => !disableInputs && this.onEditClick(colorKey)}
435
435
  value={this.getColorName(vectorizeColorsMap[colorKey])}
436
+ translate="no"
436
437
  InputProps={{ disableUnderline: true }}
437
438
  inputProps={{ className: classes.colorInput }}
438
439
  />
@@ -192,6 +192,7 @@ class ImageEditDialog extends React.Component {
192
192
  ownershipErrorVisible: false,
193
193
  error: null,
194
194
  imageData: null,
195
+ uploadDelayed: false,
195
196
  };
196
197
  this.ownershipGroup = React.createRef();
197
198
  this.dropZone = React.createRef();
@@ -355,6 +356,7 @@ class ImageEditDialog extends React.Component {
355
356
  className={`${classes.imagePreview} ${
356
357
  imageData.isBright ? classes.checkerBackground : ''
357
358
  }`}
359
+ alt={selectedFile.name}
358
360
  src={imageData.src}
359
361
  />
360
362
  )}
@@ -316,6 +316,29 @@ const styles = theme => ({
316
316
  buttonContent: {
317
317
  color: theme.palette.primary.darkText,
318
318
  },
319
+ delayMessageContainer: {
320
+ position: 'absolute',
321
+ top: 0,
322
+ left: 0,
323
+ bottom: 0,
324
+ right: 0,
325
+ display: 'flex',
326
+ alignItems: 'center',
327
+ zIndex: 3,
328
+ backgroundColor: 'transparent',
329
+ },
330
+ delayMessageInner: {
331
+ flex: 1,
332
+ alignItems: 'center',
333
+ flexDirection: 'column',
334
+ display: 'flex',
335
+ paddingTop: 72,
336
+ },
337
+ delayMessage: {
338
+ color: theme.palette.text.secondary,
339
+ fontSize: 18,
340
+ fontWeight: 'bold',
341
+ },
319
342
  });
320
343
 
321
344
  class ImageEditDialog extends React.Component {
@@ -344,6 +367,7 @@ class ImageEditDialog extends React.Component {
344
367
  galleryHasImages: PropTypes.bool,
345
368
  showWarningMessage: PropTypes.bool,
346
369
  displayColorPreview: PropTypes.bool,
370
+ uploadDelayed: PropTypes.bool,
347
371
  onOriginalImageAndColorPreviewToggleClick: PropTypes.func,
348
372
  originalImagePreview: PropTypes.string,
349
373
  embroideryNoticeRef: PropTypes.object,
@@ -456,6 +480,7 @@ class ImageEditDialog extends React.Component {
456
480
  uploadImage,
457
481
  selectUserImage,
458
482
  showUploadPanel,
483
+ uploadDelayed,
459
484
  } = this.props;
460
485
 
461
486
  const { userImagesIndex } = this.state;
@@ -486,6 +511,15 @@ class ImageEditDialog extends React.Component {
486
511
  }`}
487
512
  >
488
513
  {loaderComponent}
514
+ {uploadDelayed && (
515
+ <div className={classes.delayMessageContainer}>
516
+ <div className={classes.delayMessageInner}>
517
+ <Typography className={classes.delayMessage}>
518
+ {t('imageEditDialog.uploadDelayed')}
519
+ </Typography>
520
+ </div>
521
+ </div>
522
+ )}
489
523
  <Grid container className={classes.rootContainerWrapper}>
490
524
  {showNewUploadArea && (
491
525
  <Grid item xs={12} sm={12} className={classes.imageEditDialogItem}>
@@ -16,6 +16,7 @@ exports[`renders a boxed component with the boxed prop 1`] = `
16
16
  >
17
17
  <div
18
18
  class="MuiFormControl-root MuiTextField-root TextControlbox-textEditor-22 MuiFormControl-marginNormal MuiFormControl-fullWidth"
19
+ translate="no"
19
20
  >
20
21
  <label
21
22
  class="MuiFormLabel-root MuiInputLabel-root MuiInputLabel-formControl MuiInputLabel-animated MuiInputLabel-shrink MuiInputLabel-outlined MuiFormLabel-filled"
@@ -251,6 +252,7 @@ exports[`renders correctly 1`] = `
251
252
  >
252
253
  <div
253
254
  class="MuiFormControl-root MuiTextField-root TextControlbox-textEditor-22 MuiFormControl-marginNormal MuiFormControl-fullWidth"
255
+ translate="no"
254
256
  >
255
257
  <label
256
258
  class="MuiFormLabel-root MuiInputLabel-root MuiInputLabel-formControl MuiInputLabel-animated MuiInputLabel-shrink MuiInputLabel-outlined MuiFormLabel-filled"
@@ -308,6 +308,7 @@ class TextControlbox extends React.Component {
308
308
  margin="normal"
309
309
  fullWidth
310
310
  variant="outlined"
311
+ translate="no"
311
312
  multiline
312
313
  editorBackgroundColor={editorBackgroundColor}
313
314
  >
@@ -322,6 +323,7 @@ class TextControlbox extends React.Component {
322
323
  margin="normal"
323
324
  fullWidth
324
325
  variant="outlined"
326
+ translate="no"
325
327
  multiline
326
328
  rowsMax={2}
327
329
  InputLabelProps={{ shrink: true }}
@@ -127,6 +127,8 @@ export class ImageEditDialogContainer extends React.Component {
127
127
  customControlElements: PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.node), PropTypes.node]),
128
128
  checkOwnership: PropTypes.bool,
129
129
  client: PropTypes.object,
130
+ designProductionMethod: PropTypes.object,
131
+ uploadDelayed: PropTypes.bool,
130
132
  };
131
133
 
132
134
  static defaultProps = {
@@ -679,6 +681,7 @@ export class ImageEditDialogContainer extends React.Component {
679
681
  checkOwnership,
680
682
  designProductionMethod,
681
683
  client,
684
+ uploadDelayed,
682
685
  } = this.props;
683
686
  const {
684
687
  preview,
@@ -723,6 +726,7 @@ export class ImageEditDialogContainer extends React.Component {
723
726
  backgroundSelected={clipping}
724
727
  preview={preview}
725
728
  colorPickerEnabled={!!clipping}
729
+ uploadDelayed={uploadDelayed}
726
730
  continueButtonDisabled={continueButtonDisabled}
727
731
  continueClick={this.continueClick}
728
732
  showWarningMessage={showWarningMessage}
@@ -828,6 +832,7 @@ const mapStateToProps = state => {
828
832
  const initialColorMaxAmount = getInitialMaxColorAmount(state);
829
833
  const colorPreviewRequirementFulfilled = isColorPreviewCompatible(state, userImage);
830
834
  const client = getClient(getConfigurator(state));
835
+ const uploadDelayed = imageGallery.uploadDelayed;
831
836
 
832
837
  return {
833
838
  Component: open ? ImageEditDialogContainer : () => null,
@@ -856,6 +861,7 @@ const mapStateToProps = state => {
856
861
  colorPreviewRequirementFulfilled,
857
862
  designProductionMethod,
858
863
  client,
864
+ uploadDelayed,
859
865
  };
860
866
  };
861
867
 
@@ -620,6 +620,7 @@ export const fetchInitialConfiguration = () => (dispatch, getState) => {
620
620
  dispatch(reportConfigurationNotFoundError(t('loadConfiguration.error.loadingFailed')));
621
621
  } else {
622
622
  Services.analytics.triggerEvent(EventTypes.load_item, configuration.data.item.identifier);
623
+ dispatch(setLoadCode(null));
623
624
  }
624
625
  });
625
626
  } else if (getConf('loadVariantsFirst')) {
@@ -19,6 +19,7 @@ export const RECEIVE_IMAGE_UPLOAD_DATA = 'imageGallery/RECEIVE_IMAGE_UPLOAD_DATA
19
19
  export const WN_LOAD_IMAGES = 'imageGallery/LOAD_IMAGES';
20
20
  export const WN_LOAD_TAGS = 'imageGallery/LOAD_TAGS';
21
21
  export const WN_UPLOAD_IMAGE = 'imageGallery/UPLOAD_IMAGE';
22
+ export const UPDATE_UPLOAD_DELAYED = 'imageGallery/UPDATE_UPLOAD_DELAYED';
22
23
 
23
24
  export const URL_TAGS = 'imagegalleryimage/tags';
24
25
  export const URL_GALLERY = 'imagegalleryimage?&tags={tag}';
@@ -97,6 +98,11 @@ export const updateImage = (identifier, imageDataPatch, immediateCommit = false)
97
98
  });
98
99
  };
99
100
 
101
+ export const updateUploadDelayed = uploadDelayed => ({
102
+ type: UPDATE_UPLOAD_DELAYED,
103
+ uploadDelayed,
104
+ });
105
+
100
106
  export const uploadImage = file =>
101
107
  createAsyncTask(WN_UPLOAD_IMAGE, async (dispatch, getState) => {
102
108
  const designProductionMethod = getSelectedDesignProductionMethod(getState());
@@ -112,7 +118,9 @@ export const uploadImage = file =>
112
118
  createDefaultReceiver(RECEIVE_IMAGE_UPLOAD_DATA, {
113
119
  vectorizedLogoMandatory,
114
120
  }),
115
- {},
121
+ {
122
+ timeout: 180000,
123
+ },
116
124
  {},
117
125
  {
118
126
  useLocalErrorHandling: true,
@@ -47,6 +47,7 @@ const initialState = {
47
47
  selectedImage: null,
48
48
  lastErrorCode: null,
49
49
  mode: null,
50
+ uploadDelayed: false,
50
51
  };
51
52
 
52
53
  export function imageGalleryReducer(state = initialState, action = {}) {
@@ -271,6 +272,12 @@ export function imageGalleryReducer(state = initialState, action = {}) {
271
272
  lastErrorCode: null,
272
273
  };
273
274
  }
275
+ case actionTypes.UPDATE_UPLOAD_DELAYED: {
276
+ return {
277
+ ...state,
278
+ uploadDelayed: action.uploadDelayed,
279
+ };
280
+ }
274
281
  default:
275
282
  return state;
276
283
  }
@@ -20,6 +20,7 @@ import {
20
20
  fetchGallery,
21
21
  setModeToEdit,
22
22
  setModeToAdd,
23
+ updateUploadDelayed,
23
24
  } from '../Reducers/ImageGallery/Actions';
24
25
  import {
25
26
  createColorData,
@@ -169,7 +170,11 @@ export default class DesignerService {
169
170
  }
170
171
 
171
172
  async uploadFile(file) {
173
+ const timeout = setTimeout(() => {
174
+ Services.store.dispatch(updateUploadDelayed(true));
175
+ }, 10000);
172
176
  const response = await Services.store.dispatch(uploadImage(file));
177
+ clearTimeout(timeout);
173
178
  const url = get(response, 'data.preview.url');
174
179
  const term = get(response, 'data.message');
175
180
  if (term) {
@@ -178,6 +183,7 @@ export default class DesignerService {
178
183
  if (!url) {
179
184
  throw new Error('Preview image url is not specified!');
180
185
  }
186
+ Services.store.dispatch(updateUploadDelayed(false));
181
187
  return `${getConf('network.host')}${url}`;
182
188
  }
183
189
 
@@ -86,6 +86,7 @@ class AcceptDesign extends React.Component {
86
86
  onChange={handleChange}
87
87
  margin="normal"
88
88
  variant="outlined"
89
+ translate="no"
89
90
  classes={{
90
91
  root: classes.MuiFormControlRoot,
91
92
  }}
@@ -124,6 +124,7 @@ class AddToBasket extends React.Component {
124
124
  onChange={handleChange}
125
125
  margin="normal"
126
126
  variant="outlined"
127
+ translate="no"
127
128
  classes={{
128
129
  root: classes.MuiFormControlRoot,
129
130
  }}
@@ -37,6 +37,7 @@ Array [
37
37
  </div>,
38
38
  <div
39
39
  class="MuiFormControl-root MuiTextField-root MuiFormControl-marginDense MuiFormControl-fullWidth"
40
+ translate="no"
40
41
  >
41
42
  <label
42
43
  class="MuiFormLabel-root MuiInputLabel-root MuiInputLabel-formControl MuiInputLabel-animated MuiInputLabel-marginDense MuiInputLabel-outlined ReceiveOfferForm-outlinedLabel-4"
@@ -70,6 +71,7 @@ Array [
70
71
  </div>,
71
72
  <div
72
73
  class="MuiFormControl-root MuiTextField-root MuiFormControl-marginDense MuiFormControl-fullWidth"
74
+ translate="no"
73
75
  >
74
76
  <label
75
77
  class="MuiFormLabel-root MuiInputLabel-root MuiInputLabel-formControl MuiInputLabel-animated MuiInputLabel-marginDense MuiInputLabel-outlined ReceiveOfferForm-outlinedLabel-4"
@@ -179,6 +181,7 @@ Array [
179
181
  >
180
182
  <div
181
183
  class="MuiFormControl-root MuiTextField-root MuiFormControl-marginDense MuiFormControl-fullWidth"
184
+ translate="no"
182
185
  >
183
186
  <label
184
187
  class="MuiFormLabel-root MuiInputLabel-root MuiInputLabel-formControl MuiInputLabel-animated MuiInputLabel-marginDense MuiInputLabel-outlined ReceiveOfferForm-outlinedLabel-4"
@@ -214,6 +217,7 @@ Array [
214
217
  </div>,
215
218
  <div
216
219
  class="MuiFormControl-root MuiTextField-root MuiFormControl-marginDense MuiFormControl-fullWidth"
220
+ translate="no"
217
221
  >
218
222
  <label
219
223
  class="MuiFormLabel-root MuiInputLabel-root MuiInputLabel-formControl MuiInputLabel-animated MuiInputLabel-marginDense MuiInputLabel-outlined ReceiveOfferForm-outlinedLabel-4"
@@ -247,6 +251,7 @@ Array [
247
251
  </div>,
248
252
  <div
249
253
  class="MuiFormControl-root MuiTextField-root MuiFormControl-marginDense MuiFormControl-fullWidth"
254
+ translate="no"
250
255
  >
251
256
  <label
252
257
  class="MuiFormLabel-root MuiInputLabel-root MuiInputLabel-formControl MuiInputLabel-animated MuiInputLabel-marginDense MuiInputLabel-outlined ReceiveOfferForm-outlinedLabel-4"
@@ -318,6 +323,7 @@ Array [
318
323
  </div>,
319
324
  <div
320
325
  class="MuiFormControl-root MuiTextField-root MuiFormControl-marginDense MuiFormControl-fullWidth"
326
+ translate="no"
321
327
  >
322
328
  <label
323
329
  class="MuiFormLabel-root MuiInputLabel-root MuiInputLabel-formControl MuiInputLabel-animated MuiInputLabel-marginDense MuiInputLabel-outlined ReceiveOfferForm-outlinedLabel-4"
@@ -351,6 +357,7 @@ Array [
351
357
  </div>,
352
358
  <div
353
359
  class="MuiFormControl-root MuiTextField-root MuiFormControl-marginDense MuiFormControl-fullWidth"
360
+ translate="no"
354
361
  >
355
362
  <label
356
363
  class="MuiFormLabel-root MuiInputLabel-root MuiInputLabel-formControl MuiInputLabel-animated MuiInputLabel-marginDense MuiInputLabel-outlined ReceiveOfferForm-outlinedLabel-4"
@@ -460,6 +467,7 @@ Array [
460
467
  >
461
468
  <div
462
469
  class="MuiFormControl-root MuiTextField-root MuiFormControl-marginDense MuiFormControl-fullWidth"
470
+ translate="no"
463
471
  >
464
472
  <label
465
473
  class="MuiFormLabel-root MuiInputLabel-root MuiInputLabel-formControl MuiInputLabel-animated MuiInputLabel-marginDense MuiInputLabel-outlined ReceiveOfferForm-outlinedLabel-4"
@@ -495,6 +503,7 @@ Array [
495
503
  </div>,
496
504
  <div
497
505
  class="MuiFormControl-root MuiTextField-root MuiFormControl-marginDense MuiFormControl-fullWidth"
506
+ translate="no"
498
507
  >
499
508
  <label
500
509
  class="MuiFormLabel-root MuiInputLabel-root MuiInputLabel-formControl MuiInputLabel-animated MuiInputLabel-marginDense MuiInputLabel-outlined ReceiveOfferForm-outlinedLabel-4"
@@ -528,6 +537,7 @@ Array [
528
537
  </div>,
529
538
  <div
530
539
  class="MuiFormControl-root MuiTextField-root MuiFormControl-marginDense MuiFormControl-fullWidth"
540
+ translate="no"
531
541
  >
532
542
  <label
533
543
  class="MuiFormLabel-root MuiInputLabel-root MuiInputLabel-formControl MuiInputLabel-animated MuiInputLabel-marginDense MuiInputLabel-outlined ReceiveOfferForm-outlinedLabel-4"
@@ -202,6 +202,7 @@ class ReceiveOfferForm extends React.Component {
202
202
  label={t('receiveOfferForm.name')}
203
203
  margin="dense"
204
204
  variant="outlined"
205
+ translate="no"
205
206
  fullWidth
206
207
  error={!!name.error}
207
208
  helperText={getErrorMessage(name.error)}
@@ -225,6 +226,7 @@ class ReceiveOfferForm extends React.Component {
225
226
  label={t('receiveOfferForm.company')}
226
227
  margin="dense"
227
228
  variant="outlined"
229
+ translate="no"
228
230
  fullWidth
229
231
  error={!!company.error}
230
232
  helperText={getErrorMessage(company.error)}
@@ -298,6 +300,7 @@ class ReceiveOfferForm extends React.Component {
298
300
  label={t('receiveOfferForm.city')}
299
301
  margin="dense"
300
302
  variant="outlined"
303
+ translate="no"
301
304
  fullWidth
302
305
  error={!!city.error}
303
306
  helperText={getErrorMessage(city.error)}
@@ -323,6 +326,7 @@ class ReceiveOfferForm extends React.Component {
323
326
  label={t('receiveOfferForm.street')}
324
327
  margin="dense"
325
328
  variant="outlined"
329
+ translate="no"
326
330
  fullWidth
327
331
  error={!!street.error}
328
332
  helperText={getErrorMessage(street.error)}
@@ -346,6 +350,7 @@ class ReceiveOfferForm extends React.Component {
346
350
  label={t('receiveOfferForm.country')}
347
351
  margin="dense"
348
352
  variant="outlined"
353
+ translate="no"
349
354
  fullWidth
350
355
  error={!!country.error}
351
356
  helperText={getErrorMessage(country.error)}
@@ -437,6 +437,7 @@ function setLanguage() {
437
437
  }
438
438
  applicationConfiguration.language = language.replace('_', '-');
439
439
  Api.setLanguage(applicationConfiguration.language);
440
+ document.documentElement.lang = language.substring(0, 2);
440
441
  initLanguage(applicationConfiguration.language, applicationConfiguration.network.baseURL);
441
442
  }
442
443