kitchen-simulator 1.0.0-alin.1 → 1.0.0-alin.11
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/LiteRenderer.js +159 -50
- package/es/actions/project-actions.js +7 -1
- package/es/actions/viewer2d-actions.js +2 -2
- package/es/class/project.js +19 -1
- package/es/components/viewer2d/viewer2d.js +2 -3
- package/es/components/viewer3d/viewer3d.js +15 -5
- package/es/constants.js +4 -2
- package/es/devLiteRenderer.js +25 -21
- package/es/index.js +15 -2
- package/es/models.js +1 -1
- package/es/reducers/project-reducer.js +3 -1
- package/es/reducers/viewer2d-reducer.js +2 -2
- package/es/reducers/viewer3d-reducer.js +1 -3
- package/es/utils/isolate-event-handler.js +150 -47
- package/lib/LiteRenderer.js +157 -48
- package/lib/actions/project-actions.js +7 -0
- package/lib/actions/viewer2d-actions.js +1 -1
- package/lib/class/project.js +18 -0
- package/lib/components/viewer2d/viewer2d.js +2 -3
- package/lib/components/viewer3d/viewer3d.js +15 -5
- package/lib/constants.js +7 -5
- package/lib/devLiteRenderer.js +25 -21
- package/lib/index.js +15 -2
- package/lib/models.js +2 -2
- package/lib/reducers/project-reducer.js +2 -0
- package/lib/reducers/viewer2d-reducer.js +1 -1
- package/lib/reducers/viewer3d-reducer.js +0 -2
- package/lib/utils/isolate-event-handler.js +151 -47
- package/package.json +6 -3
|
@@ -1,56 +1,159 @@
|
|
|
1
|
+
import _defineProperty from "@babel/runtime/helpers/esm/defineProperty";
|
|
2
|
+
import _asyncToGenerator from "@babel/runtime/helpers/esm/asyncToGenerator";
|
|
3
|
+
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; }
|
|
4
|
+
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; }
|
|
5
|
+
import _regeneratorRuntime from "@babel/runtime/regenerator";
|
|
6
|
+
import { fromJS, List, Map, Record } from 'immutable';
|
|
1
7
|
import { EXTERNAL_EVENT_ADD_WALL, EXTERNAL_EVENT_TOGGLE_TO_3D, EXTERNAL_EVENT_TOGGLE_TO_2D, EXTERNAL_EVENT_TOGGLE_TO_ELEVATION, EXTERNAL_EVENT_MOVE_PAN, MODE_IDLE, MODE_2D_PAN, EXTERNAL_EVENT_ADD_ITEM, ARRAY_3D_MODES, MODE_IDLE_3D, MODE_ELEVATION_VIEW, TOP, BOTTOM, LEFT, RIGHT, EXTERNAL_EVENT_NEW_PROJECT } from "../constants";
|
|
2
8
|
import { isEmpty } from "./helper";
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
9
|
+
import exporter from "../catalog/utils/exporter";
|
|
10
|
+
import { render2DItem, render3DItem } from "../catalog/utils/item-loader";
|
|
11
|
+
import Catalog from "../catalog/catalog";
|
|
12
|
+
import { CatalogElement, safeLoadMapList } from "../models";
|
|
13
|
+
var loadSVGsByItem = /*#__PURE__*/function () {
|
|
14
|
+
var _ref = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime.mark(function _callee(item) {
|
|
15
|
+
var _parsed$xml$viewBox, _parsed$xml$viewBox2, response, svgText, loader, parsed, _t;
|
|
16
|
+
return _regeneratorRuntime.wrap(function (_context) {
|
|
17
|
+
while (1) switch (_context.prev = _context.next) {
|
|
18
|
+
case 0:
|
|
19
|
+
if (item.outline) {
|
|
20
|
+
_context.next = 1;
|
|
21
|
+
break;
|
|
22
|
+
}
|
|
23
|
+
return _context.abrupt("return", null);
|
|
24
|
+
case 1:
|
|
25
|
+
_context.prev = 1;
|
|
26
|
+
_context.next = 2;
|
|
27
|
+
return fetch(item.outline, {
|
|
28
|
+
cache: 'no-store'
|
|
29
|
+
});
|
|
30
|
+
case 2:
|
|
31
|
+
response = _context.sent;
|
|
32
|
+
_context.next = 3;
|
|
33
|
+
return response.text();
|
|
34
|
+
case 3:
|
|
35
|
+
svgText = _context.sent;
|
|
36
|
+
loader = new SVGLoader();
|
|
37
|
+
parsed = loader.parse(svgText);
|
|
38
|
+
if (!isEmpty(parsed.paths)) {
|
|
39
|
+
_context.next = 4;
|
|
40
|
+
break;
|
|
41
|
+
}
|
|
42
|
+
return _context.abrupt("return", null);
|
|
43
|
+
case 4:
|
|
44
|
+
return _context.abrupt("return", {
|
|
45
|
+
paths: parsed.paths,
|
|
46
|
+
svgWidth: parseFloat(parsed.xml.getAttribute('width')) || ((_parsed$xml$viewBox = parsed.xml.viewBox) === null || _parsed$xml$viewBox === void 0 || (_parsed$xml$viewBox = _parsed$xml$viewBox.animVal) === null || _parsed$xml$viewBox === void 0 ? void 0 : _parsed$xml$viewBox.width) || 0,
|
|
47
|
+
svgHeight: parseFloat(parsed.xml.getAttribute('height')) || ((_parsed$xml$viewBox2 = parsed.xml.viewBox) === null || _parsed$xml$viewBox2 === void 0 || (_parsed$xml$viewBox2 = _parsed$xml$viewBox2.animVal) === null || _parsed$xml$viewBox2 === void 0 ? void 0 : _parsed$xml$viewBox2.height) || 0,
|
|
48
|
+
reverse: !parseFloat(parsed.xml.getAttribute('height'))
|
|
49
|
+
});
|
|
50
|
+
case 5:
|
|
51
|
+
_context.prev = 5;
|
|
52
|
+
_t = _context["catch"](1);
|
|
53
|
+
console.error('Failed to load SVG:', item.outline, _t);
|
|
54
|
+
return _context.abrupt("return", null);
|
|
55
|
+
case 6:
|
|
56
|
+
case "end":
|
|
57
|
+
return _context.stop();
|
|
19
58
|
}
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
59
|
+
}, _callee, null, [[1, 5]]);
|
|
60
|
+
}));
|
|
61
|
+
return function loadSVGsByItem(_x) {
|
|
62
|
+
return _ref.apply(this, arguments);
|
|
63
|
+
};
|
|
64
|
+
}();
|
|
65
|
+
export function handleExternalEvent(_x2, _x3) {
|
|
66
|
+
return _handleExternalEvent.apply(this, arguments);
|
|
67
|
+
}
|
|
68
|
+
function _handleExternalEvent() {
|
|
69
|
+
_handleExternalEvent = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime.mark(function _callee2(evt, props) {
|
|
70
|
+
var state, sLineCnt, element, catalog, outlineSVGData, catalogInstance, elementJs, _evt$payload, moveType, moveValue, value, defaulTitle, _t2, _t3;
|
|
71
|
+
return _regeneratorRuntime.wrap(function (_context2) {
|
|
72
|
+
while (1) switch (_context2.prev = _context2.next) {
|
|
73
|
+
case 0:
|
|
74
|
+
state = props.state;
|
|
75
|
+
_t2 = evt === null || evt === void 0 ? void 0 : evt.type;
|
|
76
|
+
_context2.next = _t2 === EXTERNAL_EVENT_TOGGLE_TO_3D ? 1 : _t2 === EXTERNAL_EVENT_TOGGLE_TO_2D ? 2 : _t2 === EXTERNAL_EVENT_TOGGLE_TO_ELEVATION ? 3 : _t2 === EXTERNAL_EVENT_ADD_WALL ? 4 : _t2 === EXTERNAL_EVENT_ADD_ITEM ? 5 : _t2 === EXTERNAL_EVENT_MOVE_PAN ? 9 : _t2 === EXTERNAL_EVENT_NEW_PROJECT ? 15 : 16;
|
|
37
77
|
break;
|
|
38
|
-
case
|
|
39
|
-
|
|
78
|
+
case 1:
|
|
79
|
+
props.projectActions.setMode(MODE_IDLE_3D);
|
|
80
|
+
return _context2.abrupt("continue", 16);
|
|
81
|
+
case 2:
|
|
82
|
+
props.projectActions.setMode(MODE_IDLE);
|
|
83
|
+
return _context2.abrupt("continue", 16);
|
|
84
|
+
case 3:
|
|
85
|
+
sLineCnt = state.getIn(['KitchenConfigurator', 'scene', 'layers', 'layer-1', 'selected', 'lines']).size;
|
|
86
|
+
if (sLineCnt > 0) props.projectActions.setMode(MODE_ELEVATION_VIEW);
|
|
87
|
+
return _context2.abrupt("continue", 16);
|
|
88
|
+
case 4:
|
|
89
|
+
if (state.mode === MODE_IDLE || state.mode === MODE_2D_PAN) props.linesActions.selectToolDrawingLine('wall');else {
|
|
90
|
+
props.projectActions.setMode(MODE_IDLE);
|
|
91
|
+
props.linesActions.selectToolDrawingLine('wall');
|
|
92
|
+
}
|
|
93
|
+
return _context2.abrupt("continue", 16);
|
|
94
|
+
case 5:
|
|
95
|
+
if (isEmpty(evt === null || evt === void 0 ? void 0 : evt.payload)) {
|
|
96
|
+
_context2.next = 8;
|
|
97
|
+
break;
|
|
98
|
+
}
|
|
99
|
+
element = evt.payload;
|
|
100
|
+
catalog = state.getIn(['KitchenConfigurator', 'catalog']).toJS(); // add item to catalog of state
|
|
101
|
+
if (!isEmpty(catalog === null || catalog === void 0 ? void 0 : catalog.elements[element.name])) {
|
|
102
|
+
_context2.next = 7;
|
|
103
|
+
break;
|
|
104
|
+
}
|
|
105
|
+
_context2.next = 6;
|
|
106
|
+
return loadSVGsByItem(element);
|
|
107
|
+
case 6:
|
|
108
|
+
outlineSVGData = _context2.sent;
|
|
109
|
+
catalogInstance = props.catalog;
|
|
110
|
+
elementJs = exporter(_objectSpread(_objectSpread({}, element), {}, {
|
|
111
|
+
outlineSVGData: outlineSVGData,
|
|
112
|
+
type: 'cabinet',
|
|
113
|
+
render2DItem: render2DItem,
|
|
114
|
+
render3DItem: render3DItem
|
|
115
|
+
}));
|
|
116
|
+
if (catalogInstance !== null && catalogInstance !== void 0 && catalogInstance.validateElement(elementJs)) {
|
|
117
|
+
props.projectActions.addElementToCatalog(elementJs);
|
|
118
|
+
}
|
|
119
|
+
case 7:
|
|
120
|
+
// start drawing item
|
|
121
|
+
ARRAY_3D_MODES.includes(state.mode) ? props.itemsActions.selectToolDrawingItem3D(element.name) : props.itemsActions.selectToolDrawingItem(element.name);
|
|
122
|
+
props.projectActions.pushLastSelectedCatalogElementToHistory(element);
|
|
123
|
+
props.projectActions.setIsCabinetDrawing(true);
|
|
124
|
+
case 8:
|
|
125
|
+
return _context2.abrupt("continue", 16);
|
|
126
|
+
case 9:
|
|
127
|
+
_evt$payload = evt.payload, moveType = _evt$payload.moveType, moveValue = _evt$payload.moveValue;
|
|
128
|
+
value = state.getIn(['KitchenConfigurator', 'viewer2D']).toJS();
|
|
129
|
+
_t3 = moveType;
|
|
130
|
+
_context2.next = _t3 === TOP ? 10 : _t3 === BOTTOM ? 11 : _t3 === RIGHT ? 12 : _t3 === LEFT ? 13 : 14;
|
|
40
131
|
break;
|
|
41
|
-
case
|
|
132
|
+
case 10:
|
|
133
|
+
value.f -= moveValue;
|
|
134
|
+
return _context2.abrupt("continue", 14);
|
|
135
|
+
case 11:
|
|
136
|
+
value.f += moveValue;
|
|
137
|
+
return _context2.abrupt("continue", 14);
|
|
138
|
+
case 12:
|
|
42
139
|
value.e += moveValue;
|
|
43
|
-
|
|
44
|
-
case
|
|
140
|
+
return _context2.abrupt("continue", 14);
|
|
141
|
+
case 13:
|
|
45
142
|
value.e -= moveValue;
|
|
46
|
-
|
|
143
|
+
return _context2.abrupt("continue", 14);
|
|
144
|
+
case 14:
|
|
145
|
+
if (value.e <= 10 && value.e + value.a * value.SVGWidth + 10 >= value.viewerWidth && value.f <= 80 && value.f + value.d * value.SVGHeight + 10 >= value.viewerHeight) props.viewer2DActions.updateCameraView(value);
|
|
146
|
+
return _context2.abrupt("continue", 16);
|
|
147
|
+
case 15:
|
|
148
|
+
defaulTitle = 'Untitle';
|
|
149
|
+
props.projectActions.newProject();
|
|
150
|
+
props.projectActions.rename(defaulTitle);
|
|
151
|
+
return _context2.abrupt("continue", 16);
|
|
152
|
+
case 16:
|
|
153
|
+
case "end":
|
|
154
|
+
return _context2.stop();
|
|
47
155
|
}
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
var defaulTitle = 'Untitle';
|
|
52
|
-
props.projectActions.newProject();
|
|
53
|
-
props.projectActions.rename(defaulTitle);
|
|
54
|
-
break;
|
|
55
|
-
}
|
|
156
|
+
}, _callee2);
|
|
157
|
+
}));
|
|
158
|
+
return _handleExternalEvent.apply(this, arguments);
|
|
56
159
|
}
|
package/lib/LiteRenderer.js
CHANGED
|
@@ -8,10 +8,15 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
8
8
|
exports["default"] = LiteRenderer;
|
|
9
9
|
var _regenerator = _interopRequireDefault(require("@babel/runtime/regenerator"));
|
|
10
10
|
var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
|
|
11
|
-
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
|
|
12
11
|
var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator"));
|
|
13
12
|
var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
|
|
13
|
+
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
|
|
14
14
|
var _objectWithoutProperties2 = _interopRequireDefault(require("@babel/runtime/helpers/objectWithoutProperties"));
|
|
15
|
+
var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck"));
|
|
16
|
+
var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass"));
|
|
17
|
+
var _possibleConstructorReturn2 = _interopRequireDefault(require("@babel/runtime/helpers/possibleConstructorReturn"));
|
|
18
|
+
var _getPrototypeOf2 = _interopRequireDefault(require("@babel/runtime/helpers/getPrototypeOf"));
|
|
19
|
+
var _inherits2 = _interopRequireDefault(require("@babel/runtime/helpers/inherits"));
|
|
15
20
|
var _react = _interopRequireWildcard(require("react"));
|
|
16
21
|
var _propTypes = _interopRequireDefault(require("prop-types"));
|
|
17
22
|
var _reactRedux = require("react-redux");
|
|
@@ -35,10 +40,12 @@ var _projectActions = require("./actions/project-actions");
|
|
|
35
40
|
var _exporter = _interopRequireDefault(require("./catalog/utils/exporter"));
|
|
36
41
|
var THREE = _interopRequireWildcard(require("three"));
|
|
37
42
|
var _LiteKitchenConfigurator = _interopRequireDefault(require("./LiteKitchenConfigurator"));
|
|
38
|
-
var _excluded = ["width", "height", "projectElement", "categoryData", "dataBundle", "configData", "options", "user", "auth", "featureFlags", "sentry", "analytics", "externalEvent", "
|
|
43
|
+
var _excluded = ["width", "height", "projectElement", "categoryData", "dataBundle", "configData", "options", "user", "auth", "featureFlags", "sentry", "analytics", "externalEvent", "onError"];
|
|
39
44
|
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); }
|
|
40
45
|
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; }
|
|
41
46
|
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; }
|
|
47
|
+
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)); }
|
|
48
|
+
function _isNativeReflectConstruct() { try { var t = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); } catch (t) {} return (_isNativeReflectConstruct = function _isNativeReflectConstruct() { return !!t; })(); }
|
|
42
49
|
if (typeof window !== 'undefined') window.THREE = THREE;
|
|
43
50
|
|
|
44
51
|
/* ============================== component ============================= */
|
|
@@ -87,6 +94,62 @@ var store = (0, _redux.createStore)(reducer, null, !isProduction && window.devTo
|
|
|
87
94
|
return f;
|
|
88
95
|
});
|
|
89
96
|
var plugins = [(0, _export2.Keyboard)(), (0, _export2.ConsoleDebugger)()];
|
|
97
|
+
function serializeError(err) {
|
|
98
|
+
try {
|
|
99
|
+
if (!err) return {
|
|
100
|
+
message: 'Unknown error'
|
|
101
|
+
};
|
|
102
|
+
if (err instanceof Error) {
|
|
103
|
+
return {
|
|
104
|
+
name: err.name,
|
|
105
|
+
message: err.message,
|
|
106
|
+
stack: err.stack
|
|
107
|
+
};
|
|
108
|
+
}
|
|
109
|
+
return {
|
|
110
|
+
message: String(err),
|
|
111
|
+
raw: safeJson(err)
|
|
112
|
+
};
|
|
113
|
+
} catch (_unused) {
|
|
114
|
+
return {
|
|
115
|
+
message: 'Error serializing error'
|
|
116
|
+
};
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
function safeJson(v) {
|
|
120
|
+
try {
|
|
121
|
+
return JSON.parse(JSON.stringify(v));
|
|
122
|
+
} catch (_unused2) {
|
|
123
|
+
return undefined;
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
|
|
127
|
+
/* ---------- Error Boundary that pushes into buffer ---------- */
|
|
128
|
+
var ToolErrorBoundary = /*#__PURE__*/function (_React$Component) {
|
|
129
|
+
function ToolErrorBoundary() {
|
|
130
|
+
(0, _classCallCheck2["default"])(this, ToolErrorBoundary);
|
|
131
|
+
return _callSuper(this, ToolErrorBoundary, arguments);
|
|
132
|
+
}
|
|
133
|
+
(0, _inherits2["default"])(ToolErrorBoundary, _React$Component);
|
|
134
|
+
return (0, _createClass2["default"])(ToolErrorBoundary, [{
|
|
135
|
+
key: "componentDidCatch",
|
|
136
|
+
value: function componentDidCatch(error, info) {
|
|
137
|
+
var pushError = this.props.pushError;
|
|
138
|
+
pushError({
|
|
139
|
+
type: 'render-error',
|
|
140
|
+
error: serializeError(error),
|
|
141
|
+
info: {
|
|
142
|
+
componentStack: info === null || info === void 0 ? void 0 : info.componentStack
|
|
143
|
+
}
|
|
144
|
+
});
|
|
145
|
+
}
|
|
146
|
+
}, {
|
|
147
|
+
key: "render",
|
|
148
|
+
value: function render() {
|
|
149
|
+
return this.props.children;
|
|
150
|
+
}
|
|
151
|
+
}]);
|
|
152
|
+
}(_react["default"].Component);
|
|
90
153
|
function LiteRenderer(props) {
|
|
91
154
|
var width = props.width,
|
|
92
155
|
height = props.height,
|
|
@@ -101,10 +164,95 @@ function LiteRenderer(props) {
|
|
|
101
164
|
sentry = props.sentry,
|
|
102
165
|
analytics = props.analytics,
|
|
103
166
|
externalEvent = props.externalEvent,
|
|
104
|
-
onEvent = props.onEvent,
|
|
105
|
-
onSave = props.onSave,
|
|
106
167
|
onError = props.onError,
|
|
107
168
|
passThrough = (0, _objectWithoutProperties2["default"])(props, _excluded);
|
|
169
|
+
|
|
170
|
+
/* ---------- track last external event ---------- */
|
|
171
|
+
var lastExternalEventRef = (0, _react.useRef)(null);
|
|
172
|
+
(0, _react.useEffect)(function () {
|
|
173
|
+
if (externalEvent) {
|
|
174
|
+
lastExternalEventRef.current = externalEvent;
|
|
175
|
+
}
|
|
176
|
+
}, [externalEvent]);
|
|
177
|
+
|
|
178
|
+
/* ---------- error buffer + last emitted bundle ---------- */
|
|
179
|
+
var errorsBufferRef = (0, _react.useRef)([]); // pending errors (not yet emitted)
|
|
180
|
+
var lastEmittedRef = (0, _react.useRef)({
|
|
181
|
+
externalEvent: null,
|
|
182
|
+
errors: []
|
|
183
|
+
}); // last bundle we sent
|
|
184
|
+
var flushTimerRef = (0, _react.useRef)(null);
|
|
185
|
+
var emit = (0, _react.useCallback)(function (external, errors) {
|
|
186
|
+
var payload = {
|
|
187
|
+
externalEvent: external || null,
|
|
188
|
+
errors: errors || []
|
|
189
|
+
};
|
|
190
|
+
try {
|
|
191
|
+
onError === null || onError === void 0 || onError(payload);
|
|
192
|
+
} catch (_unused3) {}
|
|
193
|
+
// eslint-disable-next-line no-console
|
|
194
|
+
console.debug('[LiteRenderer:onError]', payload);
|
|
195
|
+
lastEmittedRef.current = payload;
|
|
196
|
+
}, [onError]);
|
|
197
|
+
|
|
198
|
+
// batch short bursts (e.g., multiple async errors in same tick)
|
|
199
|
+
var scheduleFlush = (0, _react.useCallback)(function () {
|
|
200
|
+
if (flushTimerRef.current) return;
|
|
201
|
+
flushTimerRef.current = setTimeout(function () {
|
|
202
|
+
flushTimerRef.current = null;
|
|
203
|
+
var errors = errorsBufferRef.current;
|
|
204
|
+
if (!errors.length) return;
|
|
205
|
+
errorsBufferRef.current = [];
|
|
206
|
+
emit(lastExternalEventRef.current, errors);
|
|
207
|
+
}, 0); // micro-batch; increase (e.g. 50ms) if you want coarser batching
|
|
208
|
+
}, [emit]);
|
|
209
|
+
var pushError = (0, _react.useCallback)(function (errPayload) {
|
|
210
|
+
errorsBufferRef.current.push(_objectSpread({
|
|
211
|
+
ts: Date.now()
|
|
212
|
+
}, errPayload));
|
|
213
|
+
scheduleFlush();
|
|
214
|
+
}, [scheduleFlush]);
|
|
215
|
+
|
|
216
|
+
/* ---------- global runtime + async error capture ---------- */
|
|
217
|
+
(0, _react.useEffect)(function () {
|
|
218
|
+
var onWindowError = function onWindowError(event) {
|
|
219
|
+
pushError({
|
|
220
|
+
type: 'runtime-error',
|
|
221
|
+
error: serializeError((event === null || event === void 0 ? void 0 : event.error) || (event === null || event === void 0 ? void 0 : event.message)),
|
|
222
|
+
meta: {
|
|
223
|
+
filename: event === null || event === void 0 ? void 0 : event.filename,
|
|
224
|
+
lineno: event === null || event === void 0 ? void 0 : event.lineno,
|
|
225
|
+
colno: event === null || event === void 0 ? void 0 : event.colno
|
|
226
|
+
}
|
|
227
|
+
});
|
|
228
|
+
};
|
|
229
|
+
var onUnhandledRejection = function onUnhandledRejection(event) {
|
|
230
|
+
pushError({
|
|
231
|
+
type: 'unhandled-rejection',
|
|
232
|
+
error: serializeError(event === null || event === void 0 ? void 0 : event.reason)
|
|
233
|
+
});
|
|
234
|
+
};
|
|
235
|
+
window.addEventListener('error', onWindowError);
|
|
236
|
+
window.addEventListener('unhandledrejection', onUnhandledRejection);
|
|
237
|
+
return function () {
|
|
238
|
+
window.removeEventListener('error', onWindowError);
|
|
239
|
+
window.removeEventListener('unhandledrejection', onUnhandledRejection);
|
|
240
|
+
};
|
|
241
|
+
}, [pushError]);
|
|
242
|
+
|
|
243
|
+
/* ---------- re-trigger last batch when externalEvent changes ---------- */
|
|
244
|
+
var prevExternalEventRef = (0, _react.useRef)(null);
|
|
245
|
+
(0, _react.useEffect)(function () {
|
|
246
|
+
var prev = prevExternalEventRef.current;
|
|
247
|
+
if (prev === externalEvent) return;
|
|
248
|
+
prevExternalEventRef.current = externalEvent;
|
|
249
|
+
|
|
250
|
+
// if we already emitted something before, re-send it with the new event context
|
|
251
|
+
var last = lastEmittedRef.current;
|
|
252
|
+
if (last && last.errors && last.errors.length) {
|
|
253
|
+
emit(lastExternalEventRef.current, last.errors);
|
|
254
|
+
}
|
|
255
|
+
}, [externalEvent, emit]);
|
|
108
256
|
var _ref = categoryData && categoryData.data || {},
|
|
109
257
|
catalogs = _ref.catalogs,
|
|
110
258
|
colorAlias = _ref.colorAlias,
|
|
@@ -387,43 +535,6 @@ function LiteRenderer(props) {
|
|
|
387
535
|
});
|
|
388
536
|
for (var x in Item) MyCatalog.registerElement(Item[x]);
|
|
389
537
|
}, [outlineSVGData, data, appliances, furnishing, lighting]);
|
|
390
|
-
|
|
391
|
-
// Forward updates/save moments to host
|
|
392
|
-
(0, _react.useEffect)(function () {
|
|
393
|
-
if (!onEvent && !onSave && !onError) return;
|
|
394
|
-
var unsubscribe = store.subscribe(function () {
|
|
395
|
-
var _state$get, _state$get$get, _state$get$get$get;
|
|
396
|
-
var state = store.getState();
|
|
397
|
-
onEvent === null || onEvent === void 0 || onEvent({
|
|
398
|
-
type: 'state-update',
|
|
399
|
-
payload: {
|
|
400
|
-
state: state
|
|
401
|
-
}
|
|
402
|
-
});
|
|
403
|
-
var pendingSave = state === null || state === void 0 || (_state$get = state.get) === null || _state$get === void 0 || (_state$get = _state$get.call(state, 'KitchenConfigurator')) === null || _state$get === void 0 || (_state$get$get = _state$get.get) === null || _state$get$get === void 0 || (_state$get$get = _state$get$get.call(_state$get, 'misc')) === null || _state$get$get === void 0 || (_state$get$get$get = _state$get$get.get) === null || _state$get$get$get === void 0 ? void 0 : _state$get$get$get.call(_state$get$get, 'pendingSave');
|
|
404
|
-
if (pendingSave && onSave) {
|
|
405
|
-
try {
|
|
406
|
-
var _planner$get, _planner$get2;
|
|
407
|
-
var planner = state.get('KitchenConfigurator');
|
|
408
|
-
var currentScene = planner !== null && planner !== void 0 && (_planner$get = planner.get) !== null && _planner$get !== void 0 && (_planner$get = _planner$get.call(planner, 'scene')) !== null && _planner$get !== void 0 && _planner$get.toJS ? planner.get('scene').toJS() : (planner === null || planner === void 0 || (_planner$get2 = planner.get) === null || _planner$get2 === void 0 ? void 0 : _planner$get2.call(planner, 'scene')) || null;
|
|
409
|
-
onSave({
|
|
410
|
-
type: 'save',
|
|
411
|
-
payload: {
|
|
412
|
-
scene: currentScene
|
|
413
|
-
}
|
|
414
|
-
});
|
|
415
|
-
} catch (e) {
|
|
416
|
-
onError === null || onError === void 0 || onError({
|
|
417
|
-
type: 'save-error',
|
|
418
|
-
error: e
|
|
419
|
-
});
|
|
420
|
-
}
|
|
421
|
-
}
|
|
422
|
-
});
|
|
423
|
-
return function () {
|
|
424
|
-
return unsubscribe();
|
|
425
|
-
};
|
|
426
|
-
}, [store, onEvent, onSave, onError]);
|
|
427
538
|
(0, _react.useEffect)(function () {
|
|
428
539
|
if (projectElement.length === 0) return;
|
|
429
540
|
if (!catalogInitiated) return;
|
|
@@ -441,6 +552,8 @@ function LiteRenderer(props) {
|
|
|
441
552
|
}, [project_data, catalogInitiated]);
|
|
442
553
|
return /*#__PURE__*/_react["default"].createElement(_AppContext["default"].Provider, null, /*#__PURE__*/_react["default"].createElement(_reactRedux.Provider, {
|
|
443
554
|
store: store
|
|
555
|
+
}, /*#__PURE__*/_react["default"].createElement(ToolErrorBoundary, {
|
|
556
|
+
pushError: pushError
|
|
444
557
|
}, /*#__PURE__*/_react["default"].createElement(_LiteKitchenConfigurator["default"], (0, _extends2["default"])({
|
|
445
558
|
catalog: MyCatalog,
|
|
446
559
|
width: width,
|
|
@@ -454,11 +567,8 @@ function LiteRenderer(props) {
|
|
|
454
567
|
categoryData: categoryData,
|
|
455
568
|
data: data,
|
|
456
569
|
configData: configData,
|
|
457
|
-
externalEvent: externalEvent
|
|
458
|
-
|
|
459
|
-
onSave: onSave,
|
|
460
|
-
onError: onError
|
|
461
|
-
}, passThrough))));
|
|
570
|
+
externalEvent: externalEvent
|
|
571
|
+
}, passThrough)))));
|
|
462
572
|
}
|
|
463
573
|
|
|
464
574
|
/* ============================== prop types ============================== */
|
|
@@ -481,8 +591,7 @@ LiteRenderer.propTypes = {
|
|
|
481
591
|
dsn: _propTypes["default"].string,
|
|
482
592
|
environment: _propTypes["default"].string
|
|
483
593
|
}),
|
|
484
|
-
|
|
485
|
-
onSave: _propTypes["default"].func,
|
|
594
|
+
externalEvent: _propTypes["default"].object,
|
|
486
595
|
onError: _propTypes["default"].func,
|
|
487
596
|
store: _propTypes["default"].object
|
|
488
597
|
};
|
|
@@ -4,6 +4,7 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
6
|
exports.addCircularGuide = addCircularGuide;
|
|
7
|
+
exports.addElementToCatalog = addElementToCatalog;
|
|
7
8
|
exports.addHorizontalGuide = addHorizontalGuide;
|
|
8
9
|
exports.addVerticalGuide = addVerticalGuide;
|
|
9
10
|
exports.changeCatalogPage = changeCatalogPage;
|
|
@@ -218,6 +219,12 @@ function initCatalog(catalog) {
|
|
|
218
219
|
catalog: catalog
|
|
219
220
|
};
|
|
220
221
|
}
|
|
222
|
+
function addElementToCatalog(element) {
|
|
223
|
+
return {
|
|
224
|
+
type: _constants.ADD_ELEMENT_TO_CATALOG,
|
|
225
|
+
element: element
|
|
226
|
+
};
|
|
227
|
+
}
|
|
221
228
|
function updateMouseCoord() {
|
|
222
229
|
var coords = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {
|
|
223
230
|
x: x,
|
package/lib/class/project.js
CHANGED
|
@@ -601,6 +601,24 @@ var Project = exports["default"] = /*#__PURE__*/function () {
|
|
|
601
601
|
};
|
|
602
602
|
}
|
|
603
603
|
}
|
|
604
|
+
}, {
|
|
605
|
+
key: "addElementToCatalog",
|
|
606
|
+
value: function addElementToCatalog(state, element) {
|
|
607
|
+
try {
|
|
608
|
+
var elements = state.getIn(['catalog', 'elements']).toJS();
|
|
609
|
+
elements[element.name] = element;
|
|
610
|
+
var newElements = (0, _models.safeLoadMapList)(elements, _models.CatalogElement);
|
|
611
|
+
state = state.setIn(['catalog', 'elements'], newElements);
|
|
612
|
+
return {
|
|
613
|
+
updatedState: state
|
|
614
|
+
};
|
|
615
|
+
} catch (error) {
|
|
616
|
+
console.log('initCatalogError', error);
|
|
617
|
+
return {
|
|
618
|
+
updatedState: state
|
|
619
|
+
};
|
|
620
|
+
}
|
|
621
|
+
}
|
|
604
622
|
}, {
|
|
605
623
|
key: "updateMouseCoord",
|
|
606
624
|
value: function updateMouseCoord(state, coords) {
|
|
@@ -1363,9 +1363,8 @@ function Viewer2D(_ref, _ref2) {
|
|
|
1363
1363
|
onMouseDown: onMouseDown,
|
|
1364
1364
|
onMouseMove: onMouseMove,
|
|
1365
1365
|
onMouseUp: onMouseUp,
|
|
1366
|
-
|
|
1367
|
-
|
|
1368
|
-
},
|
|
1366
|
+
miniaturePosition: "none",
|
|
1367
|
+
toolbarPosition: "none",
|
|
1369
1368
|
detectPinchGesture: false,
|
|
1370
1369
|
disableDoubleClickZoomWithToolAuto: true,
|
|
1371
1370
|
ref: Viewer
|
|
@@ -101,7 +101,9 @@ var Scene3DViewer = exports["default"] = /*#__PURE__*/function (_React$Component
|
|
|
101
101
|
} else {
|
|
102
102
|
if (_this.props.downloadFlag) window.__elevationRendererDownload[mode] = _this.renderer;else window.__elevationRenderer = _this.renderer;
|
|
103
103
|
}
|
|
104
|
-
_this.renderer.domElement
|
|
104
|
+
if (_this.renderer && _this.renderer.domElement) {
|
|
105
|
+
_this.renderer.domElement.style.display = 'none';
|
|
106
|
+
}
|
|
105
107
|
return _this;
|
|
106
108
|
}
|
|
107
109
|
(0, _inherits2["default"])(Scene3DViewer, _React$Component);
|
|
@@ -2365,7 +2367,9 @@ var Scene3DViewer = exports["default"] = /*#__PURE__*/function (_React$Component
|
|
|
2365
2367
|
self.props.setIsLoadingElevation('front', false);
|
|
2366
2368
|
}, 100);
|
|
2367
2369
|
}
|
|
2368
|
-
self.renderer.domElement
|
|
2370
|
+
if (self.renderer && self.renderer.domElement) {
|
|
2371
|
+
self.renderer.domElement.style.display = 'block';
|
|
2372
|
+
}
|
|
2369
2373
|
}
|
|
2370
2374
|
}
|
|
2371
2375
|
}
|
|
@@ -2509,7 +2513,9 @@ var Scene3DViewer = exports["default"] = /*#__PURE__*/function (_React$Component
|
|
|
2509
2513
|
break;
|
|
2510
2514
|
}
|
|
2511
2515
|
}
|
|
2512
|
-
self.renderer.domElement
|
|
2516
|
+
if (self.renderer && self.renderer.domElement) {
|
|
2517
|
+
self.renderer.domElement.style.display = 'none';
|
|
2518
|
+
}
|
|
2513
2519
|
}
|
|
2514
2520
|
if (nextProps.state.scene.showfg == true) {
|
|
2515
2521
|
implementBacksplash();
|
|
@@ -2546,7 +2552,9 @@ var Scene3DViewer = exports["default"] = /*#__PURE__*/function (_React$Component
|
|
|
2546
2552
|
isLoadingCabinet = _this$state2.isLoadingCabinet;
|
|
2547
2553
|
if (isLoading) {
|
|
2548
2554
|
if (this.props.downloadFlag) {
|
|
2549
|
-
this.renderer.domElement
|
|
2555
|
+
if (this.renderer && this.renderer.domElement) {
|
|
2556
|
+
this.renderer.domElement.style.display = 'none';
|
|
2557
|
+
}
|
|
2550
2558
|
return /*#__PURE__*/_react["default"].createElement("div", {
|
|
2551
2559
|
style: {
|
|
2552
2560
|
alignItems: ' center',
|
|
@@ -2567,7 +2575,9 @@ var Scene3DViewer = exports["default"] = /*#__PURE__*/function (_React$Component
|
|
|
2567
2575
|
} else {
|
|
2568
2576
|
document.getElementById('front') && (document.getElementById('front').style.display = 'none');
|
|
2569
2577
|
document.getElementById('error').style.display = 'none';
|
|
2570
|
-
this.renderer.domElement
|
|
2578
|
+
if (this.renderer && this.renderer.domElement) {
|
|
2579
|
+
this.renderer.domElement.style.display = 'none';
|
|
2580
|
+
}
|
|
2571
2581
|
return /*#__PURE__*/_react["default"].createElement("div", {
|
|
2572
2582
|
style: {
|
|
2573
2583
|
textAlign: 'center',
|