kitchen-simulator 3.1.15 → 3.3.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/catalog/utils/exporter.js +1 -0
- package/es/components/viewer3d/scene-creator.js +33 -3
- package/es/components/viewer3d/viewer3d.js +8 -6
- package/es/index.js +386 -12
- package/es/models.js +2 -1
- package/es/utils/isolate-event-handler.js +83 -37
- package/lib/catalog/utils/exporter.js +1 -0
- package/lib/components/viewer3d/scene-creator.js +32 -2
- package/lib/components/viewer3d/viewer3d.js +8 -6
- package/lib/index.js +386 -12
- package/lib/models.js +2 -1
- package/lib/utils/isolate-event-handler.js +83 -37
- package/package.json +1 -1
package/lib/index.js
CHANGED
|
@@ -6,32 +6,341 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
6
6
|
});
|
|
7
7
|
exports["default"] = void 0;
|
|
8
8
|
exports.renderKitchenSimulator = renderKitchenSimulator;
|
|
9
|
+
var _regenerator = _interopRequireDefault(require("@babel/runtime/regenerator"));
|
|
9
10
|
var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
|
|
10
11
|
var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck"));
|
|
11
12
|
var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass"));
|
|
12
13
|
var _possibleConstructorReturn2 = _interopRequireDefault(require("@babel/runtime/helpers/possibleConstructorReturn"));
|
|
13
14
|
var _getPrototypeOf2 = _interopRequireDefault(require("@babel/runtime/helpers/getPrototypeOf"));
|
|
14
15
|
var _inherits2 = _interopRequireDefault(require("@babel/runtime/helpers/inherits"));
|
|
16
|
+
var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator"));
|
|
15
17
|
var _react = _interopRequireDefault(require("react"));
|
|
16
|
-
var _reactDom = _interopRequireDefault(require("react-dom"));
|
|
17
18
|
var _LiteRenderer = _interopRequireDefault(require("./LiteRenderer"));
|
|
19
|
+
var _client = require("react-dom/client");
|
|
18
20
|
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)); }
|
|
19
21
|
function _isNativeReflectConstruct() { try { var t = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); } catch (t) {} return (_isNativeReflectConstruct = function _isNativeReflectConstruct() { return !!t; })(); }
|
|
22
|
+
function _createForOfIteratorHelper(r, e) { var t = "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (!t) { if (Array.isArray(r) || (t = _unsupportedIterableToArray(r)) || e && r && "number" == typeof r.length) { t && (r = t); var _n = 0, F = function F() {}; return { s: F, n: function n() { return _n >= r.length ? { done: !0 } : { done: !1, value: r[_n++] }; }, e: function e(r) { throw r; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var o, a = !0, u = !1; return { s: function s() { t = t.call(r); }, n: function n() { var r = t.next(); return a = r.done, r; }, e: function e(r) { u = !0, o = r; }, f: function f() { try { a || null == t["return"] || t["return"](); } finally { if (u) throw o; } } }; }
|
|
23
|
+
function _unsupportedIterableToArray(r, a) { if (r) { if ("string" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return "Object" === t && r.constructor && (t = r.constructor.name), "Map" === t || "Set" === t ? Array.from(r) : "Arguments" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } }
|
|
24
|
+
function _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }
|
|
25
|
+
function nextFrame() {
|
|
26
|
+
return new Promise(function (resolve) {
|
|
27
|
+
return requestAnimationFrame(resolve);
|
|
28
|
+
});
|
|
29
|
+
}
|
|
30
|
+
function sleep(ms) {
|
|
31
|
+
return new Promise(function (resolve) {
|
|
32
|
+
return setTimeout(resolve, ms);
|
|
33
|
+
});
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
/**
|
|
37
|
+
* Track GLTF/GLB network activity via XHR + fetch.
|
|
38
|
+
* Returns { getInFlight, waitForIdle, uninstall }.
|
|
39
|
+
*/
|
|
40
|
+
function installGltfTracker() {
|
|
41
|
+
var _XHR$prototype, _XHR$prototype2;
|
|
42
|
+
if (typeof window === 'undefined') {
|
|
43
|
+
return {
|
|
44
|
+
getInFlight: function getInFlight() {
|
|
45
|
+
return 0;
|
|
46
|
+
},
|
|
47
|
+
waitForIdle: function () {
|
|
48
|
+
var _waitForIdle = (0, _asyncToGenerator2["default"])(/*#__PURE__*/_regenerator["default"].mark(function _callee() {
|
|
49
|
+
return _regenerator["default"].wrap(function (_context) {
|
|
50
|
+
while (1) switch (_context.prev = _context.next) {
|
|
51
|
+
case 0:
|
|
52
|
+
return _context.abrupt("return", true);
|
|
53
|
+
case 1:
|
|
54
|
+
case "end":
|
|
55
|
+
return _context.stop();
|
|
56
|
+
}
|
|
57
|
+
}, _callee);
|
|
58
|
+
}));
|
|
59
|
+
function waitForIdle() {
|
|
60
|
+
return _waitForIdle.apply(this, arguments);
|
|
61
|
+
}
|
|
62
|
+
return waitForIdle;
|
|
63
|
+
}(),
|
|
64
|
+
uninstall: function uninstall() {}
|
|
65
|
+
};
|
|
66
|
+
}
|
|
67
|
+
var inFlight = 0;
|
|
68
|
+
var listeners = new Set();
|
|
69
|
+
var notify = function notify() {
|
|
70
|
+
var _iterator = _createForOfIteratorHelper(listeners),
|
|
71
|
+
_step;
|
|
72
|
+
try {
|
|
73
|
+
for (_iterator.s(); !(_step = _iterator.n()).done;) {
|
|
74
|
+
var fn = _step.value;
|
|
75
|
+
fn(inFlight);
|
|
76
|
+
}
|
|
77
|
+
} catch (err) {
|
|
78
|
+
_iterator.e(err);
|
|
79
|
+
} finally {
|
|
80
|
+
_iterator.f();
|
|
81
|
+
}
|
|
82
|
+
};
|
|
83
|
+
var isGltfUrl = function isGltfUrl(url) {
|
|
84
|
+
try {
|
|
85
|
+
var _url$toString, _url$toString2;
|
|
86
|
+
var s = typeof url === 'string' ? url : (_url$toString = url === null || url === void 0 || (_url$toString2 = url.toString) === null || _url$toString2 === void 0 ? void 0 : _url$toString2.call(url)) !== null && _url$toString !== void 0 ? _url$toString : '';
|
|
87
|
+
var u = s.toLowerCase();
|
|
88
|
+
return u.includes('.gltf') || u.includes('.glb');
|
|
89
|
+
} catch (_unused) {
|
|
90
|
+
return false;
|
|
91
|
+
}
|
|
92
|
+
};
|
|
93
|
+
|
|
94
|
+
// ---- XHR hook ----
|
|
95
|
+
var XHR = window.XMLHttpRequest;
|
|
96
|
+
var originalOpen = null;
|
|
97
|
+
var originalSend = null;
|
|
98
|
+
if (XHR !== null && XHR !== void 0 && (_XHR$prototype = XHR.prototype) !== null && _XHR$prototype !== void 0 && _XHR$prototype.open && XHR !== null && XHR !== void 0 && (_XHR$prototype2 = XHR.prototype) !== null && _XHR$prototype2 !== void 0 && _XHR$prototype2.send) {
|
|
99
|
+
originalOpen = XHR.prototype.open;
|
|
100
|
+
originalSend = XHR.prototype.send;
|
|
101
|
+
XHR.prototype.open = function (method, url) {
|
|
102
|
+
var _originalOpen;
|
|
103
|
+
this.__isGltfRequest = isGltfUrl(url);
|
|
104
|
+
for (var _len = arguments.length, rest = new Array(_len > 2 ? _len - 2 : 0), _key = 2; _key < _len; _key++) {
|
|
105
|
+
rest[_key - 2] = arguments[_key];
|
|
106
|
+
}
|
|
107
|
+
return (_originalOpen = originalOpen).call.apply(_originalOpen, [this, method, url].concat(rest));
|
|
108
|
+
};
|
|
109
|
+
XHR.prototype.send = function () {
|
|
110
|
+
var _this = this;
|
|
111
|
+
if (this.__isGltfRequest) {
|
|
112
|
+
inFlight += 1;
|
|
113
|
+
notify();
|
|
114
|
+
var _done = function done() {
|
|
115
|
+
inFlight -= 1;
|
|
116
|
+
if (inFlight < 0) inFlight = 0;
|
|
117
|
+
notify();
|
|
118
|
+
_this.removeEventListener('loadend', _done);
|
|
119
|
+
};
|
|
120
|
+
this.addEventListener('loadend', _done);
|
|
121
|
+
}
|
|
122
|
+
for (var _len2 = arguments.length, args = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {
|
|
123
|
+
args[_key2] = arguments[_key2];
|
|
124
|
+
}
|
|
125
|
+
return originalSend.apply(this, args);
|
|
126
|
+
};
|
|
127
|
+
}
|
|
128
|
+
|
|
129
|
+
// ---- fetch hook ----
|
|
130
|
+
var originalFetch = window.fetch;
|
|
131
|
+
if (typeof originalFetch === 'function') {
|
|
132
|
+
window.fetch = /*#__PURE__*/(0, _asyncToGenerator2["default"])(/*#__PURE__*/_regenerator["default"].mark(function _callee2() {
|
|
133
|
+
var _len3,
|
|
134
|
+
args,
|
|
135
|
+
_key3,
|
|
136
|
+
url,
|
|
137
|
+
track,
|
|
138
|
+
_args2 = arguments;
|
|
139
|
+
return _regenerator["default"].wrap(function (_context2) {
|
|
140
|
+
while (1) switch (_context2.prev = _context2.next) {
|
|
141
|
+
case 0:
|
|
142
|
+
for (_len3 = _args2.length, args = new Array(_len3), _key3 = 0; _key3 < _len3; _key3++) {
|
|
143
|
+
args[_key3] = _args2[_key3];
|
|
144
|
+
}
|
|
145
|
+
url = args === null || args === void 0 ? void 0 : args[0];
|
|
146
|
+
track = isGltfUrl(url);
|
|
147
|
+
if (track) {
|
|
148
|
+
_context2.next = 1;
|
|
149
|
+
break;
|
|
150
|
+
}
|
|
151
|
+
return _context2.abrupt("return", originalFetch.apply(this, args));
|
|
152
|
+
case 1:
|
|
153
|
+
inFlight += 1;
|
|
154
|
+
notify();
|
|
155
|
+
_context2.prev = 2;
|
|
156
|
+
_context2.next = 3;
|
|
157
|
+
return originalFetch.apply(this, args);
|
|
158
|
+
case 3:
|
|
159
|
+
return _context2.abrupt("return", _context2.sent);
|
|
160
|
+
case 4:
|
|
161
|
+
_context2.prev = 4;
|
|
162
|
+
inFlight -= 1;
|
|
163
|
+
if (inFlight < 0) inFlight = 0;
|
|
164
|
+
notify();
|
|
165
|
+
return _context2.finish(4);
|
|
166
|
+
case 5:
|
|
167
|
+
case "end":
|
|
168
|
+
return _context2.stop();
|
|
169
|
+
}
|
|
170
|
+
}, _callee2, this, [[2,, 4, 5]]);
|
|
171
|
+
}));
|
|
172
|
+
}
|
|
173
|
+
var subscribe = function subscribe(fn) {
|
|
174
|
+
listeners.add(fn);
|
|
175
|
+
fn(inFlight);
|
|
176
|
+
return function () {
|
|
177
|
+
return listeners["delete"](fn);
|
|
178
|
+
};
|
|
179
|
+
};
|
|
180
|
+
|
|
181
|
+
/**
|
|
182
|
+
* Wait until GLTF network is idle (inFlight===0).
|
|
183
|
+
* Includes a grace window to catch loads that start slightly after the event.
|
|
184
|
+
*/
|
|
185
|
+
var waitForIdle = /*#__PURE__*/function () {
|
|
186
|
+
var _ref2 = (0, _asyncToGenerator2["default"])(/*#__PURE__*/_regenerator["default"].mark(function _callee3() {
|
|
187
|
+
var _ref3,
|
|
188
|
+
_ref3$timeoutMs,
|
|
189
|
+
timeoutMs,
|
|
190
|
+
_ref3$graceMs,
|
|
191
|
+
graceMs,
|
|
192
|
+
start,
|
|
193
|
+
_args3 = arguments;
|
|
194
|
+
return _regenerator["default"].wrap(function (_context3) {
|
|
195
|
+
while (1) switch (_context3.prev = _context3.next) {
|
|
196
|
+
case 0:
|
|
197
|
+
_ref3 = _args3.length > 0 && _args3[0] !== undefined ? _args3[0] : {}, _ref3$timeoutMs = _ref3.timeoutMs, timeoutMs = _ref3$timeoutMs === void 0 ? 30000 : _ref3$timeoutMs, _ref3$graceMs = _ref3.graceMs, graceMs = _ref3$graceMs === void 0 ? 50 : _ref3$graceMs;
|
|
198
|
+
start = Date.now(); // Grace: give async pipelines a chance to start requests
|
|
199
|
+
if (!(graceMs > 0)) {
|
|
200
|
+
_context3.next = 1;
|
|
201
|
+
break;
|
|
202
|
+
}
|
|
203
|
+
_context3.next = 1;
|
|
204
|
+
return sleep(graceMs);
|
|
205
|
+
case 1:
|
|
206
|
+
return _context3.abrupt("return", new Promise(function (resolve, reject) {
|
|
207
|
+
var unsub = subscribe(function (count) {
|
|
208
|
+
if (count === 0) {
|
|
209
|
+
unsub();
|
|
210
|
+
resolve(true);
|
|
211
|
+
return;
|
|
212
|
+
}
|
|
213
|
+
if (Date.now() - start > timeoutMs) {
|
|
214
|
+
unsub();
|
|
215
|
+
reject(new Error('GLTF did not become idle within timeout'));
|
|
216
|
+
}
|
|
217
|
+
});
|
|
218
|
+
}));
|
|
219
|
+
case 2:
|
|
220
|
+
case "end":
|
|
221
|
+
return _context3.stop();
|
|
222
|
+
}
|
|
223
|
+
}, _callee3);
|
|
224
|
+
}));
|
|
225
|
+
return function waitForIdle() {
|
|
226
|
+
return _ref2.apply(this, arguments);
|
|
227
|
+
};
|
|
228
|
+
}();
|
|
229
|
+
var uninstall = function uninstall() {
|
|
230
|
+
var _XHR$prototype3, _XHR$prototype4;
|
|
231
|
+
if (XHR !== null && XHR !== void 0 && (_XHR$prototype3 = XHR.prototype) !== null && _XHR$prototype3 !== void 0 && _XHR$prototype3.open && originalOpen) XHR.prototype.open = originalOpen;
|
|
232
|
+
if (XHR !== null && XHR !== void 0 && (_XHR$prototype4 = XHR.prototype) !== null && _XHR$prototype4 !== void 0 && _XHR$prototype4.send && originalSend) XHR.prototype.send = originalSend;
|
|
233
|
+
if (typeof originalFetch === 'function') window.fetch = originalFetch;
|
|
234
|
+
listeners.clear();
|
|
235
|
+
inFlight = 0;
|
|
236
|
+
};
|
|
237
|
+
return {
|
|
238
|
+
getInFlight: function getInFlight() {
|
|
239
|
+
return inFlight;
|
|
240
|
+
},
|
|
241
|
+
waitForIdle: waitForIdle,
|
|
242
|
+
uninstall: uninstall
|
|
243
|
+
};
|
|
244
|
+
}
|
|
20
245
|
function renderKitchenSimulator(container) {
|
|
246
|
+
var _props$framesPerEvent, _props$waitForGltfIdl, _props$gltfTimeoutMs, _props$gltfGraceMs;
|
|
21
247
|
var props = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
|
|
248
|
+
var root = (0, _client.createRoot)(container);
|
|
22
249
|
var setExternalEventFn = null;
|
|
250
|
+
var queue = [];
|
|
251
|
+
var pendingMarkers = new Set();
|
|
252
|
+
var draining = false;
|
|
253
|
+
var destroyed = false;
|
|
254
|
+
var FRAMES_PER_EVENT = (_props$framesPerEvent = props.framesPerEvent) !== null && _props$framesPerEvent !== void 0 ? _props$framesPerEvent : 2;
|
|
255
|
+
|
|
256
|
+
// ✅ assume all events may load gltfs
|
|
257
|
+
var WAIT_FOR_GLTF_IDLE_AFTER_EACH_EVENT = (_props$waitForGltfIdl = props.waitForGltfIdleAfterEachEvent) !== null && _props$waitForGltfIdl !== void 0 ? _props$waitForGltfIdl : true;
|
|
258
|
+
var GLTF_TIMEOUT_MS = (_props$gltfTimeoutMs = props.gltfTimeoutMs) !== null && _props$gltfTimeoutMs !== void 0 ? _props$gltfTimeoutMs : 30000;
|
|
259
|
+
var GLTF_GRACE_MS = (_props$gltfGraceMs = props.gltfGraceMs) !== null && _props$gltfGraceMs !== void 0 ? _props$gltfGraceMs : 50;
|
|
260
|
+
var gltfTracker = installGltfTracker();
|
|
261
|
+
function drain() {
|
|
262
|
+
return _drain.apply(this, arguments);
|
|
263
|
+
}
|
|
264
|
+
function _drain() {
|
|
265
|
+
_drain = (0, _asyncToGenerator2["default"])(/*#__PURE__*/_regenerator["default"].mark(function _callee5() {
|
|
266
|
+
var _setExternalEventFn, ev, i, _ev$gltfTimeoutMs, _ev$gltfGraceMs;
|
|
267
|
+
return _regenerator["default"].wrap(function (_context5) {
|
|
268
|
+
while (1) switch (_context5.prev = _context5.next) {
|
|
269
|
+
case 0:
|
|
270
|
+
if (!(draining || destroyed)) {
|
|
271
|
+
_context5.next = 1;
|
|
272
|
+
break;
|
|
273
|
+
}
|
|
274
|
+
return _context5.abrupt("return");
|
|
275
|
+
case 1:
|
|
276
|
+
draining = true;
|
|
277
|
+
_context5.prev = 2;
|
|
278
|
+
case 3:
|
|
279
|
+
if (!(queue.length && !destroyed)) {
|
|
280
|
+
_context5.next = 10;
|
|
281
|
+
break;
|
|
282
|
+
}
|
|
283
|
+
ev = queue.shift(); // skip internal markers
|
|
284
|
+
if (!(ev && ev.__batchMarker)) {
|
|
285
|
+
_context5.next = 4;
|
|
286
|
+
break;
|
|
287
|
+
}
|
|
288
|
+
pendingMarkers["delete"](ev.__batchMarker);
|
|
289
|
+
return _context5.abrupt("continue", 3);
|
|
290
|
+
case 4:
|
|
291
|
+
(_setExternalEventFn = setExternalEventFn) === null || _setExternalEventFn === void 0 || _setExternalEventFn(ev);
|
|
23
292
|
|
|
24
|
-
|
|
293
|
+
// baseline spacing for react + legacy lifecycle
|
|
294
|
+
i = 0;
|
|
295
|
+
case 5:
|
|
296
|
+
if (!(i < FRAMES_PER_EVENT)) {
|
|
297
|
+
_context5.next = 7;
|
|
298
|
+
break;
|
|
299
|
+
}
|
|
300
|
+
_context5.next = 6;
|
|
301
|
+
return nextFrame();
|
|
302
|
+
case 6:
|
|
303
|
+
i += 1;
|
|
304
|
+
_context5.next = 5;
|
|
305
|
+
break;
|
|
306
|
+
case 7:
|
|
307
|
+
if (!WAIT_FOR_GLTF_IDLE_AFTER_EACH_EVENT) {
|
|
308
|
+
_context5.next = 9;
|
|
309
|
+
break;
|
|
310
|
+
}
|
|
311
|
+
_context5.next = 8;
|
|
312
|
+
return gltfTracker.waitForIdle({
|
|
313
|
+
timeoutMs: (_ev$gltfTimeoutMs = ev === null || ev === void 0 ? void 0 : ev.gltfTimeoutMs) !== null && _ev$gltfTimeoutMs !== void 0 ? _ev$gltfTimeoutMs : GLTF_TIMEOUT_MS,
|
|
314
|
+
graceMs: (_ev$gltfGraceMs = ev === null || ev === void 0 ? void 0 : ev.gltfGraceMs) !== null && _ev$gltfGraceMs !== void 0 ? _ev$gltfGraceMs : GLTF_GRACE_MS
|
|
315
|
+
});
|
|
316
|
+
case 8:
|
|
317
|
+
_context5.next = 9;
|
|
318
|
+
return nextFrame();
|
|
319
|
+
case 9:
|
|
320
|
+
_context5.next = 3;
|
|
321
|
+
break;
|
|
322
|
+
case 10:
|
|
323
|
+
_context5.prev = 10;
|
|
324
|
+
draining = false;
|
|
325
|
+
return _context5.finish(10);
|
|
326
|
+
case 11:
|
|
327
|
+
case "end":
|
|
328
|
+
return _context5.stop();
|
|
329
|
+
}
|
|
330
|
+
}, _callee5, null, [[2,, 10, 11]]);
|
|
331
|
+
}));
|
|
332
|
+
return _drain.apply(this, arguments);
|
|
333
|
+
}
|
|
25
334
|
var Wrapper = /*#__PURE__*/function (_React$Component) {
|
|
26
335
|
function Wrapper(p) {
|
|
27
|
-
var
|
|
336
|
+
var _this2;
|
|
28
337
|
(0, _classCallCheck2["default"])(this, Wrapper);
|
|
29
|
-
|
|
30
|
-
|
|
338
|
+
_this2 = _callSuper(this, Wrapper, [p]);
|
|
339
|
+
_this2.state = {
|
|
31
340
|
externalEvent: p.externalEvent || null
|
|
32
341
|
};
|
|
33
|
-
setExternalEventFn =
|
|
34
|
-
return
|
|
342
|
+
setExternalEventFn = _this2.setExternalEvent.bind(_this2);
|
|
343
|
+
return _this2;
|
|
35
344
|
}
|
|
36
345
|
(0, _inherits2["default"])(Wrapper, _React$Component);
|
|
37
346
|
return (0, _createClass2["default"])(Wrapper, [{
|
|
@@ -49,15 +358,80 @@ function renderKitchenSimulator(container) {
|
|
|
49
358
|
}));
|
|
50
359
|
}
|
|
51
360
|
}]);
|
|
52
|
-
}(_react["default"].Component);
|
|
53
|
-
|
|
361
|
+
}(_react["default"].Component);
|
|
362
|
+
root.render(/*#__PURE__*/_react["default"].createElement(Wrapper, props));
|
|
54
363
|
return {
|
|
364
|
+
sendExternalEvents: function sendExternalEvents(eventOrEvents) {
|
|
365
|
+
var events = Array.isArray(eventOrEvents) ? eventOrEvents : [eventOrEvents];
|
|
366
|
+
var _iterator2 = _createForOfIteratorHelper(events),
|
|
367
|
+
_step2;
|
|
368
|
+
try {
|
|
369
|
+
for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {
|
|
370
|
+
var e = _step2.value;
|
|
371
|
+
queue.push(e);
|
|
372
|
+
}
|
|
373
|
+
|
|
374
|
+
// marker for this batch
|
|
375
|
+
} catch (err) {
|
|
376
|
+
_iterator2.e(err);
|
|
377
|
+
} finally {
|
|
378
|
+
_iterator2.f();
|
|
379
|
+
}
|
|
380
|
+
var token = Symbol('batch');
|
|
381
|
+
pendingMarkers.add(token);
|
|
382
|
+
queue.push({
|
|
383
|
+
__batchMarker: token
|
|
384
|
+
});
|
|
385
|
+
drain();
|
|
386
|
+
return new Promise(function (resolve) {
|
|
387
|
+
var check = /*#__PURE__*/function () {
|
|
388
|
+
var _ref4 = (0, _asyncToGenerator2["default"])(/*#__PURE__*/_regenerator["default"].mark(function _callee4() {
|
|
389
|
+
return _regenerator["default"].wrap(function (_context4) {
|
|
390
|
+
while (1) switch (_context4.prev = _context4.next) {
|
|
391
|
+
case 0:
|
|
392
|
+
if (destroyed) {
|
|
393
|
+
_context4.next = 3;
|
|
394
|
+
break;
|
|
395
|
+
}
|
|
396
|
+
if (!pendingMarkers.has(token)) {
|
|
397
|
+
_context4.next = 2;
|
|
398
|
+
break;
|
|
399
|
+
}
|
|
400
|
+
_context4.next = 1;
|
|
401
|
+
return nextFrame();
|
|
402
|
+
case 1:
|
|
403
|
+
return _context4.abrupt("continue", 0);
|
|
404
|
+
case 2:
|
|
405
|
+
resolve(true);
|
|
406
|
+
return _context4.abrupt("return");
|
|
407
|
+
case 3:
|
|
408
|
+
resolve(false);
|
|
409
|
+
case 4:
|
|
410
|
+
case "end":
|
|
411
|
+
return _context4.stop();
|
|
412
|
+
}
|
|
413
|
+
}, _callee4);
|
|
414
|
+
}));
|
|
415
|
+
return function check() {
|
|
416
|
+
return _ref4.apply(this, arguments);
|
|
417
|
+
};
|
|
418
|
+
}();
|
|
419
|
+
check();
|
|
420
|
+
});
|
|
421
|
+
},
|
|
55
422
|
updateExternalEvent: function updateExternalEvent(newExternalEvent) {
|
|
56
|
-
|
|
57
|
-
|
|
423
|
+
return this.sendExternalEvents(newExternalEvent);
|
|
424
|
+
},
|
|
425
|
+
clearQueue: function clearQueue() {
|
|
426
|
+
queue.length = 0;
|
|
427
|
+
pendingMarkers.clear();
|
|
58
428
|
},
|
|
59
429
|
unmount: function unmount() {
|
|
60
|
-
|
|
430
|
+
var _this$clearQueue;
|
|
431
|
+
destroyed = true;
|
|
432
|
+
(_this$clearQueue = this.clearQueue) === null || _this$clearQueue === void 0 || _this$clearQueue.call(this);
|
|
433
|
+
gltfTracker.uninstall();
|
|
434
|
+
root.unmount();
|
|
61
435
|
}
|
|
62
436
|
};
|
|
63
437
|
}
|
package/lib/models.js
CHANGED
|
@@ -348,7 +348,8 @@ var CatalogElement = exports.CatalogElement = /*#__PURE__*/function (_Record1) {
|
|
|
348
348
|
properties: new _immutable.Map(),
|
|
349
349
|
obj: new _immutable.Map(),
|
|
350
350
|
type: '',
|
|
351
|
-
cds: new _immutable.Map()
|
|
351
|
+
cds: new _immutable.Map(),
|
|
352
|
+
structure_json: {}
|
|
352
353
|
}, 'CatalogElement'));
|
|
353
354
|
var Catalog = exports.Catalog = /*#__PURE__*/function (_Record10) {
|
|
354
355
|
function Catalog() {
|
|
@@ -6,6 +6,7 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
6
6
|
});
|
|
7
7
|
exports.handleExternalEvent = handleExternalEvent;
|
|
8
8
|
var _regenerator = _interopRequireDefault(require("@babel/runtime/regenerator"));
|
|
9
|
+
var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime/helpers/toConsumableArray"));
|
|
9
10
|
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
|
|
10
11
|
var _typeof2 = _interopRequireDefault(require("@babel/runtime/helpers/typeof"));
|
|
11
12
|
var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator"));
|
|
@@ -488,59 +489,116 @@ function addItemToCatalog(_x5, _x6, _x7, _x8) {
|
|
|
488
489
|
} // Get attributs of current selected element
|
|
489
490
|
function _addItemToCatalog() {
|
|
490
491
|
_addItemToCatalog = (0, _asyncToGenerator2["default"])(/*#__PURE__*/_regenerator["default"].mark(function _callee5(element, state, catalogInstance, projectActions) {
|
|
491
|
-
var
|
|
492
|
-
var elementJs,
|
|
492
|
+
var _elementJs, _elementJs3;
|
|
493
|
+
var elementJs, outlineSVGData, _state$getIn, _elementJs$structure_, _elementJs$structure_2, _elementJs$structure_3, cds, _cds$find, _elementJs2, currentCdsId, cdsIdx, ttph, updatedStructureJson, catalogElements, catalogElementKeys, catalogItem, k, _catalogElements$cata, tempPlaceholderArray, _catalogItem$structur, newTempPlaceholderArray, mergedTempPlaceholder;
|
|
493
494
|
return _regenerator["default"].wrap(function (_context5) {
|
|
494
495
|
while (1) switch (_context5.prev = _context5.next) {
|
|
495
496
|
case 0:
|
|
496
|
-
if (!(0, _helper.isEmpty)(
|
|
497
|
+
if (!(0, _helper.isEmpty)(element === null || element === void 0 ? void 0 : element.name)) {
|
|
497
498
|
_context5.next = 1;
|
|
498
499
|
break;
|
|
499
500
|
}
|
|
500
501
|
return _context5.abrupt("return");
|
|
501
502
|
case 1:
|
|
502
|
-
|
|
503
|
-
|
|
504
|
-
// if (isEmpty(catalog?.elements[element.name])) {
|
|
503
|
+
// clone element
|
|
504
|
+
elementJs = Object.assign({}, element); // if (isEmpty(catalog?.elements[element.name])) {
|
|
505
505
|
_context5.next = 2;
|
|
506
|
-
return loadSVGsByItem(
|
|
506
|
+
return loadSVGsByItem(elementJs);
|
|
507
507
|
case 2:
|
|
508
508
|
outlineSVGData = _context5.sent;
|
|
509
|
-
if (!(((
|
|
509
|
+
if (!(((_elementJs = elementJs) === null || _elementJs === void 0 ? void 0 : _elementJs.type) === 'cabinet')) {
|
|
510
510
|
_context5.next = 4;
|
|
511
511
|
break;
|
|
512
512
|
}
|
|
513
|
+
// move the tempPlaceholder of current door style to first of tempPlaceholders array
|
|
514
|
+
cds = (_state$getIn = state.getIn(['scene', 'layers', 'layer-1', 'doorStyle'])) === null || _state$getIn === void 0 ? void 0 : _state$getIn.cds;
|
|
515
|
+
if (cds) {
|
|
516
|
+
currentCdsId = (_cds$find = cds.find(function (c) {
|
|
517
|
+
return c.itemID === elementJs.itemID;
|
|
518
|
+
})) === null || _cds$find === void 0 ? void 0 : _cds$find.cabinet_door_style_id;
|
|
519
|
+
cdsIdx = (_elementJs2 = elementJs) === null || _elementJs2 === void 0 || (_elementJs2 = _elementJs2.structure_json) === null || _elementJs2 === void 0 || (_elementJs2 = _elementJs2.tempPlaceholders) === null || _elementJs2 === void 0 ? void 0 : _elementJs2.findIndex(function (tph) {
|
|
520
|
+
return tph.id === currentCdsId;
|
|
521
|
+
}); // swap
|
|
522
|
+
if (currentCdsId && cdsIdx >= 0) {
|
|
523
|
+
ttph = elementJs.structure_json.tempPlaceholders[0];
|
|
524
|
+
elementJs.structure_json.tempPlaceholders[0] = elementJs.structure_json.tempPlaceholders[cdsIdx];
|
|
525
|
+
elementJs.structure_json.tempPlaceholders[cdsIdx] = ttph;
|
|
526
|
+
}
|
|
527
|
+
}
|
|
513
528
|
// make placeholders of element and tempPlaceholder
|
|
514
|
-
updatedStructureJson = _objectSpread(_objectSpread({},
|
|
515
|
-
|
|
516
|
-
|
|
529
|
+
updatedStructureJson = _objectSpread(_objectSpread({}, elementJs.structure_json), (_elementJs$structure_ = (_elementJs$structure_2 = elementJs.structure_json) === null || _elementJs$structure_2 === void 0 || (_elementJs$structure_2 = _elementJs$structure_2.tempPlaceholders[0]) === null || _elementJs$structure_2 === void 0 ? void 0 : _elementJs$structure_2.structure) !== null && _elementJs$structure_ !== void 0 ? _elementJs$structure_ : {});
|
|
530
|
+
elementJs.structure_json = updatedStructureJson;
|
|
531
|
+
elementJs = _objectSpread(_objectSpread({}, elementJs), {}, {
|
|
517
532
|
cds: {
|
|
518
|
-
data: [_objectSpread({},
|
|
519
|
-
itemID:
|
|
533
|
+
data: [_objectSpread({}, elementJs.customer_property)],
|
|
534
|
+
itemID: elementJs.itemID
|
|
520
535
|
}
|
|
521
536
|
});
|
|
522
|
-
if ((0, _helper.isEmpty)((
|
|
537
|
+
if ((0, _helper.isEmpty)((_elementJs$structure_3 = elementJs.structure_json) === null || _elementJs$structure_3 === void 0 ? void 0 : _elementJs$structure_3.tempPlaceholders)) {
|
|
523
538
|
_context5.next = 4;
|
|
524
539
|
break;
|
|
525
540
|
}
|
|
526
541
|
_context5.next = 3;
|
|
527
|
-
return updateCabinetPayload(
|
|
542
|
+
return updateCabinetPayload(elementJs);
|
|
528
543
|
case 3:
|
|
529
544
|
elementJs = _context5.sent;
|
|
530
545
|
case 4:
|
|
531
546
|
elementJs = _objectSpread(_objectSpread({}, elementJs), {}, {
|
|
532
547
|
outlineSVGData: outlineSVGData,
|
|
533
|
-
type:
|
|
548
|
+
type: elementJs.type,
|
|
534
549
|
render2DItem: _itemLoader.render2DItem
|
|
535
550
|
});
|
|
536
|
-
if (
|
|
551
|
+
if (elementJs.type === 'appliance' || elementJs.type === 'furnishing') elementJs.render3DItem = _itemLoader.render3DApplianceItem;else if (elementJs.type === 'lighting') elementJs.render3DItem = _itemLoader.render3DLightingItem;else elementJs.render3DItem = _itemLoader.render3DItem;
|
|
552
|
+
|
|
553
|
+
/***** join new tempPlaceholder to the old element - start *****/
|
|
554
|
+
// get catalog item by itemID
|
|
555
|
+
catalogElements = state.getIn(['catalog', 'elements']).toJS();
|
|
556
|
+
catalogElementKeys = Object.keys(catalogElements);
|
|
557
|
+
catalogItem = null;
|
|
558
|
+
k = 0;
|
|
559
|
+
case 5:
|
|
560
|
+
if (!(k < catalogElementKeys.length)) {
|
|
561
|
+
_context5.next = 7;
|
|
562
|
+
break;
|
|
563
|
+
}
|
|
564
|
+
if (!(((_catalogElements$cata = catalogElements[catalogElementKeys[k]]) === null || _catalogElements$cata === void 0 ? void 0 : _catalogElements$cata.itemID) === elementJs.itemID)) {
|
|
565
|
+
_context5.next = 6;
|
|
566
|
+
break;
|
|
567
|
+
}
|
|
568
|
+
catalogItem = catalogElements[catalogElementKeys[k]];
|
|
569
|
+
return _context5.abrupt("continue", 7);
|
|
570
|
+
case 6:
|
|
571
|
+
k++;
|
|
572
|
+
_context5.next = 5;
|
|
573
|
+
break;
|
|
574
|
+
case 7:
|
|
575
|
+
// get old tempPlaceholder array from catalog item
|
|
576
|
+
tempPlaceholderArray = null;
|
|
577
|
+
if (!(0, _helper.isEmpty)(catalogItem)) {
|
|
578
|
+
tempPlaceholderArray = (_catalogItem$structur = catalogItem.structure_json) === null || _catalogItem$structur === void 0 ? void 0 : _catalogItem$structur.tempPlaceholders;
|
|
579
|
+
}
|
|
580
|
+
|
|
581
|
+
// join new tempPlaceholder array to old one
|
|
582
|
+
newTempPlaceholderArray = [];
|
|
583
|
+
(_elementJs3 = elementJs) === null || _elementJs3 === void 0 || (_elementJs3 = _elementJs3.structure_json) === null || _elementJs3 === void 0 || (_elementJs3 = _elementJs3.tempPlaceholders) === null || _elementJs3 === void 0 || _elementJs3.forEach(function (tph) {
|
|
584
|
+
var _tempPlaceholderArray;
|
|
585
|
+
if (!((_tempPlaceholderArray = tempPlaceholderArray) !== null && _tempPlaceholderArray !== void 0 && _tempPlaceholderArray.some(function (otph) {
|
|
586
|
+
return otph.id === tph.id;
|
|
587
|
+
}))) newTempPlaceholderArray.push(tph);
|
|
588
|
+
});
|
|
589
|
+
mergedTempPlaceholder = null;
|
|
590
|
+
if ((0, _helper.isEmpty)(tempPlaceholderArray)) mergedTempPlaceholder = newTempPlaceholderArray;else if ((0, _helper.isEmpty)(newTempPlaceholderArray)) mergedTempPlaceholder = tempPlaceholderArray;else mergedTempPlaceholder = [].concat((0, _toConsumableArray2["default"])(tempPlaceholderArray), newTempPlaceholderArray);
|
|
591
|
+
|
|
592
|
+
// rplace new array to the elementJS
|
|
593
|
+
if (!(0, _helper.isEmpty)(mergedTempPlaceholder)) elementJs.structure_json.tempPlaceholders = mergedTempPlaceholder;
|
|
594
|
+
/***** join new tempPlaceholder to the old element - end *****/
|
|
595
|
+
|
|
537
596
|
elementJs = (0, _exporter["default"])(elementJs);
|
|
538
597
|
if (catalogInstance !== null && catalogInstance !== void 0 && catalogInstance.validateElement(elementJs)) {
|
|
539
598
|
catalogInstance.registerElement(elementJs);
|
|
540
599
|
projectActions.addElementToCatalog(elementJs);
|
|
541
600
|
}
|
|
542
|
-
|
|
543
|
-
case 5:
|
|
601
|
+
case 8:
|
|
544
602
|
case "end":
|
|
545
603
|
return _context5.stop();
|
|
546
604
|
}
|
|
@@ -729,11 +787,11 @@ function updateAttributeOfSelectedElement(element, attrPayload, state, layer, ca
|
|
|
729
787
|
attributesFormData = attributesFormData.set('y', yVal);
|
|
730
788
|
} else {
|
|
731
789
|
attributesFormData = attributesFormData.set(attributeName, value);
|
|
732
|
-
// update the distances from wall
|
|
733
|
-
var _GeometryUtils$calcDi = _export.GeometryUtils.calcDistancesFromItemToWalls(attributesFormData, layer),
|
|
734
|
-
PointArray = _GeometryUtils$calcDi.PointArray;
|
|
735
|
-
attributesFormData = attributesFormData.set('distArray', PointArray);
|
|
736
790
|
}
|
|
791
|
+
// update the distances from wall
|
|
792
|
+
var _GeometryUtils$calcDi = _export.GeometryUtils.calcDistancesFromItemToWalls(attributesFormData, layer),
|
|
793
|
+
PointArray = _GeometryUtils$calcDi.PointArray;
|
|
794
|
+
attributesFormData = attributesFormData.set('distArray', PointArray);
|
|
737
795
|
break;
|
|
738
796
|
}
|
|
739
797
|
case 'lines':
|
|
@@ -1100,7 +1158,7 @@ function handleExternalEvent(_x10) {
|
|
|
1100
1158
|
function _handleExternalEvent() {
|
|
1101
1159
|
_handleExternalEvent = (0, _asyncToGenerator2["default"])(/*#__PURE__*/_regenerator["default"].mark(function _callee9(props) {
|
|
1102
1160
|
var _evt$payload3, _evt$payload4;
|
|
1103
|
-
var evt, state, layerId, layer, _evt$payload, cdsItems, itemKeys, _loop3, i, _props$onInternalEven, sLineCnt,
|
|
1161
|
+
var evt, state, layerId, layer, _evt$payload, cdsItems, itemKeys, _loop3, i, _props$onInternalEven, sLineCnt, element, _state$viewer2D, _evt$payload$initialP, mouseX, mouseY, v2d, vPosX, vPosY, layerID, defaulTitle, _Object$keys, _evt$payload5, doorStyle, itemCDS, isAll, _layerId, _cdsItems, allItems, selectedItemId, _itemKeys, _loop4, _i2, _props$onInternalEven2, _evt$payload6, roomShapeType, width, height, _doorStyle, value, _value, _evt$payload7, moldingInfo, isGlobal, distElement, _distElement, _evt$payload8, option, _value2, _layerId2, _layer, _layer$getIn, selectedLines, selectedHoles, selectedItems, _i4, _i5, _i6, _evt$payload9, _evt$payload0, _evt$payload1, _evt$payload10, _layerID, _layer2, orginalItemInfo, originalItem, originalItemPos, replaceItem, _props$onInternalEven3, sceneData, currentTexture, _t5, _t6;
|
|
1104
1162
|
return _regenerator["default"].wrap(function (_context1) {
|
|
1105
1163
|
while (1) switch (_context1.prev = _context1.next) {
|
|
1106
1164
|
case 0:
|
|
@@ -1217,19 +1275,7 @@ function _handleExternalEvent() {
|
|
|
1217
1275
|
_context1.next = 11;
|
|
1218
1276
|
break;
|
|
1219
1277
|
}
|
|
1220
|
-
element = evt.payload;
|
|
1221
|
-
cds = (_state$getIn = state.getIn(['scene', 'layers', 'layer-1', 'doorStyle'])) === null || _state$getIn === void 0 ? void 0 : _state$getIn.cds;
|
|
1222
|
-
if (cds) {
|
|
1223
|
-
currentCdsId = (_cds$find = cds.find(function (c) {
|
|
1224
|
-
return c.itemID === element.itemID;
|
|
1225
|
-
})) === null || _cds$find === void 0 ? void 0 : _cds$find.cabinet_door_style_id;
|
|
1226
|
-
if (currentCdsId && element.structure_json.tempPlaceholders.length > 0) {
|
|
1227
|
-
element.structure_json.tempPlaceholders[0] = element.structure_json.tempPlaceholders.find(function (tPlaceholder) {
|
|
1228
|
-
return tPlaceholder.id === currentCdsId;
|
|
1229
|
-
});
|
|
1230
|
-
}
|
|
1231
|
-
}
|
|
1232
|
-
/////
|
|
1278
|
+
element = evt.payload;
|
|
1233
1279
|
_context1.next = 10;
|
|
1234
1280
|
return addItemToCatalog(element, state, props.catalog, props.projectActions);
|
|
1235
1281
|
case 10:
|