kitchen-simulator 4.0.0-queuedEvents → 4.0.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 (111) hide show
  1. package/es/LiteKitchenConfigurator.js +141 -288
  2. package/es/LiteRenderer.js +159 -398
  3. package/es/actions/items-actions.js +10 -6
  4. package/es/actions/lines-actions.js +3 -1
  5. package/es/actions/project-actions.js +15 -5
  6. package/es/assets/img/svg/bottombar/elevation.svg +12 -5
  7. package/es/catalog/areas/area/planner-element.js +10 -5
  8. package/es/catalog/catalog.js +1 -4
  9. package/es/catalog/factories/area-factory-3d.js +2 -1
  10. package/es/catalog/factories/wall-factory-3d.js +2 -2
  11. package/es/catalog/factories/wall-factory.js +8 -8
  12. package/es/catalog/lines/wall/planner-element.js +18 -9
  13. package/es/catalog/utils/exporter.js +7 -3
  14. package/es/catalog/utils/item-loader.js +24 -14
  15. package/es/catalog/utils/mtl-loader.js +2 -2
  16. package/es/catalog/utils/obj-loader.js +2 -2
  17. package/es/class/hole.js +0 -2
  18. package/es/class/item.js +183 -184
  19. package/es/class/line.js +11 -3
  20. package/es/class/project.js +165 -48
  21. package/es/components/content.js +19 -6
  22. package/es/components/viewer2d/grids/grid-streak.js +1 -1
  23. package/es/components/viewer2d/item.js +84 -51
  24. package/es/components/viewer2d/line.js +315 -243
  25. package/es/components/viewer2d/ruler.js +20 -38
  26. package/es/components/viewer2d/rulerDist.js +48 -78
  27. package/es/components/viewer2d/utils.js +6 -0
  28. package/es/components/viewer2d/viewer2d.js +298 -220
  29. package/es/components/viewer3d/front3D.js +3 -2
  30. package/es/components/viewer3d/libs/mtl-loader.js +2 -2
  31. package/es/components/viewer3d/libs/obj-loader.js +2 -2
  32. package/es/components/viewer3d/libs/orbit-controls.js +3 -4
  33. package/es/components/viewer3d/libs/pointer-lock-controls.js +6 -7
  34. package/es/components/viewer3d/scene-creator.js +51 -15
  35. package/es/components/viewer3d/viewer3d.js +121 -82
  36. package/es/constants.js +111 -3
  37. package/es/devLiteRenderer.js +688 -31
  38. package/es/index.js +567 -87
  39. package/es/models.js +9 -5
  40. package/es/plugins/SVGLoader.js +7 -5
  41. package/es/plugins/console-debugger.js +0 -2
  42. package/es/plugins/keyboard.js +15 -6
  43. package/es/reducers/items-reducer.js +5 -5
  44. package/es/reducers/lines-reducer.js +1 -1
  45. package/es/reducers/project-reducer.js +5 -3
  46. package/es/shared-style.js +4 -4
  47. package/es/utils/geometry.js +163 -2
  48. package/es/utils/get-edges-of-subgraphs.js +1 -1
  49. package/es/utils/graph-cycles.js +1 -1
  50. package/es/utils/graph.js +1 -1
  51. package/es/utils/helper.js +105 -3
  52. package/es/utils/isolate-event-handler.js +1542 -164
  53. package/es/utils/molding.js +461 -11
  54. package/lib/LiteKitchenConfigurator.js +141 -289
  55. package/lib/LiteRenderer.js +159 -399
  56. package/lib/actions/items-actions.js +10 -6
  57. package/lib/actions/lines-actions.js +3 -1
  58. package/lib/actions/project-actions.js +15 -4
  59. package/lib/assets/img/svg/bottombar/elevation.svg +12 -5
  60. package/lib/catalog/areas/area/planner-element.js +11 -5
  61. package/lib/catalog/catalog.js +1 -4
  62. package/lib/catalog/factories/area-factory-3d.js +2 -1
  63. package/lib/catalog/factories/wall-factory-3d.js +2 -2
  64. package/lib/catalog/factories/wall-factory.js +8 -8
  65. package/lib/catalog/lines/wall/planner-element.js +19 -9
  66. package/lib/catalog/utils/exporter.js +7 -3
  67. package/lib/catalog/utils/item-loader.js +24 -14
  68. package/lib/catalog/utils/mtl-loader.js +9 -2
  69. package/lib/catalog/utils/obj-loader.js +10 -2
  70. package/lib/class/hole.js +0 -2
  71. package/lib/class/item.js +180 -181
  72. package/lib/class/line.js +9 -1
  73. package/lib/class/project.js +164 -47
  74. package/lib/components/content.js +19 -6
  75. package/lib/components/viewer2d/grids/grid-streak.js +1 -1
  76. package/lib/components/viewer2d/item.js +83 -50
  77. package/lib/components/viewer2d/line.js +315 -242
  78. package/lib/components/viewer2d/ruler.js +19 -37
  79. package/lib/components/viewer2d/rulerDist.js +48 -78
  80. package/lib/components/viewer2d/utils.js +7 -0
  81. package/lib/components/viewer2d/viewer2d.js +296 -219
  82. package/lib/components/viewer3d/front3D.js +3 -2
  83. package/lib/components/viewer3d/libs/mtl-loader.js +9 -2
  84. package/lib/components/viewer3d/libs/obj-loader.js +9 -2
  85. package/lib/components/viewer3d/libs/orbit-controls.js +11 -5
  86. package/lib/components/viewer3d/libs/pointer-lock-controls.js +13 -7
  87. package/lib/components/viewer3d/scene-creator.js +49 -13
  88. package/lib/components/viewer3d/viewer3d.js +119 -80
  89. package/lib/constants.js +116 -7
  90. package/lib/devLiteRenderer.js +687 -30
  91. package/lib/index.js +567 -87
  92. package/lib/models.js +9 -5
  93. package/lib/plugins/SVGLoader.js +7 -5
  94. package/lib/plugins/console-debugger.js +0 -2
  95. package/lib/plugins/keyboard.js +15 -6
  96. package/lib/reducers/items-reducer.js +5 -5
  97. package/lib/reducers/lines-reducer.js +1 -1
  98. package/lib/reducers/project-reducer.js +4 -2
  99. package/lib/shared-style.js +4 -4
  100. package/lib/utils/geometry.js +164 -2
  101. package/lib/utils/get-edges-of-subgraphs.js +6 -1
  102. package/lib/utils/graph-cycles.js +7 -8
  103. package/lib/utils/graph.js +6 -1
  104. package/lib/utils/helper.js +108 -2
  105. package/lib/utils/isolate-event-handler.js +1538 -159
  106. package/lib/utils/molding.js +463 -9
  107. package/package.json +1 -1
  108. package/es/assets/Window.hdr +0 -2100
  109. package/es/assets/img/1.jpg +0 -0
  110. package/lib/assets/Window.hdr +0 -2100
  111. package/lib/assets/img/1.jpg +0 -0
