kitchen-simulator 4.0.8-react-18 → 4.0.8

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 (196) hide show
  1. package/README.md +3 -0
  2. package/es/AppContext.js +1 -1
  3. package/es/LiteKitchenConfigurator.js +162 -107
  4. package/es/LiteRenderer.js +162 -137
  5. package/es/actions/export.js +25 -12
  6. package/es/assets/gltf/door_sliding.bin +0 -0
  7. package/es/assets/img/png/helper/video_preview_start.png +0 -0
  8. package/es/assets/img/svg/bottombar/elevation.svg +12 -5
  9. package/es/catalog/catalog.js +21 -5
  10. package/es/catalog/holes/window-clear/planner-element.js +2 -2
  11. package/es/catalog/properties/export.js +21 -0
  12. package/es/catalog/properties/property-checkbox.js +68 -0
  13. package/es/catalog/properties/property-color.js +39 -0
  14. package/es/catalog/properties/property-enum.js +50 -0
  15. package/es/catalog/properties/property-hidden.js +19 -0
  16. package/es/catalog/properties/property-lenght-measure.js +100 -0
  17. package/es/catalog/properties/property-length-measure.js +84 -0
  18. package/es/catalog/properties/property-length-measure_hole.js +100 -0
  19. package/es/catalog/properties/property-number.js +48 -0
  20. package/es/catalog/properties/property-read-only.js +26 -0
  21. package/es/catalog/properties/property-string.js +48 -0
  22. package/es/catalog/properties/property-toggle.js +39 -0
  23. package/es/catalog/properties/shared-property-style.js +14 -0
  24. package/es/catalog/utils/exporter.js +24 -11
  25. package/es/catalog/utils/item-loader.js +35 -26
  26. package/es/class/hole.js +0 -2
  27. package/es/class/item.js +96 -70
  28. package/es/class/line.js +4 -8
  29. package/es/class/project.js +95 -80
  30. package/es/components/content.js +5 -93
  31. package/es/components/export.js +4 -6
  32. package/es/components/style/button.js +106 -0
  33. package/es/components/style/cancel-button.js +21 -0
  34. package/es/components/style/content-container.js +30 -0
  35. package/es/components/style/content-title.js +25 -0
  36. package/es/components/style/delete-button.js +24 -0
  37. package/es/components/style/export.js +28 -2
  38. package/es/components/style/form-block.js +20 -0
  39. package/es/components/style/form-color-input.js +26 -0
  40. package/es/components/style/form-label.js +22 -0
  41. package/es/components/style/form-number-input.js +29 -27
  42. package/es/components/style/form-number-input_2.js +200 -0
  43. package/es/components/style/form-select.js +19 -0
  44. package/es/components/style/form-slider.js +60 -0
  45. package/es/components/style/form-submit-button.js +25 -0
  46. package/es/components/style/form-text-input.js +69 -0
  47. package/es/components/viewer2d/grids/grid-streak.js +1 -1
  48. package/es/components/viewer2d/group.js +5 -4
  49. package/es/components/viewer2d/item.js +155 -359
  50. package/es/components/viewer2d/layer.js +1 -1
  51. package/es/components/viewer2d/line.js +17 -47
  52. package/es/components/viewer2d/ruler.js +5 -3
  53. package/es/components/viewer2d/rulerDist.js +8 -7
  54. package/es/components/viewer2d/rulerX.js +4 -2
  55. package/es/components/viewer2d/rulerY.js +3 -0
  56. package/es/components/viewer2d/scene.js +17 -12
  57. package/es/components/viewer2d/state.js +1 -1
  58. package/es/components/viewer2d/utils.js +2 -2
  59. package/es/components/viewer2d/vertex.js +3 -2
  60. package/es/components/viewer2d/viewer2d.js +52 -87
  61. package/es/components/viewer3d/ruler-utils/scene3D.js +1 -1
  62. package/es/components/viewer3d/scene-creator.js +77 -39
  63. package/es/components/viewer3d/viewer3d-first-person.js +24 -26
  64. package/es/components/viewer3d/viewer3d.js +104 -114
  65. package/es/constants.js +7 -2
  66. package/es/devLiteRenderer.js +491 -150
  67. package/es/index.js +590 -21
  68. package/es/models.js +13 -8
  69. package/es/plugins/SVGLoader.js +1414 -0
  70. package/es/plugins/console-debugger.js +34 -0
  71. package/es/plugins/export.js +7 -0
  72. package/es/plugins/keyboard.js +110 -0
  73. package/es/reducers/project-reducer.js +3 -0
  74. package/es/reducers/viewer2d-reducer.js +3 -1
  75. package/es/reducers/viewer3d-reducer.js +3 -1
  76. package/es/styles/export.js +5 -0
  77. package/es/styles/tabs.css +40 -0
  78. package/es/utils/geometry.js +77 -119
  79. package/es/utils/helper.js +38 -1
  80. package/es/utils/isolate-event-handler.js +826 -606
  81. package/es/utils/molding.js +457 -11
  82. package/lib/AppContext.js +1 -1
  83. package/lib/LiteKitchenConfigurator.js +161 -107
  84. package/lib/LiteRenderer.js +161 -137
  85. package/lib/actions/export.js +35 -39
  86. package/lib/assets/gltf/door_sliding.bin +0 -0
  87. package/lib/assets/img/png/helper/video_preview_start.png +0 -0
  88. package/lib/assets/img/svg/bottombar/elevation.svg +12 -5
  89. package/lib/catalog/catalog.js +20 -4
  90. package/lib/catalog/holes/window-clear/planner-element.js +2 -2
  91. package/lib/catalog/properties/export.js +81 -0
  92. package/lib/catalog/properties/property-checkbox.js +76 -0
  93. package/lib/catalog/properties/property-color.js +47 -0
  94. package/lib/catalog/properties/property-enum.js +58 -0
  95. package/lib/catalog/properties/property-hidden.js +27 -0
  96. package/lib/catalog/properties/property-lenght-measure.js +108 -0
  97. package/lib/catalog/properties/property-length-measure.js +92 -0
  98. package/lib/catalog/properties/property-length-measure_hole.js +108 -0
  99. package/lib/catalog/properties/property-number.js +56 -0
  100. package/lib/catalog/properties/property-read-only.js +34 -0
  101. package/lib/catalog/properties/property-string.js +56 -0
  102. package/lib/catalog/properties/property-toggle.js +47 -0
  103. package/lib/catalog/properties/shared-property-style.js +21 -0
  104. package/lib/catalog/utils/exporter.js +24 -11
  105. package/lib/catalog/utils/item-loader.js +35 -26
  106. package/lib/class/hole.js +0 -2
  107. package/lib/class/item.js +94 -68
  108. package/lib/class/line.js +3 -7
  109. package/lib/class/project.js +95 -80
  110. package/lib/components/content.js +5 -93
  111. package/lib/components/export.js +6 -26
  112. package/lib/components/style/button.js +115 -0
  113. package/lib/components/style/cancel-button.js +29 -0
  114. package/lib/components/style/content-container.js +38 -0
  115. package/lib/components/style/content-title.js +35 -0
  116. package/lib/components/style/delete-button.js +34 -0
  117. package/lib/components/style/export.js +105 -1
  118. package/lib/components/style/form-block.js +28 -0
  119. package/lib/components/style/form-color-input.js +34 -0
  120. package/lib/components/style/form-label.js +30 -0
  121. package/lib/components/style/form-number-input.js +29 -27
  122. package/lib/components/style/form-number-input_2.js +209 -0
  123. package/lib/components/style/form-select.js +29 -0
  124. package/lib/components/style/form-slider.js +68 -0
  125. package/lib/components/style/form-submit-button.js +35 -0
  126. package/lib/components/style/form-text-input.js +78 -0
  127. package/lib/components/viewer2d/grids/grid-streak.js +1 -1
  128. package/lib/components/viewer2d/group.js +5 -4
  129. package/lib/components/viewer2d/item.js +152 -356
  130. package/lib/components/viewer2d/layer.js +1 -1
  131. package/lib/components/viewer2d/line.js +17 -47
  132. package/lib/components/viewer2d/ruler.js +4 -2
  133. package/lib/components/viewer2d/rulerDist.js +8 -7
  134. package/lib/components/viewer2d/rulerX.js +4 -2
  135. package/lib/components/viewer2d/rulerY.js +3 -0
  136. package/lib/components/viewer2d/scene.js +17 -12
  137. package/lib/components/viewer2d/state.js +1 -1
  138. package/lib/components/viewer2d/utils.js +2 -2
  139. package/lib/components/viewer2d/vertex.js +3 -2
  140. package/lib/components/viewer2d/viewer2d.js +50 -84
  141. package/lib/components/viewer3d/ruler-utils/scene3D.js +1 -1
  142. package/lib/components/viewer3d/scene-creator.js +75 -37
  143. package/lib/components/viewer3d/viewer3d-first-person.js +24 -26
  144. package/lib/components/viewer3d/viewer3d.js +101 -110
  145. package/lib/constants.js +12 -7
  146. package/lib/devLiteRenderer.js +489 -148
  147. package/lib/index.js +592 -21
  148. package/lib/models.js +13 -8
  149. package/lib/plugins/SVGLoader.js +1419 -0
  150. package/lib/plugins/console-debugger.js +42 -0
  151. package/lib/plugins/export.js +25 -0
  152. package/lib/plugins/keyboard.js +117 -0
  153. package/lib/reducers/project-reducer.js +3 -0
  154. package/lib/reducers/viewer2d-reducer.js +3 -1
  155. package/lib/reducers/viewer3d-reducer.js +3 -1
  156. package/lib/styles/export.js +13 -0
  157. package/lib/styles/tabs.css +40 -0
  158. package/lib/utils/geometry.js +77 -119
  159. package/lib/utils/helper.js +40 -1
  160. package/lib/utils/isolate-event-handler.js +826 -605
  161. package/lib/utils/molding.js +458 -9
  162. package/package.json +20 -15
  163. package/es/mocks/appliancePayload.json +0 -27
  164. package/es/mocks/cabinetPayload.json +0 -1914
  165. package/es/mocks/cabinetPayload2.json +0 -76
  166. package/es/mocks/dataBundle2.json +0 -4
  167. package/es/mocks/distancePayload.json +0 -6
  168. package/es/mocks/doorStylePayload2.json +0 -84
  169. package/es/mocks/furnishingPayload.json +0 -23
  170. package/es/mocks/itemCDSPayload.json +0 -27
  171. package/es/mocks/lightingPayload.json +0 -23
  172. package/es/mocks/mockProps.json +0 -43
  173. package/es/mocks/mockProps2.json +0 -9
  174. package/es/mocks/moldingPayload.json +0 -19
  175. package/es/mocks/projectItemsCatalog.json +0 -133
  176. package/es/mocks/rectangleShape.json +0 -238
  177. package/es/mocks/replaceCabinetPayload.json +0 -81
  178. package/es/mocks/roomShapePayload.json +0 -5
  179. package/es/useAppContext.js +0 -8
  180. package/lib/mocks/appliancePayload.json +0 -27
  181. package/lib/mocks/cabinetPayload.json +0 -1914
  182. package/lib/mocks/cabinetPayload2.json +0 -76
  183. package/lib/mocks/dataBundle2.json +0 -4
  184. package/lib/mocks/distancePayload.json +0 -6
  185. package/lib/mocks/doorStylePayload2.json +0 -84
  186. package/lib/mocks/furnishingPayload.json +0 -23
  187. package/lib/mocks/itemCDSPayload.json +0 -27
  188. package/lib/mocks/lightingPayload.json +0 -23
  189. package/lib/mocks/mockProps.json +0 -43
  190. package/lib/mocks/mockProps2.json +0 -9
  191. package/lib/mocks/moldingPayload.json +0 -19
  192. package/lib/mocks/projectItemsCatalog.json +0 -133
  193. package/lib/mocks/rectangleShape.json +0 -238
  194. package/lib/mocks/replaceCabinetPayload.json +0 -81
  195. package/lib/mocks/roomShapePayload.json +0 -5
  196. package/lib/useAppContext.js +0 -16
