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/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
- // Internal wrapper that exposes a state setter
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 _this;
336
+ var _this2;
28
337
  (0, _classCallCheck2["default"])(this, Wrapper);
29
- _this = _callSuper(this, Wrapper, [p]);
30
- _this.state = {
338
+ _this2 = _callSuper(this, Wrapper, [p]);
339
+ _this2.state = {
31
340
  externalEvent: p.externalEvent || null
32
341
  };
33
- setExternalEventFn = _this.setExternalEvent.bind(_this);
34
- return _this;
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); // Mount once
53
- _reactDom["default"].render(/*#__PURE__*/_react["default"].createElement(Wrapper, props), container);
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
- var _setExternalEventFn;
57
- (_setExternalEventFn = setExternalEventFn) === null || _setExternalEventFn === void 0 || _setExternalEventFn(newExternalEvent);
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
- _reactDom["default"].unmountComponentAtNode(container);
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 _element, _element2;
492
- var elementJs, catalog, outlineSVGData, _element$structure_js, _element$structure_js2, _element$structure_js3, updatedStructureJson;
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)((_element = element) === null || _element === void 0 ? void 0 : _element.name)) {
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
- elementJs = element;
503
- catalog = state.getIn(['catalog']).toJS(); // add item to catalog of state
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(element);
506
+ return loadSVGsByItem(elementJs);
507
507
  case 2:
508
508
  outlineSVGData = _context5.sent;
509
- if (!(((_element2 = element) === null || _element2 === void 0 ? void 0 : _element2.type) === 'cabinet')) {
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({}, element.structure_json), (_element$structure_js = (_element$structure_js2 = element.structure_json) === null || _element$structure_js2 === void 0 || (_element$structure_js2 = _element$structure_js2.tempPlaceholders[0]) === null || _element$structure_js2 === void 0 ? void 0 : _element$structure_js2.structure) !== null && _element$structure_js !== void 0 ? _element$structure_js : {});
515
- element.structure_json = updatedStructureJson;
516
- element = _objectSpread(_objectSpread({}, element), {}, {
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({}, element.customer_property)],
519
- itemID: element.itemID
533
+ data: [_objectSpread({}, elementJs.customer_property)],
534
+ itemID: elementJs.itemID
520
535
  }
521
536
  });
522
- if ((0, _helper.isEmpty)((_element$structure_js3 = element.structure_json) === null || _element$structure_js3 === void 0 ? void 0 : _element$structure_js3.tempPlaceholders)) {
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(element);
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: element.type,
548
+ type: elementJs.type,
534
549
  render2DItem: _itemLoader.render2DItem
535
550
  });
536
- if (element.type === 'appliance' || element.type === 'furnishing') elementJs.render3DItem = _itemLoader.render3DApplianceItem;else if (element.type === 'lighting') elementJs.render3DItem = _itemLoader.render3DLightingItem;else elementJs.render3DItem = _itemLoader.render3DItem;
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, _state$getIn, element, cds, _cds$find, currentCdsId, _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;
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; ///// filter the tempPlaceholders using layer-doorstyle-cds
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:
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "kitchen-simulator",
3
- "version": "3.1.15",
3
+ "version": "3.3.0",
4
4
  "description": "It is a kitchen simulator (self-contained micro-frontend).",
5
5
  "license": "MIT",
6
6
  "main": "lib/index.js",