@@ -8,16 +8,15 @@ Object.defineProperty(exports, "__esModule", {
8
8
  exports["default"] = void 0;
9
9
  var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
10
10
  var _objectWithoutProperties2 = _interopRequireDefault(require("@babel/runtime/helpers/objectWithoutProperties"));
11
- var _regenerator = _interopRequireDefault(require("@babel/runtime/regenerator"));
12
- var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator"));
13
11
  var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime/helpers/toConsumableArray"));
12
+ var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
14
13
  var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck"));
15
14
  var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass"));
16
15
  var _possibleConstructorReturn2 = _interopRequireDefault(require("@babel/runtime/helpers/possibleConstructorReturn"));
17
16
  var _getPrototypeOf2 = _interopRequireDefault(require("@babel/runtime/helpers/getPrototypeOf"));
18
17
  var _inherits2 = _interopRequireDefault(require("@babel/runtime/helpers/inherits"));
19
- var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
20
- var _axios = _interopRequireDefault(require("axios"));
18
+ var _taggedTemplateLiteral2 = _interopRequireDefault(require("@babel/runtime/helpers/taggedTemplateLiteral"));
19
+ var _styledComponents = _interopRequireDefault(require("styled-components"));
21
20
  var _convertUnitsLite = require("./utils/convert-units-lite");
22
21
  var _propTypes = _interopRequireDefault(require("prop-types"));
23
22
  var _react = _interopRequireWildcard(require("react"));
@@ -32,8 +31,9 @@ var _translator = _interopRequireDefault(require("./translator/translator"));
32
31
  var _objectsUtils = require("./utils/objects-utils");
33
32
  var _version = require("./version");
34
33
  var _isolateEventHandler = require("./utils/isolate-event-handler");
35
- var _excluded = ["width", "height", "state", "stateExtractor"];
36
- function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function _interopRequireWildcard(e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, "default": e }; if (null === e || "object" != _typeof(e) && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (var _t2 in e) "default" !== _t2 && {}.hasOwnProperty.call(e, _t2) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, _t2)) && (i.get || i.set) ? o(f, _t2, i) : f[_t2] = e[_t2]); return f; })(e, t); }
34
+ var _excluded = ["width", "height", "extractedState"];
35
+ var _templateObject, _templateObject2; // LiteKitchenConfigurator.jsx
36
+ function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function _interopRequireWildcard(e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, "default": e }; if (null === e || "object" != _typeof(e) && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (var _t in e) "default" !== _t && {}.hasOwnProperty.call(e, _t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, _t)) && (i.get || i.set) ? o(f, _t, i) : f[_t] = e[_t]); return f; })(e, t); }
37
37
  function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