package/README.md CHANGED
@@ -44,12 +44,15 @@ You need to check **webpack.config.js** to change the API server.
44
44
  Webpack is used as the module bundler. The source code is in the **src** folder.
45
45
 
46
46
  entry: {
47
+ // app: './src/renderer.jsx', // For production build WITH API
47
48
  app: './src/devLiteRenderer.jsx', // For development of LiteRenderer
48
49
  vendor: VENDORS_LIBRARIES
49
50
  },
50
51
 
51
52
  - **index.html**: The main HTML file.
52
53
 
54
+ - **[renderer.jsx](src/renderer.jsx)**: The main JavaScript file that bootstraps the React application. WTH API CALLS
55
+
53
56
  - **[devLiteRenderer.jsx](src/devLiteRenderer.jsx).jsx**: The main JavaScript file that bootstraps the React application. For development lite version without API calls. WITH MOCKS
54
57
  - **[LiteRenderer.js](src/LiteRenderer.js)**: The Lite React component that uses mock data and creates the store / catalog etc
55
58
  - [LiteKitchenConfigurator.jsx](src/LiteKitchenConfigurator.jsx)
package/es/AppContext.js CHANGED
@@ -1,3 +1,3 @@
1
1
  import React from 'react';
2
- var AppContext = /*#__PURE__*/React.createContext(null);
2
+ var AppContext = /*#__PURE__*/React.createContext({});
3
3
  export default AppContext;
