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.
- package/es/LiteKitchenConfigurator.js +141 -288
- package/es/LiteRenderer.js +159 -398
- package/es/actions/items-actions.js +10 -6
- package/es/actions/lines-actions.js +3 -1
- package/es/actions/project-actions.js +15 -5
- package/es/assets/img/svg/bottombar/elevation.svg +12 -5
- package/es/catalog/areas/area/planner-element.js +10 -5
- package/es/catalog/catalog.js +1 -4
- package/es/catalog/factories/area-factory-3d.js +2 -1
- package/es/catalog/factories/wall-factory-3d.js +2 -2
- package/es/catalog/factories/wall-factory.js +8 -8
- package/es/catalog/lines/wall/planner-element.js +18 -9
- package/es/catalog/utils/exporter.js +7 -3
- package/es/catalog/utils/item-loader.js +24 -14
- package/es/catalog/utils/mtl-loader.js +2 -2
- package/es/catalog/utils/obj-loader.js +2 -2
- package/es/class/hole.js +0 -2
- package/es/class/item.js +183 -184
- package/es/class/line.js +11 -3
- package/es/class/project.js +165 -48
- package/es/components/content.js +19 -6
- package/es/components/viewer2d/grids/grid-streak.js +1 -1
- package/es/components/viewer2d/item.js +84 -51
- package/es/components/viewer2d/line.js +315 -243
- package/es/components/viewer2d/ruler.js +20 -38
- package/es/components/viewer2d/rulerDist.js +48 -78
- package/es/components/viewer2d/utils.js +6 -0
- package/es/components/viewer2d/viewer2d.js +298 -220
- package/es/components/viewer3d/front3D.js +3 -2
- package/es/components/viewer3d/libs/mtl-loader.js +2 -2
- package/es/components/viewer3d/libs/obj-loader.js +2 -2
- package/es/components/viewer3d/libs/orbit-controls.js +3 -4
- package/es/components/viewer3d/libs/pointer-lock-controls.js +6 -7
- package/es/components/viewer3d/scene-creator.js +51 -15
- package/es/components/viewer3d/viewer3d.js +121 -82
- package/es/constants.js +111 -3
- package/es/devLiteRenderer.js +688 -31
- package/es/index.js +567 -87
- package/es/models.js +9 -5
- package/es/plugins/SVGLoader.js +7 -5
- package/es/plugins/console-debugger.js +0 -2
- package/es/plugins/keyboard.js +15 -6
- package/es/reducers/items-reducer.js +5 -5
- package/es/reducers/lines-reducer.js +1 -1
- package/es/reducers/project-reducer.js +5 -3
- package/es/shared-style.js +4 -4
- package/es/utils/geometry.js +163 -2
- package/es/utils/get-edges-of-subgraphs.js +1 -1
- package/es/utils/graph-cycles.js +1 -1
- package/es/utils/graph.js +1 -1
- package/es/utils/helper.js +105 -3
- package/es/utils/isolate-event-handler.js +1542 -164
- package/es/utils/molding.js +461 -11
- package/lib/LiteKitchenConfigurator.js +141 -289
- package/lib/LiteRenderer.js +159 -399
- package/lib/actions/items-actions.js +10 -6
- package/lib/actions/lines-actions.js +3 -1
- package/lib/actions/project-actions.js +15 -4
- package/lib/assets/img/svg/bottombar/elevation.svg +12 -5
- package/lib/catalog/areas/area/planner-element.js +11 -5
- package/lib/catalog/catalog.js +1 -4
- package/lib/catalog/factories/area-factory-3d.js +2 -1
- package/lib/catalog/factories/wall-factory-3d.js +2 -2
- package/lib/catalog/factories/wall-factory.js +8 -8
- package/lib/catalog/lines/wall/planner-element.js +19 -9
- package/lib/catalog/utils/exporter.js +7 -3
- package/lib/catalog/utils/item-loader.js +24 -14
- package/lib/catalog/utils/mtl-loader.js +9 -2
- package/lib/catalog/utils/obj-loader.js +10 -2
- package/lib/class/hole.js +0 -2
- package/lib/class/item.js +180 -181
- package/lib/class/line.js +9 -1
- package/lib/class/project.js +164 -47
- package/lib/components/content.js +19 -6
- package/lib/components/viewer2d/grids/grid-streak.js +1 -1
- package/lib/components/viewer2d/item.js +83 -50
- package/lib/components/viewer2d/line.js +315 -242
- package/lib/components/viewer2d/ruler.js +19 -37
- package/lib/components/viewer2d/rulerDist.js +48 -78
- package/lib/components/viewer2d/utils.js +7 -0
- package/lib/components/viewer2d/viewer2d.js +296 -219
- package/lib/components/viewer3d/front3D.js +3 -2
- package/lib/components/viewer3d/libs/mtl-loader.js +9 -2
- package/lib/components/viewer3d/libs/obj-loader.js +9 -2
- package/lib/components/viewer3d/libs/orbit-controls.js +11 -5
- package/lib/components/viewer3d/libs/pointer-lock-controls.js +13 -7
- package/lib/components/viewer3d/scene-creator.js +49 -13
- package/lib/components/viewer3d/viewer3d.js +119 -80
- package/lib/constants.js +116 -7
- package/lib/devLiteRenderer.js +687 -30
- package/lib/index.js +567 -87
- package/lib/models.js +9 -5
- package/lib/plugins/SVGLoader.js +7 -5
- package/lib/plugins/console-debugger.js +0 -2
- package/lib/plugins/keyboard.js +15 -6
- package/lib/reducers/items-reducer.js +5 -5
- package/lib/reducers/lines-reducer.js +1 -1
- package/lib/reducers/project-reducer.js +4 -2
- package/lib/shared-style.js +4 -4
- package/lib/utils/geometry.js +164 -2
- package/lib/utils/get-edges-of-subgraphs.js +6 -1
- package/lib/utils/graph-cycles.js +7 -8
- package/lib/utils/graph.js +6 -1
- package/lib/utils/helper.js +108 -2
- package/lib/utils/isolate-event-handler.js +1538 -159
- package/lib/utils/molding.js +463 -9
- package/package.json +1 -1
- package/es/assets/Window.hdr +0 -2100
- package/es/assets/img/1.jpg +0 -0
- package/lib/assets/Window.hdr +0 -2100
- 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
|
|
20
|
-
var
|
|
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", "
|
|
36
|
-
|
|
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: ',
|
|
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')
|
|
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')
|
|
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')
|
|
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')
|
|
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')
|
|
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')
|
|
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
|
-
|
|
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')
|
|
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')
|
|
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')
|
|
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$
|
|
363
|
-
|
|
364
|
-
|
|
365
|
-
|
|
366
|
-
|
|
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: "
|
|
470
|
-
value: function
|
|
471
|
-
|
|
472
|
-
|
|
473
|
-
|
|
474
|
-
|
|
475
|
-
|
|
476
|
-
|
|
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
|
|
488
|
-
if (
|
|
489
|
-
|
|
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$
|
|
532
|
-
width = _this$
|
|
533
|
-
height = _this$
|
|
534
|
-
|
|
535
|
-
|
|
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
|
|
553
|
-
var
|
|
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:
|
|
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
|
-
|
|
640
|
-
|
|
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
|
-
//
|
|
664
|
-
|
|
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
|
-
|
|
517
|
+
extractedState: extractedState,
|
|
518
|
+
state: extractedState
|
|
667
519
|
};
|
|
668
520
|
}
|
|
669
521
|
function mapDispatchToProps(dispatch) {
|