38
38
  function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { (0, _defineProperty2["default"])(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
39
39
  function _callSuper(t, o, e) { return o = (0, _getPrototypeOf2["default"])(o), (0, _possibleConstructorReturn2["default"])(t, _isNativeReflectConstruct() ? Reflect.construct(o, e || [], (0, _getPrototypeOf2["default"])(t).constructor) : o.apply(t, e)); }
@@ -43,32 +43,16 @@ var wrapperStyle = {
43
43
  display: 'flex',
44
44
  flexFlow: 'row nowrap'
45
45
  };
46
+ var WarningItem = _styledComponents["default"].div(_templateObject || (_templateObject = (0, _taggedTemplateLiteral2["default"])(["\n opacity: 0.8;\n position: absolute;\n border-radius: 6px;\n z-index: 11;\n background-color: #ff7400;\n width: max-content;\n align-items: center;\n padding: 10px;\n display: none;\n box-shadow:\n 0px 3px 5px -1px rgba(0, 0, 0, 0.2),\n 0px 6px 10px 0px rgba(0, 0, 0, 0.39),\n 0px 1px 18px 0px rgba(0, 0, 0, 0.12);\n top: -50px;\n left: 5px;\n color: white;\n"])));
47
+ var SubCategoryItemImage = _styledComponents["default"].img(_templateObject2 || (_templateObject2 = (0, _taggedTemplateLiteral2["default"])(["\n background-color: ", ";\n height: 30px;\n width: 30px;\n -webkit-mask-image: url(", ");\n -webkit-mask-size: calc(100% - 2px) calc(100% - 2px);\n -webkit-mask-repeat: no-repeat;\n -webkit-mask-position: 1px 1px;\n"])), constants.SECONDARY_PURPLE_COLOR, function (props) {
48
+ return props.maskImage + '?nocache=2025';
49
+ });
46
50
  var LiteKitchenConfigurator = /*#__PURE__*/function (_Component) {
47
51
  function LiteKitchenConfigurator(props) {
48
52
  var _utmRequestData2, _utmRequestData3, _utmRequestData4, _utmRequestData5, _utmRequestData6, _utmRequestData7, _utmRequestData8, _utmRequestData9, _utmRequestData0;
49
53
  var _this;
50
54
  (0, _classCallCheck2["default"])(this, LiteKitchenConfigurator);
51
55
  _this = _callSuper(this, LiteKitchenConfigurator, [props]);
52
-
53
- // utm tracking
54
- (0, _defineProperty2["default"])(_this, "lastProcessedExternalEventId", null);
55
- (0, _defineProperty2["default"])(_this, "handleBeforeUnload", function (e) {
56
- var areas = _this.props.stateExtractor(_this.props.state).getIn(['scene', 'layers', _this.props.stateExtractor(_this.props.state).scene.selectedLayer, 'areas']);
57
- if (!_this.state.isSaved && areas.size > 0) {
58
- setTimeout(function () {
59
- _this.setState({
60
- savePromptVisible: true,
61
- isLeaving: true
62
- });
63
- }, 500);
64
- _this.saveProjectToStorage();
65
-
66
- // This line is required to trigger the browser confirmation dialog
67
- e.preventDefault();
68
- e.returnValue = '';
69
- return '';
70
- }
71
- });
72
56
  var utmDetailParams = new URLSearchParams(_this.props.location && _this.props.location.search);
73
57
  var utmStrEncoded = utmDetailParams.get('details');
74
58
  var utmRequestData = null;
@@ -78,7 +62,7 @@ var LiteKitchenConfigurator = /*#__PURE__*/function (_Component) {
78
62
  utmRequestData = JSON.parse((0, _helper.base64Decode)(utmStrEncoded));
79
63
  utmRequestData = JSON.parse((_utmRequestData = utmRequestData) === null || _utmRequestData === void 0 ? void 0 : _utmRequestData.utm);
80
64
  } catch (e) {
81
- console.error('Cannot parse utm parameter: ', error);
65
+ console.error('Cannot parse utm parameter: ', e);
82
66
  utmRequestData = null;
83
67
  }
84
68
  }
@@ -97,7 +81,6 @@ var LiteKitchenConfigurator = /*#__PURE__*/function (_Component) {
97
81
  myProjectsOpen: false,
98
82
  myProjectsToLogin: false,
99
83
  downloadPopupVisible: false,
100
- // For Toolbar Item
101
84
  toolbar: '',
102
85
  reviewQuotePopupOpened: false,
103
86
  floorOpened: false,
@@ -115,8 +98,6 @@ var LiteKitchenConfigurator = /*#__PURE__*/function (_Component) {
115
98
  isSaved: false,
116
99
  isLeaving: false
117
100
  };
118
-
119
- // For UTM tracking
120
101
  _this.utm = {
121
102
  utm_source: ((_utmRequestData2 = utmRequestData) === null || _utmRequestData2 === void 0 ? void 0 : _utmRequestData2.source) || 'source',
122
103
  utm_medium: ((_utmRequestData3 = utmRequestData) === null || _utmRequestData3 === void 0 ? void 0 : _utmRequestData3.medium) || 'medium',
@@ -147,10 +128,13 @@ var LiteKitchenConfigurator = /*#__PURE__*/function (_Component) {
147
128
  _this.setDownloadPopupVisible = _this.setDownloadPopupVisible.bind(_this);
148
129
  _this.neverShowInput = /*#__PURE__*/_react["default"].createRef(null);
149
130
  _this.setShowProperty = _this.setShowProperty.bind(_this);
131
+
132
+ // cache for viewer2D init so we don't allocate merges every render
133
+ _this._lastExtractedStateRef = null;
134
+ _this._cachedViewer2DKey = null;
135
+ _this._cachedExtractedState = null;
150
136
  return _this;
151
137
  }
152
-
153
- // Toolbar control functions
154
138
  (0, _inherits2["default"])(LiteKitchenConfigurator, _Component);
155
139
  return (0, _createClass2["default"])(LiteKitchenConfigurator, [{
156
140
  key: "setToolbar",
@@ -234,26 +218,32 @@ var LiteKitchenConfigurator = /*#__PURE__*/function (_Component) {
234
218
  }, {
235
219
  key: "openFloor",
236
220
  value: function openFloor() {
221
+ var _el$parentElement;
237
222
  this.setState({
238
223
  floorOpened: true
239
224
  });
240
- document.getElementById('make_floorplan_inactive').parentElement.parentElement.style.zIndex = 999;
225
+ var el = document.getElementById('make_floorplan_inactive');
226
+ if (el !== null && el !== void 0 && (_el$parentElement = el.parentElement) !== null && _el$parentElement !== void 0 && _el$parentElement.parentElement) el.parentElement.parentElement.style.zIndex = 999;
241
227
  }
242
228
  }, {
243
229
  key: "openCabinet",
244
230
  value: function openCabinet() {
231
+ var _el$parentElement2;
245
232
  this.setState({
246
233
  cabinetOpened: true
247
234
  });
248
- document.getElementById('add_cabinets_inactive').parentElement.parentElement.style.zIndex = 999;
235
+ var el = document.getElementById('add_cabinets_inactive');
236
+ if (el !== null && el !== void 0 && (_el$parentElement2 = el.parentElement) !== null && _el$parentElement2 !== void 0 && _el$parentElement2.parentElement) el.parentElement.parentElement.style.zIndex = 999;
249
237
  }
250
238
  }, {
251
239
  key: "toggleDoorStyle",
252
240
  value: function toggleDoorStyle(visible) {
241
+ var _el$parentElement3;
253
242
  this.setState({
254
243
  doorStyleOpen: visible
255
244
  });
256
- document.getElementById('select_doorstyle_inactive').parentElement.parentElement.style.zIndex = visible ? 999 : 6;
245
+ var el = document.getElementById('select_doorstyle_inactive');
246
+ if (el !== null && el !== void 0 && (_el$parentElement3 = el.parentElement) !== null && _el$parentElement3 !== void 0 && _el$parentElement3.parentElement) el.parentElement.parentElement.style.zIndex = visible ? 999 : 6;
257
247
  }
258
248
  }, {
259
249
  key: "replaceCabinet",
@@ -265,70 +255,72 @@ var LiteKitchenConfigurator = /*#__PURE__*/function (_Component) {
265
255
  }, {
266
256
  key: "openAppliance",
267
257
  value: function openAppliance() {
258
+ var _el$parentElement4;
268
259
  this.setState({
269
260
  applianceOpened: true
270
261
  });
271
- document.getElementById('add_appliances_inactive').parentElement.parentElement.style.zIndex = 999;
262
+ var el = document.getElementById('add_appliances_inactive');
263
+ if (el !== null && el !== void 0 && (_el$parentElement4 = el.parentElement) !== null && _el$parentElement4 !== void 0 && _el$parentElement4.parentElement) el.parentElement.parentElement.style.zIndex = 999;
272
264
  }
273
265
  }, {
274
266
  key: "openFinishing",
275
267
  value: function openFinishing() {
268
+ var _el$parentElement5;
276
269
  this.setState({
277
270
  finishingOpened: true
278
271
  });
279
- document.getElementById('finishing_touches_inactive').parentElement.parentElement.style.zIndex = 999;
272
+ var el = document.getElementById('finishing_touches_inactive');
273
+ if (el !== null && el !== void 0 && (_el$parentElement5 = el.parentElement) !== null && _el$parentElement5 !== void 0 && _el$parentElement5.parentElement) el.parentElement.parentElement.style.zIndex = 999;
280
274
  }
281
275
  }, {
282
276
  key: "onReviewQuoteClicked",
283
277
  value: function onReviewQuoteClicked(visible) {
278
+ var _el$parentElement6;
284
279
  this.setState({
285
280
  reviewQuotePopupOpened: visible
286
281
  });
287
- document.getElementById('review_quote_inactive').parentElement.parentElement.style.zIndex = visible ? 999 : 6;
282
+ var el = document.getElementById('review_quote_inactive');
283
+ if (el !== null && el !== void 0 && (_el$parentElement6 = el.parentElement) !== null && _el$parentElement6 !== void 0 && _el$parentElement6.parentElement) el.parentElement.parentElement.style.zIndex = visible ? 999 : 6;
288
284
  }
289
285
  }, {
290
286
  key: "closeFloorTB",
291
287
  value: function closeFloorTB() {
288
+ var _el$parentElement7;
292
289
  this.setState({
293
290
  floorOpened: false
294
291
  });
295
- document.getElementById('make_floorplan_inactive') && (document.getElementById('make_floorplan_inactive').parentElement.parentElement.style.zIndex = 6);
292
+ var el = document.getElementById('make_floorplan_inactive');
293
+ if (el !== null && el !== void 0 && (_el$parentElement7 = el.parentElement) !== null && _el$parentElement7 !== void 0 && _el$parentElement7.parentElement) el.parentElement.parentElement.style.zIndex = 6;
296
294
  }
297
295
  }, {
298
296
  key: "closeCabinetTB",
299
297
  value: function closeCabinetTB() {
298
+ var _el$parentElement8;
300
299
  this.setState({
301
300
  cabinetOpened: false
302
301
  });
303
- document.getElementById('add_cabinets_inactive').parentElement.parentElement.style.zIndex = 6;
302
+ var el = document.getElementById('add_cabinets_inactive');
303
+ if (el !== null && el !== void 0 && (_el$parentElement8 = el.parentElement) !== null && _el$parentElement8 !== void 0 && _el$parentElement8.parentElement) el.parentElement.parentElement.style.zIndex = 6;
304
304
  }
305
305
  }, {
306
306
  key: "closeFinishingTB",
307
307
  value: function closeFinishingTB() {
308
+ var _el$parentElement9;
308
309
  this.setState({
309
310
  finishingOpened: false
310
311
  });
311
- document.getElementById('finishing_touches_inactive').parentElement.parentElement.style.zIndex = 6;
312
+ var el = document.getElementById('finishing_touches_inactive');
313
+ if (el !== null && el !== void 0 && (_el$parentElement9 = el.parentElement) !== null && _el$parentElement9 !== void 0 && _el$parentElement9.parentElement) el.parentElement.parentElement.style.zIndex = 6;
312
314
  }
313
315
  }, {
314
316
  key: "closeApplianceTB",
315
317
  value: function closeApplianceTB() {
318
+ var _el$parentElement0;
316
319
  this.setState({
317
320
  applianceOpened: false
318
321
  });
319
- document.getElementById('add_appliances_inactive').parentElement.parentElement.style.zIndex = 6;
320
- }
321
- }, {
322
- key: "closeDoorstyle",
323
- value: function closeDoorstyle() {
324
- this.setState({});
325
- document.getElementById('select_doorstyle_inactive').parentElement.parentElement.style.zIndex = 6;
326
- }
327
- }, {
328
- key: "closeReviewQuote",
329
- value: function closeReviewQuote() {
330
- this.setState({});
331
- document.getElementById('review_quote_inactive').parentElement.parentElement.style.zIndex = 6;
322
+ var el = document.getElementById('add_appliances_inactive');
323
+ if (el !== null && el !== void 0 && (_el$parentElement0 = el.parentElement) !== null && _el$parentElement0 !== void 0 && _el$parentElement0.parentElement) el.parentElement.parentElement.style.zIndex = 6;
332
324
  }
333
325
  }, {
334
326
  key: "getChildContext",
@@ -341,181 +333,39 @@ var LiteKitchenConfigurator = /*#__PURE__*/function (_Component) {
341
333
  catalog: this.props.catalog
342
334
  });
343
335
  }
344
- }, {
345
- key: "saveProjectToStorage",
346
- value: function saveProjectToStorage() {
347
- var _this$props = this.props,
348
- state = _this$props.state,
349
- stateExtractor = _this$props.stateExtractor;
350
- var extractedState = stateExtractor(state);
351
- var projectData = JSON.stringify(extractedState.get('scene').toJS());
352
- sessionStorage.setItem(window.location.href, projectData);
353
- }
354
336
  }, {
355
337
  key: "componentDidMount",
356
338
  value: function componentDidMount() {
357
- var _this3 = this;
358
- window.addEventListener('beforeunload', this.handleBeforeUnload);
359
- console.log('context =>', this.context);
360
339
  window.forRedo = [];
361
340
  var store = this.context.store;
362
- var _this$props2 = this.props,
363
- projectActions = _this$props2.projectActions,
364
- catalog = _this$props2.catalog,
365
- stateExtractor = _this$props2.stateExtractor,
366
- state = _this$props2.state,
367
- plugins = _this$props2.plugins;
368
- projectActions.initCatalog(catalog);
369
- var match = this.props.match;
370
- if (sessionStorage.getItem(window.location.href)) {
371
- var jsonData = sessionStorage.getItem(window.location.href);
372
- projectActions.loadProject(JSON.parse(jsonData), this.props.categoryData);
373
- sessionStorage.removeItem(window.location.href);
374
- return;
375
- }
341
+ var _this$props = this.props,
342
+ stateExtractor = _this$props.stateExtractor,
343
+ plugins = _this$props.plugins;
344
+
345
+ // keep old behavior: run plugins once on mount
376
346
  var newplugins = (0, _toConsumableArray2["default"])(plugins);
377
347
  newplugins.forEach(function (newplugin) {
378
348
  return newplugin(store, stateExtractor);
379
349
  });
380
- if (match && match.params.pid === undefined) {
381
- projectActions.newProject();
382
- sessionStorage.setItem('projectTitle', 'Untitled');
383
- projectActions.rename('Untitled');
384
- sessionStorage.removeItem('projectId');
385
- sessionStorage.removeItem('email');
386
- sessionStorage.removeItem('firstName');
387
- sessionStorage.removeItem('lastName');
388
- sessionStorage.removeItem('usedObjects');
389
- return;
390
- }
391
- if (match && match.params.pid !== undefined) {
392
- if (match.params.pid === 'new') {
393
- projectActions.newProject();
394
- sessionStorage.setItem('projectTitle', 'Untitled');
395
- projectActions.rename('Untitled');
396
- sessionStorage.removeItem('projectId');
397
- sessionStorage.removeItem('email');
398
- sessionStorage.removeItem('firstName');
399
- sessionStorage.removeItem('lastName');
400
- sessionStorage.removeItem('usedObjects');
401
- } else {
402
- _axios["default"].post("".concat(constants.API_SERVER_URL, "/api/project/loadPidProject"), {
403
- pid: match.params.pid,
404
- visualizerName: sessionStorage.getItem('visualizerName')
405
- }).then(/*#__PURE__*/function () {
406
- var _ref = (0, _asyncToGenerator2["default"])(/*#__PURE__*/_regenerator["default"].mark(function _callee(response) {
407
- var projectElement, jsonData, _t;
408
- return _regenerator["default"].wrap(function (_context) {
409
- while (1) switch (_context.prev = _context.next) {
410
- case 0:
411
- projectElement = response.data.projectElement;
412
- if (!(projectElement.length === 0)) {
413
- _context.next = 1;
414
- break;
415
- }
416
- return _context.abrupt("return");
417
- case 1:
418
- sessionStorage.setItem('projectTitle', projectElement[0].title);
419
- projectActions.rename(projectElement[0].title);
420
- sessionStorage.setItem('projectId', projectElement[0].id);
421
- sessionStorage.setItem('email', projectElement[0].email);
422
- sessionStorage.setItem('firstName', projectElement[0].firstName);
423
- sessionStorage.setItem('lastName', projectElement[0].lastName);
424
- sessionStorage.setItem('phone', projectElement[0].phone);
425
- if (!projectElement[0].project_data) {
426
- _context.next = 2;
427
- break;
428
- }
429
- jsonData = JSON.parse(projectElement[0].project_data);
430
- _context.next = 5;
431
- break;
432
- case 2:
433
- _context.prev = 2;
434
- _context.next = 3;
435
- return _axios["default"].post("".concat(constants.API_SERVER_URL, "/api/project/loadPidData"), {
436
- pid: match.params.pid
437
- }).data.data;
438
- case 3:
439
- jsonData = _context.sent;
440
- _context.next = 5;
441
- break;
442
- case 4:
443
- _context.prev = 4;
444
- _t = _context["catch"](2);
445
- _this3.setState({
446
- isSnackBarOpen: true,
447
- snackBarMessage: _t
448
- });
449
- case 5:
450
- jsonData.isLoadingCabinet = false;
451
- projectActions.loadProject(jsonData, _this3.props.categoryData);
452
- case 6:
453
- case "end":
454
- return _context.stop();
455
- }
456
- }, _callee, null, [[2, 4]]);
457
- }));
458
- return function (_x) {
459
- return _ref.apply(this, arguments);
460
- };
461
- }());
462
- }
463
- sessionStorage.removeItem('user_type');
464
- sessionStorage.removeItem('project_type');
465
- sessionStorage.removeItem('project_timeline');
466
- }
467
350
  }
468
351
  }, {
469
- key: "componentWillUnmount",
470
- value: function componentWillUnmount() {
471
- window.removeEventListener('beforeunload', this.handleBeforeUnload);
472
- window.onbeforeunload = null;
473
- }
474
- }, {
475
- key: "componentWillMount",
476
- value: function componentWillMount() {}
477
- }, {
478
- key: "componentWillReceiveProps",
479
- value: function componentWillReceiveProps(nextProps) {
480
- var _this4 = this;
481
- var stateExtractor = nextProps.stateExtractor,
482
- state = nextProps.state,
483
- projectActions = nextProps.projectActions,
484
- catalog = nextProps.catalog,
485
- externalEvent = nextProps.externalEvent;
352
+ key: "componentDidUpdate",
353
+ value: function componentDidUpdate(prevProps) {
354
+ var _extractedState$getIn;
355
+ var _this$props2 = this.props,
356
+ externalEvent = _this$props2.externalEvent,
357
+ extractedState = _this$props2.extractedState,
358
+ projectActions = _this$props2.projectActions,
359
+ catalog = _this$props2.catalog;
486
360
 
487
- // handle external events
488
- if (!externalEvent) return;
489
- var eventId = externalEvent.__eventId;
490
- if (eventId == null) return;
491
- if (this.lastProcessedExternalEventId === eventId) {
492
- return; // already processed
493
- }
494
- this.lastProcessedExternalEventId = eventId;
495
- try {
496
- var result = (0, _isolateEventHandler.handleExternalEvent)(nextProps);
497
- if (result && typeof result.then === 'function') {
498
- result.then(function () {
499
- var _this4$props$onExtern, _this4$props;
500
- return (_this4$props$onExtern = (_this4$props = _this4.props).onExternalEventProcessed) === null || _this4$props$onExtern === void 0 ? void 0 : _this4$props$onExtern.call(_this4$props, eventId);
501
- })["catch"](function () {
502
- var _this4$props$onExtern2, _this4$props2;
503
- return (_this4$props$onExtern2 = (_this4$props2 = _this4.props).onExternalEventProcessed) === null || _this4$props$onExtern2 === void 0 ? void 0 : _this4$props$onExtern2.call(_this4$props2, eventId);
504
- });
505
- } else {
506
- var _this$props$onExterna, _this$props3;
507
- (_this$props$onExterna = (_this$props3 = this.props).onExternalEventProcessed) === null || _this$props$onExterna === void 0 || _this$props$onExterna.call(_this$props3, eventId);
508
- }
509
- } catch (e) {
510
- var _this$props$onExterna2, _this$props4;
511
- (_this$props$onExterna2 = (_this$props4 = this.props).onExternalEventProcessed) === null || _this$props$onExterna2 === void 0 || _this$props$onExterna2.call(_this$props4, eventId);
512
- throw e;
513
- }
514
- var plannerState = stateExtractor(state);
515
- var catalogReady = plannerState.getIn(['catalog', 'ready']);
516
- if (!catalogReady) {
517
- projectActions.initCatalog(catalog);
361
+ // same behavior: handle external event when it changes
362
+ if (prevProps.externalEvent !== externalEvent) {
363
+ (0, _isolateEventHandler.handleExternalEvent)(this.props);
518
364
  }
365
+
366
+ // same behavior: init catalog until ready
367
+ var catalogReady = extractedState === null || extractedState === void 0 || (_extractedState$getIn = extractedState.getIn) === null || _extractedState$getIn === void 0 ? void 0 : _extractedState$getIn.call(extractedState, ['catalog', 'ready']);
368
+ if (!catalogReady) projectActions.initCatalog(catalog);
519
369
  }
520
370
  }, {
521
371
  key: "isProjectEmpty",
@@ -525,15 +375,51 @@ var LiteKitchenConfigurator = /*#__PURE__*/function (_Component) {
525
375
  var layer = layers.get(selectedLayer);
526
376
  return layer.areas.size + layer.lines.size + layer.holes.size + layer.items.size === 0;
527
377
  }
378
+ }, {
379
+ key: "getExtractedStateWithViewer2DInit",
380
+ value: function getExtractedStateWithViewer2DInit(extractedState, width, height) {
381
+ if (!extractedState) return extractedState;
382
+
383
+ // ✅ If the extractedState reference changed, drop cache immediately.
384
+ if (this._lastExtractedStateRef !== extractedState) {
385
+ this._lastExtractedStateRef = extractedState;
386
+ this._cachedViewer2DKey = null;
387
+ this._cachedExtractedState = null;
388
+ }
389
+ var _viewer2D = extractedState.getIn(['viewer2D']);
390
+ if (!_viewer2D || _viewer2D.size <= 0) return extractedState;
391
+ var v = _viewer2D.toJS();
392
+
393
+ // Only do the "center viewer2D if e/f are zero" logic.
394
+ // ✅ No need to build keys from unrelated parts of state.
395
+ if (v.e !== 0 || v.f !== 0) return extractedState;
396
+
397
+ // Build a cache key ONLY for this viewer2D-centering computation.
398
+ var cacheKey = "".concat(width, ":").concat(height, ":").concat(v.viewerWidth, ":").concat(v.viewerHeight, ":").concat(v.SVGWidth, ":").concat(v.SVGHeight);
399
+ if (this._cachedViewer2DKey === cacheKey && this._cachedExtractedState) {
400
+ return this._cachedExtractedState;
401
+ }
402
+ var centeredViewer2D = _viewer2D.merge({
403
+ e: v.viewerWidth / 2 - v.SVGWidth / 2,
404
+ f: v.viewerHeight / 2 - v.SVGHeight / 2,
405
+ a: 0.99,
406
+ d: 0.99
407
+ });
408
+ var merged = extractedState.merge({
409
+ viewer2D: centeredViewer2D
410
+ });
411
+ this._cachedViewer2DKey = cacheKey;
412
+ this._cachedExtractedState = merged;
413
+ return merged;
414
+ }
528
415
  }, {
529
416
  key: "render",
530
417
  value: function render() {
531
- var _this$props5 = this.props,
532
- width = _this$props5.width,
533
- height = _this$props5.height,
534
- state = _this$props5.state,
535
- stateExtractor = _this$props5.stateExtractor,
536
- props = (0, _objectWithoutProperties2["default"])(_this$props5, _excluded);
418
+ var _this$props3 = this.props,
419
+ width = _this$props3.width,
420
+ height = _this$props3.height,
421
+ extractedState = _this$props3.extractedState,
422
+ props = (0, _objectWithoutProperties2["default"])(_this$props3, _excluded);
537
423
  var _this$state = this.state,
538
424
  savePopupVisible = _this$state.savePopupVisible,
539
425
  quotePopupVisible = _this$state.quotePopupVisible,
@@ -541,74 +427,22 @@ var LiteKitchenConfigurator = /*#__PURE__*/function (_Component) {
541
427
  signOpen = _this$state.signOpen,
542
428
  myProjectsOpen = _this$state.myProjectsOpen;
543
429
  var contentW = width - toolbarW;
544
- var categoryData = this.props.categoryData;
545
- // console.log(categoryData);
546
- // let contentW = width - toolbarW - sidebarW;
547
- // let toolbarH = height - footerBarH;
548
- // let contentH = height - footerBarH;
549
- // let sidebarH = height - footerBarH;
550
- var toolbarH = height;
551
430
  var contentH = height;
552
- var sidebarH = height;
553
- var headerW = width;
554
- var headerH = 60;
555
- var extractedState = stateExtractor(state);
556
- var doorStyle = extractedState.get('doorStyle');
557
- if (extractedState.getIn(['scene', 'layers', extractedState.scene.selectedLayer, 'doorStyle']) !== undefined && extractedState.getIn(['scene', 'layers', extractedState.scene.selectedLayer, 'doorStyle']) !== null) {
558
- var extractedStateData = extractedState.getIn(['scene', 'layers', extractedState.scene.selectedLayer, 'doorStyle']);
559
- var doorIdAvailable = false;
560
- if (this.props.categoryData.doorStyles && this.props.categoryData.doorStyles.items) {
561
- this.props.categoryData.doorStyles.items.find(function (category) {
562
- doorIdAvailable = category.items.find(function (style) {
563
- var item = style.items.find(function (it) {
564
- return it.id === extractedStateData.id;
565
- });
566
- if (item) {
567
- colorItem = item;
568
- return true;
569
- } else {
570
- return false;
571
- }
572
- });
573
- });
574
- }
575
- if (doorIdAvailable) doorStyle = extractedStateData;
576
- }
577
- var firstVisit = this.state.wizardStepOpend && this.isProjectEmpty(extractedState.scene);
431
+ var extracted = this.getExtractedStateWithViewer2DInit(extractedState, width, height);
432
+ var firstVisit = this.state.wizardStepOpend && this.isProjectEmpty(extracted.scene);
578
433
  var allVisible = firstVisit || signOpen || myProjectsOpen;
579
- var _scene = extractedState.getIn(['scene']);
580
- var len = (0, _convertUnitsLite.convert)(_scene.width).from(_scene.unit).to('cm');
581
- var _viewer2D = extractedState.getIn(['viewer2D']);
582
- if (_viewer2D.size > 0) {
583
- var scaleX = width / len * 3;
584
- var scaleY = height / len * 3;
585
- var scale = scaleX > scaleY ? scaleY : scaleX;
586
- var _e = width - len * scale,
587
- _f = height - len * scale;
588
- var viewer = _viewer2D.toJS();
589
- if (viewer.e === 0 && viewer.f === 0) {
590
- _viewer2D = _viewer2D.merge({
591
- e: viewer.viewerWidth / 2 - viewer.SVGWidth / 2,
592
- f: viewer.viewerHeight / 2 - viewer.SVGHeight / 2,
593
- a: 0.99,
594
- d: 0.99
595
- });
596
- }
597
- }
598
- extractedState = extractedState.merge({
599
- viewer2D: _viewer2D
600
- });
601
434
  return /*#__PURE__*/_react["default"].createElement("section", null, /*#__PURE__*/_react["default"].createElement("div", {
602
435
  style: _objectSpread(_objectSpread({}, wrapperStyle), {}, {
603
436
  height: height,
604
437
  display: 'flex',
605
- justifyContent: 'center'
438
+ justifyContent: 'center',
439
+ position: 'relative'
606
440
  })
607
441
  }, /*#__PURE__*/_react["default"].createElement(_export2.Content, (0, _extends2["default"])({
608
442
  width: contentW,
609
443
  height: contentH,
610
444
  catalog: this.props.catalog,
611
- state: extractedState,
445
+ state: extracted,
612
446
  toolBar: this.state.toolbar,
613
447
  setToolbar: this.setToolbar,
614
448
  replaceCabinet: this.replaceCabinet,
@@ -616,8 +450,22 @@ var LiteKitchenConfigurator = /*#__PURE__*/function (_Component) {
616
450
  }, props, {
617
451
  onWheel: function onWheel(event) {
618
452
  return event.preventDefault();
453
+ },
454
+ onInternalEvent: this.props.onInternalEvent
455
+ })), /*#__PURE__*/_react["default"].createElement(WarningItem, {
456
+ id: "warning_box_2d",
457
+ style: {
458
+ display: 'none'
459
+ }
460
+ }, /*#__PURE__*/_react["default"].createElement(SubCategoryItemImage, {
461
+ maskImage: "/assets/img/svg/3d_item_warning_info.svg",
462
+ style: {
463
+ backgroundColor: constants.BG_COLOR_1,
464
+ marginRight: 10,
465
+ height: 30,
466
+ width: 30
619
467
  }
620
- }))));
468
+ }), "This item is not available in the current door style. Replace it with another one.")));
621
469
  }
622
470
  }]);
623
471
  }(_react.Component);
@@ -631,13 +479,11 @@ LiteKitchenConfigurator.propTypes = {
631
479
  width: _propTypes["default"].number.isRequired,
632
480
  height: _propTypes["default"].number.isRequired,
633
481
  stateExtractor: _propTypes["default"].func.isRequired,
634
- sidebarComponents: _propTypes["default"].array,
635
- footerbarComponents: _propTypes["default"].array,
636
- customContents: _propTypes["default"].object,
637
- softwareSignature: _propTypes["default"].string,
638
482
  configData: _propTypes["default"].object,
639
- onExternalEventProcessed: _propTypes["default"].func,
640
- externalEvent: _propTypes["default"].any
483
+ onInternalEvent: _propTypes["default"].func,
484
+ extractedState: _propTypes["default"].object,
485
+ // ✅ injected by connect
486
+ externalEvent: _propTypes["default"].object
641
487
  };
642
488
  LiteKitchenConfigurator.contextTypes = {
643
489
  store: _propTypes["default"].object.isRequired
@@ -660,10 +506,16 @@ LiteKitchenConfigurator.defaultProps = {
660
506
  configData: {}
661
507
  };
662
508
 
663
- //redux connect
664
- function mapStateToProps(reduxState) {
509
+ // ✅ Only select the slice you actually use.
510
+ // This preserves behavior but massively reduces rerenders.
511
+ function mapStateToProps(reduxState, ownProps) {
512
+ var stateExtractor = ownProps.stateExtractor || function (s) {
513
+ return s;
514
+ };
515
+ var extractedState = stateExtractor(reduxState);
665
516
  return {
666
- state: reduxState
517
+ extractedState: extractedState,
518
+ state: extractedState
667
519
  };
668
520
  }
669
521
  function mapDispatchToProps(dispatch) {