@@ -1,16 +1,21 @@
1
1
  import _extends from "@babel/runtime/helpers/esm/extends";
2
- import _defineProperty from "@babel/runtime/helpers/esm/defineProperty";
3
2
  import _objectWithoutProperties from "@babel/runtime/helpers/esm/objectWithoutProperties";
3
+ import _toConsumableArray from "@babel/runtime/helpers/esm/toConsumableArray";
4
+ import _defineProperty from "@babel/runtime/helpers/esm/defineProperty";
4
5
  import _classCallCheck from "@babel/runtime/helpers/esm/classCallCheck";
5
6
  import _createClass from "@babel/runtime/helpers/esm/createClass";
6
7
  import _possibleConstructorReturn from "@babel/runtime/helpers/esm/possibleConstructorReturn";
7
8
  import _getPrototypeOf from "@babel/runtime/helpers/esm/getPrototypeOf";
8
9
  import _inherits from "@babel/runtime/helpers/esm/inherits";
9
- var _excluded = ["width", "height", "state", "stateExtractor"];
10
+ import _taggedTemplateLiteral from "@babel/runtime/helpers/esm/taggedTemplateLiteral";
11
+ var _excluded = ["width", "height", "extractedState"];
12
+ var _templateObject, _templateObject2;
10
13
  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; }
11
14
  function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(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; }
12
15
  function _callSuper(t, o, e) { return o = _getPrototypeOf(o), _possibleConstructorReturn(t, _isNativeReflectConstruct() ? Reflect.construct(o, e || [], _getPrototypeOf(t).constructor) : o.apply(t, e)); }
13
16
  function _isNativeReflectConstruct() { try { var t = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); } catch (t) {} return (_isNativeReflectConstruct = function _isNativeReflectConstruct() { return !!t; })(); }
17
+ // LiteKitchenConfigurator.jsx
18
+ import styled from 'styled-components';
14
19
  import { convert } from "./utils/convert-units-lite";
15
20
  import PropTypes from 'prop-types';
16
21
  import React, { Component } from 'react';
@@ -25,20 +30,21 @@ import Translator from "./translator/translator";
25
30
  import { objectsMap } from "./utils/objects-utils";
26
31
  import { VERSION } from "./version";
27
32
  import { handleExternalEvent } from "./utils/isolate-event-handler";
28
- import AppContext from "./AppContext";
29
33
  var toolbarW = 0;
30
34
  var wrapperStyle = {
31
35
  display: 'flex',
32
36
  flexFlow: 'row nowrap'
33
37
  };
38
+ var WarningItem = styled.div(_templateObject || (_templateObject = _taggedTemplateLiteral(["\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"])));
39
+ var SubCategoryItemImage = styled.img(_templateObject2 || (_templateObject2 = _taggedTemplateLiteral(["\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) {
40
+ return props.maskImage + '?nocache=2025';
41
+ });
34
42
  var LiteKitchenConfigurator = /*#__PURE__*/function (_Component) {
35
43
  function LiteKitchenConfigurator(props) {
36
44
  var _utmRequestData2, _utmRequestData3, _utmRequestData4, _utmRequestData5, _utmRequestData6, _utmRequestData7, _utmRequestData8, _utmRequestData9, _utmRequestData0;
37
45
  var _this;
38
46
  _classCallCheck(this, LiteKitchenConfigurator);
39
47
  _this = _callSuper(this, LiteKitchenConfigurator, [props]);
40
-
41
- // utm tracking
42
48
  var utmDetailParams = new URLSearchParams(_this.props.location && _this.props.location.search);
43
49
  var utmStrEncoded = utmDetailParams.get('details');
44
50
  var utmRequestData = null;
@@ -48,7 +54,7 @@ var LiteKitchenConfigurator = /*#__PURE__*/function (_Component) {
48
54
  utmRequestData = JSON.parse(base64Decode(utmStrEncoded));
49
55
  utmRequestData = JSON.parse((_utmRequestData = utmRequestData) === null || _utmRequestData === void 0 ? void 0 : _utmRequestData.utm);
50
56
  } catch (e) {
51
- console.error('Cannot parse utm parameter: ', error);
57
+ console.error('Cannot parse utm parameter: ', e);
52
58
  utmRequestData = null;
53
59
  }
54
60
  }
@@ -67,7 +73,6 @@ var LiteKitchenConfigurator = /*#__PURE__*/function (_Component) {
67
73
  myProjectsOpen: false,
68
74
  myProjectsToLogin: false,
69
75
  downloadPopupVisible: false,
70
- // For Toolbar Item
71
76
  toolbar: '',
72
77
  reviewQuotePopupOpened: false,
73
78
  floorOpened: false,
@@ -85,8 +90,6 @@ var LiteKitchenConfigurator = /*#__PURE__*/function (_Component) {
85
90
  isSaved: false,
86
91
  isLeaving: false
87
92
  };
88
-
89
- // For UTM tracking
90
93
  _this.utm = {
91
94
  utm_source: ((_utmRequestData2 = utmRequestData) === null || _utmRequestData2 === void 0 ? void 0 : _utmRequestData2.source) || 'source',
92
95
  utm_medium: ((_utmRequestData3 = utmRequestData) === null || _utmRequestData3 === void 0 ? void 0 : _utmRequestData3.medium) || 'medium',
@@ -117,10 +120,13 @@ var LiteKitchenConfigurator = /*#__PURE__*/function (_Component) {
117
120
  _this.setDownloadPopupVisible = _this.setDownloadPopupVisible.bind(_this);
118
121
  _this.neverShowInput = /*#__PURE__*/React.createRef(null);
119
122
  _this.setShowProperty = _this.setShowProperty.bind(_this);
123
+
124
+ // cache for viewer2D init so we don't allocate merges every render
125
+ _this._lastExtractedStateRef = null;
126
+ _this._cachedViewer2DKey = null;
127
+ _this._cachedExtractedState = null;
120
128
  return _this;
121
129
  }
122
-
123
- // Toolbar control functions
124
130
  _inherits(LiteKitchenConfigurator, _Component);
125
131
  return _createClass(LiteKitchenConfigurator, [{
126
132
  key: "setToolbar",
@@ -204,26 +210,32 @@ var LiteKitchenConfigurator = /*#__PURE__*/function (_Component) {
204
210
  }, {
205
211
  key: "openFloor",
206
212
  value: function openFloor() {
213
+ var _el$parentElement;
207
214
  this.setState({
208
215
  floorOpened: true
209
216
  });
210
- document.getElementById('make_floorplan_inactive').parentElement.parentElement.style.zIndex = 999;
217
+ var el = document.getElementById('make_floorplan_inactive');
218
+ if (el !== null && el !== void 0 && (_el$parentElement = el.parentElement) !== null && _el$parentElement !== void 0 && _el$parentElement.parentElement) el.parentElement.parentElement.style.zIndex = 999;
211
219
  }
212
220
  }, {
213
221
  key: "openCabinet",
214
222
  value: function openCabinet() {
223
+ var _el$parentElement2;
215
224
  this.setState({
216
225
  cabinetOpened: true
217
226
  });
218
- document.getElementById('add_cabinets_inactive').parentElement.parentElement.style.zIndex = 999;
227
+ var el = document.getElementById('add_cabinets_inactive');
228
+ if (el !== null && el !== void 0 && (_el$parentElement2 = el.parentElement) !== null && _el$parentElement2 !== void 0 && _el$parentElement2.parentElement) el.parentElement.parentElement.style.zIndex = 999;
219
229
  }
220
230
  }, {
221
231
  key: "toggleDoorStyle",
222
232
  value: function toggleDoorStyle(visible) {
233
+ var _el$parentElement3;
223
234
  this.setState({
224
235
  doorStyleOpen: visible
225
236
  });
226
- document.getElementById('select_doorstyle_inactive').parentElement.parentElement.style.zIndex = visible ? 999 : 6;
237
+ var el = document.getElementById('select_doorstyle_inactive');
238
+ 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;
227
239
  }
228
240
  }, {
229
241
  key: "replaceCabinet",
@@ -235,98 +247,117 @@ var LiteKitchenConfigurator = /*#__PURE__*/function (_Component) {
235
247
  }, {
236
248
  key: "openAppliance",
237
249
  value: function openAppliance() {
250
+ var _el$parentElement4;
238
251
  this.setState({
239
252
  applianceOpened: true
240
253
  });
241
- document.getElementById('add_appliances_inactive').parentElement.parentElement.style.zIndex = 999;
254
+ var el = document.getElementById('add_appliances_inactive');
255
+ if (el !== null && el !== void 0 && (_el$parentElement4 = el.parentElement) !== null && _el$parentElement4 !== void 0 && _el$parentElement4.parentElement) el.parentElement.parentElement.style.zIndex = 999;
242
256
  }
243
257
  }, {
244
258
  key: "openFinishing",
245
259
  value: function openFinishing() {
260
+ var _el$parentElement5;
246
261
  this.setState({
247
262
  finishingOpened: true
248
263
  });
249
- document.getElementById('finishing_touches_inactive').parentElement.parentElement.style.zIndex = 999;
264
+ var el = document.getElementById('finishing_touches_inactive');
265
+ if (el !== null && el !== void 0 && (_el$parentElement5 = el.parentElement) !== null && _el$parentElement5 !== void 0 && _el$parentElement5.parentElement) el.parentElement.parentElement.style.zIndex = 999;
250
266
  }
251
267
  }, {
252
268
  key: "onReviewQuoteClicked",
253
269
  value: function onReviewQuoteClicked(visible) {
270
+ var _el$parentElement6;
254
271
  this.setState({
255
272
  reviewQuotePopupOpened: visible
256
273
  });
257
- document.getElementById('review_quote_inactive').parentElement.parentElement.style.zIndex = visible ? 999 : 6;
274
+ var el = document.getElementById('review_quote_inactive');
275
+ 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;
258
276
  }
259
277
  }, {
260
278
  key: "closeFloorTB",
261
279
  value: function closeFloorTB() {
280
+ var _el$parentElement7;
262
281
  this.setState({
263
282
  floorOpened: false
264
283
  });
265
- document.getElementById('make_floorplan_inactive') && (document.getElementById('make_floorplan_inactive').parentElement.parentElement.style.zIndex = 6);
284
+ var el = document.getElementById('make_floorplan_inactive');
285
+ if (el !== null && el !== void 0 && (_el$parentElement7 = el.parentElement) !== null && _el$parentElement7 !== void 0 && _el$parentElement7.parentElement) el.parentElement.parentElement.style.zIndex = 6;
266
286
  }
267
287
  }, {
268
288
  key: "closeCabinetTB",
269
289
  value: function closeCabinetTB() {
290
+ var _el$parentElement8;
270
291
  this.setState({
271
292
  cabinetOpened: false
272
293
  });
273
- document.getElementById('add_cabinets_inactive').parentElement.parentElement.style.zIndex = 6;
294
+ var el = document.getElementById('add_cabinets_inactive');
295
+ if (el !== null && el !== void 0 && (_el$parentElement8 = el.parentElement) !== null && _el$parentElement8 !== void 0 && _el$parentElement8.parentElement) el.parentElement.parentElement.style.zIndex = 6;
274
296
  }
275
297
  }, {
276
298
  key: "closeFinishingTB",
277
299
  value: function closeFinishingTB() {
300
+ var _el$parentElement9;
278
301
  this.setState({
279
302
  finishingOpened: false
280
303
  });
281
- document.getElementById('finishing_touches_inactive').parentElement.parentElement.style.zIndex = 6;
304
+ var el = document.getElementById('finishing_touches_inactive');
305
+ if (el !== null && el !== void 0 && (_el$parentElement9 = el.parentElement) !== null && _el$parentElement9 !== void 0 && _el$parentElement9.parentElement) el.parentElement.parentElement.style.zIndex = 6;
282
306
  }
283
307
  }, {
284
308
  key: "closeApplianceTB",
285
309
  value: function closeApplianceTB() {
310
+ var _el$parentElement0;
286
311
  this.setState({
287
312
  applianceOpened: false
288
313
  });
289
- document.getElementById('add_appliances_inactive').parentElement.parentElement.style.zIndex = 6;
314
+ var el = document.getElementById('add_appliances_inactive');
315
+ if (el !== null && el !== void 0 && (_el$parentElement0 = el.parentElement) !== null && _el$parentElement0 !== void 0 && _el$parentElement0.parentElement) el.parentElement.parentElement.style.zIndex = 6;
290
316
  }
291
317
  }, {
292
- key: "closeDoorstyle",
293
- value: function closeDoorstyle() {
294
- this.setState({});
295
- document.getElementById('select_doorstyle_inactive').parentElement.parentElement.style.zIndex = 6;
296
- }
297
- }, {
298
- key: "closeReviewQuote",
299
- value: function closeReviewQuote() {
300
- this.setState({});
301
- document.getElementById('review_quote_inactive').parentElement.parentElement.style.zIndex = 6;
318
+ key: "getChildContext",
319
+ value: function getChildContext() {
320
+ var _this2 = this;
321
+ return _objectSpread(_objectSpread({}, objectsMap(actions, function (actionNamespace) {
322
+ return _this2.props[actionNamespace];
323
+ })), {}, {
324
+ translator: this.props.translator,
325
+ catalog: this.props.catalog
326
+ });
302
327
  }
303
328
  }, {
304
329
  key: "componentDidMount",
305
330
  value: function componentDidMount() {
306
331
  window.forRedo = [];
332
+ var store = this.context.store;
333
+ var _this$props = this.props,
334
+ stateExtractor = _this$props.stateExtractor,
335
+ plugins = _this$props.plugins;
336
+
337
+ // keep old behavior: run plugins once on mount
338
+ var newplugins = _toConsumableArray(plugins);
339
+ newplugins.forEach(function (newplugin) {
340
+ return newplugin(store, stateExtractor);
341
+ });
307
342
  }
308
343
  }, {
309
344
  key: "componentDidUpdate",
310
345
  value: function componentDidUpdate(prevProps) {
311
- var _this$props = this.props,
312
- stateExtractor = _this$props.stateExtractor,
313
- state = _this$props.state,
314
- projectActions = _this$props.projectActions,
315
- catalog = _this$props.catalog,
316
- externalEvent = _this$props.externalEvent,
317
- onInternalEvent = _this$props.onInternalEvent;
346
+ var _extractedState$getIn;
347
+ var _this$props2 = this.props,
348
+ externalEvent = _this$props2.externalEvent,
349
+ extractedState = _this$props2.extractedState,
350
+ projectActions = _this$props2.projectActions,
351
+ catalog = _this$props2.catalog;
318
352
 
319
- // handle external events
320
- var prevId = prevProps.externalEvent && prevProps.externalEvent.id;
321
- var nextId = externalEvent && externalEvent.id;
322
- if (nextId != null && prevId !== nextId) {
353
+ // same behavior: handle external event when it changes
354
+ if (prevProps.externalEvent !== externalEvent) {
323
355
  handleExternalEvent(this.props);
324
356
  }
325
- var plannerState = stateExtractor(state);
326
- var catalogReady = plannerState.getIn(['catalog', 'ready']);
327
- if (!catalogReady) {
328
- projectActions.initCatalog(catalog);
329
- }
357
+
358
+ // same behavior: init catalog until ready
359
+ var catalogReady = extractedState === null || extractedState === void 0 || (_extractedState$getIn = extractedState.getIn) === null || _extractedState$getIn === void 0 ? void 0 : _extractedState$getIn.call(extractedState, ['catalog', 'ready']);
360
+ if (!catalogReady) projectActions.initCatalog(catalog);
330
361
  }
331
362
  }, {
332
363
  key: "isProjectEmpty",
@@ -336,23 +367,51 @@ var LiteKitchenConfigurator = /*#__PURE__*/function (_Component) {
336
367
  var layer = layers.get(selectedLayer);
337
368
  return layer.areas.size + layer.lines.size + layer.holes.size + layer.items.size === 0;
338
369
  }
370
+ }, {
371
+ key: "getExtractedStateWithViewer2DInit",
372
+ value: function getExtractedStateWithViewer2DInit(extractedState, width, height) {
373
+ if (!extractedState) return extractedState;
374
+
375
+ // ✅ If the extractedState reference changed, drop cache immediately.
376
+ if (this._lastExtractedStateRef !== extractedState) {
377
+ this._lastExtractedStateRef = extractedState;
378
+ this._cachedViewer2DKey = null;
379
+ this._cachedExtractedState = null;
380
+ }
381
+ var _viewer2D = extractedState.getIn(['viewer2D']);
382
+ if (!_viewer2D || _viewer2D.size <= 0) return extractedState;
383
+ var v = _viewer2D.toJS();
384
+
385
+ // Only do the "center viewer2D if e/f are zero" logic.
386
+ // ✅ No need to build keys from unrelated parts of state.
387
+ if (v.e !== 0 || v.f !== 0) return extractedState;
388
+
389
+ // Build a cache key ONLY for this viewer2D-centering computation.
390
+ var cacheKey = "".concat(width, ":").concat(height, ":").concat(v.viewerWidth, ":").concat(v.viewerHeight, ":").concat(v.SVGWidth, ":").concat(v.SVGHeight);
391
+ if (this._cachedViewer2DKey === cacheKey && this._cachedExtractedState) {
392
+ return this._cachedExtractedState;
393
+ }
394
+ var centeredViewer2D = _viewer2D.merge({
395
+ e: v.viewerWidth / 2 - v.SVGWidth / 2,
396
+ f: v.viewerHeight / 2 - v.SVGHeight / 2,
397
+ a: 0.99,
398
+ d: 0.99
399
+ });
400
+ var merged = extractedState.merge({
401
+ viewer2D: centeredViewer2D
402
+ });
403
+ this._cachedViewer2DKey = cacheKey;
404
+ this._cachedExtractedState = merged;
405
+ return merged;
406
+ }
339
407
  }, {
340
408
  key: "render",
341
409
  value: function render() {
342
- var _this2 = this;
343
- var _this$props2 = this.props,
344
- width = _this$props2.width,
345
- height = _this$props2.height,
346
- state = _this$props2.state,
347
- stateExtractor = _this$props2.stateExtractor,
348
- props = _objectWithoutProperties(_this$props2, _excluded);
349
- var actionsFromProps = objectsMap(actions, function (ns) {
350
- return _this2.props[ns];
351
- });
352
- var appCtxValue = _objectSpread(_objectSpread({}, actionsFromProps), {}, {
353
- translator: this.props.translator,
354
- catalog: this.props.catalog
355
- });
410
+ var _this$props3 = this.props,
411
+ width = _this$props3.width,
412
+ height = _this$props3.height,
413
+ extractedState = _this$props3.extractedState,
414
+ props = _objectWithoutProperties(_this$props3, _excluded);
356
415
  var _this$state = this.state,
357
416
  savePopupVisible = _this$state.savePopupVisible,
358
417
  quotePopupVisible = _this$state.quotePopupVisible,
@@ -360,53 +419,22 @@ var LiteKitchenConfigurator = /*#__PURE__*/function (_Component) {
360
419
  signOpen = _this$state.signOpen,
361
420
  myProjectsOpen = _this$state.myProjectsOpen;
362
421
  var contentW = width - toolbarW;
363
- // let contentW = width - toolbarW - sidebarW;
364
- // let toolbarH = height - footerBarH;
365
- // let contentH = height - footerBarH;
366
- // let sidebarH = height - footerBarH;
367
- var toolbarH = height;
368
422
  var contentH = height;
369
- var sidebarH = height;
370
- var headerW = width;
371
- var headerH = 60;
372
- var extractedState = stateExtractor(state);
373
- var firstVisit = this.state.wizardStepOpend && this.isProjectEmpty(extractedState.scene);
423
+ var extracted = this.getExtractedStateWithViewer2DInit(extractedState, width, height);
424
+ var firstVisit = this.state.wizardStepOpend && this.isProjectEmpty(extracted.scene);
374
425
  var allVisible = firstVisit || signOpen || myProjectsOpen;
375
- var _scene = extractedState.getIn(['scene']);
376
- var len = convert(_scene.width).from(_scene.unit).to('cm');
377
- var _viewer2D = extractedState.getIn(['viewer2D']);
378
- if (_viewer2D.size > 0) {
379
- var scaleX = width / len * 3;
380
- var scaleY = height / len * 3;
381
- var scale = scaleX > scaleY ? scaleY : scaleX;
382
- var _e = width - len * scale,
383
- _f = height - len * scale;
384
- var viewer = _viewer2D.toJS();
385
- if (viewer.e === 0 && viewer.f === 0) {
386
- _viewer2D = _viewer2D.merge({
387
- e: viewer.viewerWidth / 2 - viewer.SVGWidth / 2,
388
- f: viewer.viewerHeight / 2 - viewer.SVGHeight / 2,
389
- a: 0.99,
390
- d: 0.99
391
- });
392
- }
393
- }
394
- extractedState = extractedState.merge({
395
- viewer2D: _viewer2D
396
- });
397
- return /*#__PURE__*/React.createElement(AppContext.Provider, {
398
- value: appCtxValue
399
- }, /*#__PURE__*/React.createElement("section", null, /*#__PURE__*/React.createElement("div", {
426
+ return /*#__PURE__*/React.createElement("section", null, /*#__PURE__*/React.createElement("div", {
400
427
  style: _objectSpread(_objectSpread({}, wrapperStyle), {}, {
401
428
  height: height,
402
429
  display: 'flex',
403
- justifyContent: 'center'
430
+ justifyContent: 'center',
431
+ position: 'relative'
404
432
  })
405
433
  }, /*#__PURE__*/React.createElement(Content, _extends({
406
434
  width: contentW,
407
435
  height: contentH,
408
436
  catalog: this.props.catalog,
409
- state: extractedState,
437
+ state: extracted,
410
438
  toolBar: this.state.toolbar,
411
439
  setToolbar: this.setToolbar,
412
440
  replaceCabinet: this.replaceCabinet,
@@ -416,7 +444,20 @@ var LiteKitchenConfigurator = /*#__PURE__*/function (_Component) {
416
444
  return event.preventDefault();
417
445
  },
418
446
  onInternalEvent: this.props.onInternalEvent
419
- })))));
447
+ })), /*#__PURE__*/React.createElement(WarningItem, {
448
+ id: "warning_box_2d",
449
+ style: {
450
+ display: 'none'
451
+ }
452
+ }, /*#__PURE__*/React.createElement(SubCategoryItemImage, {
453
+ maskImage: "/assets/img/svg/3d_item_warning_info.svg",
454
+ style: {
455
+ backgroundColor: constants.BG_COLOR_1,
456
+ marginRight: 10,
457
+ height: 30,
458
+ width: 30
459
+ }
460
+ }), "This item is not available in the current door style. Replace it with another one.")));
420
461
  }
421
462
  }]);
422
463
  }(Component);
@@ -430,13 +471,21 @@ LiteKitchenConfigurator.propTypes = {
430
471
  width: PropTypes.number.isRequired,
431
472
  height: PropTypes.number.isRequired,
432
473
  stateExtractor: PropTypes.func.isRequired,
433
- sidebarComponents: PropTypes.array,
434
- footerbarComponents: PropTypes.array,
435
- customContents: PropTypes.object,
436
- softwareSignature: PropTypes.string,
437
474
  configData: PropTypes.object,
438
- onInternalEvent: PropTypes.func
475
+ onInternalEvent: PropTypes.func,
476
+ extractedState: PropTypes.object,
477
+ // ✅ injected by connect
478
+ externalEvent: PropTypes.object
439
479
  };
480
+ LiteKitchenConfigurator.contextTypes = {
481
+ store: PropTypes.object.isRequired
482
+ };
483
+ LiteKitchenConfigurator.childContextTypes = _objectSpread(_objectSpread({}, objectsMap(actions, function () {
484
+ return PropTypes.object;
485
+ })), {}, {
486
+ translator: PropTypes.object,
487
+ catalog: PropTypes.object
488
+ });
440
489
  LiteKitchenConfigurator.defaultProps = {
441
490
  translator: new Translator(),
442
491
  catalog: new Catalog(),
@@ -449,10 +498,16 @@ LiteKitchenConfigurator.defaultProps = {
449
498
  configData: {}
450
499
  };
451
500
 
452
- //redux connect
453
- function mapStateToProps(reduxState) {
501
+ // ✅ Only select the slice you actually use.
502
+ // This preserves behavior but massively reduces rerenders.
503
+ function mapStateToProps(reduxState, ownProps) {
504
+ var stateExtractor = ownProps.stateExtractor || function (s) {
505
+ return s;
506
+ };
507
+ var extractedState = stateExtractor(reduxState);
454
508
  return {
455
- state: reduxState
509
+ extractedState: extractedState,
510
+ state: extractedState
456
511
  };
457
512
  }
458
513
  function mapDispatchToProps(dispatch) {