kitchen-simulator 11.27.0 → 11.28.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (93) hide show
  1. package/es/actions/items-actions.js +20 -2
  2. package/es/assets/img/svg/3d_item_move.svg +9 -105
  3. package/es/assets/img/svg/3d_item_rotation.svg +3 -75
  4. package/es/assets/img/svg/accessories.svg +4 -4
  5. package/es/assets/img/svg/bottombar/elevation-back.svg +6 -6
  6. package/es/assets/img/svg/bottombar/elevation-front.svg +6 -6
  7. package/es/assets/img/svg/bottombar/elevation-left.svg +6 -6
  8. package/es/assets/img/svg/bottombar/elevation-right.svg +7 -7
  9. package/es/assets/img/svg/bottombar/elevation.svg +13 -13
  10. package/es/assets/img/svg/delete.svg +6 -2
  11. package/es/assets/img/svg/detail.svg +77 -77
  12. package/es/assets/img/svg/duplicate.svg +6 -6
  13. package/es/assets/img/svg/filtersActive.svg +19 -19
  14. package/es/assets/img/svg/invert.svg +12 -127
  15. package/es/assets/img/svg/menubar/login.svg +84 -84
  16. package/es/assets/img/svg/menubar/my_projects.svg +85 -85
  17. package/es/assets/img/svg/menubar/new_project.svg +110 -110
  18. package/es/assets/img/svg/menubar/save_project.svg +84 -84
  19. package/es/assets/img/svg/options.svg +3 -3
  20. package/es/assets/img/svg/positioning.svg +3 -3
  21. package/es/assets/img/svg/toggleFilters.svg +19 -19
  22. package/es/assets/img/svg/toolbar/shopping-cart.svg +13 -13
  23. package/es/assets/img/svg/wizardstep/detail_view.svg +87 -87
  24. package/es/assets/img/svg/wizardstep/tile_view.svg +95 -95
  25. package/es/catalog/utils/exporter.js +4 -0
  26. package/es/catalog/utils/item-loader.js +18 -8
  27. package/es/class/item.js +80 -2
  28. package/es/components/viewer2d/item.js +139 -125
  29. package/es/components/viewer2d/viewer2d.js +7 -4
  30. package/es/components/viewer3d/camera-controls-module/camera-controls.module.js +556 -556
  31. package/es/components/viewer3d/scene-creator.js +18 -0
  32. package/es/components/viewer3d/viewer3d.js +137 -49
  33. package/es/constants.js +7 -1
  34. package/es/events/external/handleExternalEvent.js +36 -33
  35. package/es/events/external/handleExternalEvent.util.js +4 -2
  36. package/es/events/external/handlers.changeDoorStyle.js +28 -7
  37. package/es/events/external/handlers.elementOps.js +8 -0
  38. package/es/mappings/external-events/mapExternalEventPayload.js +4 -4
  39. package/es/mappings/external-events/mappers/addItemMapper.js +9 -9
  40. package/es/mappings/external-events/mappers/ccdfMapper.js +1 -1
  41. package/es/models.js +4 -0
  42. package/es/reducers/items-reducer.js +10 -1
  43. package/es/shared/domain/asset/sanitize-asset-url.js +5 -5
  44. package/es/shared/domain/cabinet-mirror.js +7 -0
  45. package/es/utils/geometry.js +5 -3
  46. package/es/utils/skinPanelEngine.js +14 -14
  47. package/lib/actions/items-actions.js +20 -0
  48. package/lib/assets/img/svg/3d_item_move.svg +9 -105
  49. package/lib/assets/img/svg/3d_item_rotation.svg +3 -75
  50. package/lib/assets/img/svg/accessories.svg +4 -4
  51. package/lib/assets/img/svg/bottombar/elevation-back.svg +6 -6
  52. package/lib/assets/img/svg/bottombar/elevation-front.svg +6 -6
  53. package/lib/assets/img/svg/bottombar/elevation-left.svg +6 -6
  54. package/lib/assets/img/svg/bottombar/elevation-right.svg +7 -7
  55. package/lib/assets/img/svg/bottombar/elevation.svg +13 -13
  56. package/lib/assets/img/svg/delete.svg +6 -2
  57. package/lib/assets/img/svg/detail.svg +77 -77
  58. package/lib/assets/img/svg/duplicate.svg +6 -6
  59. package/lib/assets/img/svg/filtersActive.svg +19 -19
  60. package/lib/assets/img/svg/invert.svg +12 -127
  61. package/lib/assets/img/svg/menubar/login.svg +84 -84
  62. package/lib/assets/img/svg/menubar/my_projects.svg +85 -85
  63. package/lib/assets/img/svg/menubar/new_project.svg +110 -110
  64. package/lib/assets/img/svg/menubar/save_project.svg +84 -84
  65. package/lib/assets/img/svg/options.svg +3 -3
  66. package/lib/assets/img/svg/positioning.svg +3 -3
  67. package/lib/assets/img/svg/toggleFilters.svg +19 -19
  68. package/lib/assets/img/svg/toolbar/shopping-cart.svg +13 -13
  69. package/lib/assets/img/svg/wizardstep/detail_view.svg +87 -87
  70. package/lib/assets/img/svg/wizardstep/tile_view.svg +95 -95
  71. package/lib/catalog/utils/exporter.js +4 -0
  72. package/lib/catalog/utils/item-loader.js +18 -8
  73. package/lib/class/item.js +79 -1
  74. package/lib/components/viewer2d/item.js +138 -124
  75. package/lib/components/viewer2d/viewer2d.js +7 -4
  76. package/lib/components/viewer3d/camera-controls-module/camera-controls.module.js +556 -556
  77. package/lib/components/viewer3d/scene-creator.js +18 -0
  78. package/lib/components/viewer3d/viewer3d.js +137 -49
  79. package/lib/constants.js +11 -5
  80. package/lib/events/external/handleExternalEvent.js +34 -31
  81. package/lib/events/external/handleExternalEvent.util.js +4 -2
  82. package/lib/events/external/handlers.changeDoorStyle.js +28 -7
  83. package/lib/events/external/handlers.elementOps.js +9 -0
  84. package/lib/mappings/external-events/mapExternalEventPayload.js +4 -4
  85. package/lib/mappings/external-events/mappers/addItemMapper.js +9 -9
  86. package/lib/mappings/external-events/mappers/ccdfMapper.js +1 -1
  87. package/lib/models.js +4 -0
  88. package/lib/reducers/items-reducer.js +9 -0
  89. package/lib/shared/domain/asset/sanitize-asset-url.js +5 -5
  90. package/lib/shared/domain/cabinet-mirror.js +13 -0
  91. package/lib/utils/geometry.js +5 -3
  92. package/lib/utils/skinPanelEngine.js +14 -14
  93. package/package.json +1 -1
@@ -493,6 +493,8 @@ function replaceObject(modifiedPath, layer, planData, actions, sceneData, oldSce
493
493
  getDistances(layer, item);
494
494
  }, 50);
495
495
  removeSelItemMesh(tmpMoldings, item, planData, mode);
496
+ } else if (modifiedPath[keyIndex] == 'mirrored') {
497
+ applyMirrorToItem3D(item3D, item.mirrored);
496
498
  } else if (modifiedPath[keyIndex] == 'selected') {
497
499
  var itemType = !!catalog.elements[item.type] ? catalog.elements[item.type].type : catalog.elements[returnReplaceableDeepSearchType(item.type)].type;
498
500
  if (value == false) {
@@ -2213,6 +2215,22 @@ function updateItem(sceneData, oldSceneData, planData, layer, itemID, difference
2213
2215
  if (!mesh) return null;
2214
2216
  return catalog.getElement(item.type).updateRender3D(item, layer, sceneData, mesh, oldItem, differences, selfDestroy, selfBuild);
2215
2217
  }
2218
+ function applyMirrorToItem3D(item3D, mirrored) {
2219
+ var _item3D$children, _object$children;
2220
+ var object = item3D === null || item3D === void 0 || (_item3D$children = item3D.children) === null || _item3D$children === void 0 ? void 0 : _item3D$children[0];
2221
+ if (!object || !object.scale) return;
2222
+ var shouldMirror = mirrored === true;
2223
+ var isCurrentlyMirrored = object.scale.x < 0;
2224
+ if (shouldMirror !== isCurrentlyMirrored) object.scale.x *= -1;
2225
+ var transformGizmo = (_object$children = object.children) === null || _object$children === void 0 ? void 0 : _object$children.find(function (child) {
2226
+ return child.name === 'TransformGizmo';
2227
+ });
2228
+ if (transformGizmo !== null && transformGizmo !== void 0 && transformGizmo.scale) {
2229
+ var sign = object.scale.x < 0 ? -1 : 1;
2230
+ transformGizmo.scale.x = sign * Math.abs(transformGizmo.scale.x);
2231
+ }
2232
+ object.userData.mirrored = shouldMirror;
2233
+ }
2216
2234
 
2217
2235
  // Apply interact function to children of an Object3D
2218
2236
  function applyInteract(object, interactFunction) {
@@ -29,6 +29,8 @@ import { RGBELoader } from 'three/examples/jsm/loaders/RGBELoader';
29
29
  import CameraControls from 'camera-controls';
30
30
  import { getAllMeshes, vectorIntersectWithMesh } from "../../utils/objects-utils";
31
31
  import { returnReplaceableDeepSearchType } from "../viewer2d/utils";
32
+ import { canMirrorCabinet } from "../../shared/domain/cabinet-mirror";
33
+ var ICON_SPACING = 0;
32
34
  CameraControls.install({
33
35
  THREE: Three
34
36
  });
@@ -343,6 +345,7 @@ var Scene3DViewer = /*#__PURE__*/function (_React$Component) {
343
345
  var bRotate = false;
344
346
  var bMove = false;
345
347
  var bMoveUP = false;
348
+ var bMirror = false;
346
349
  /** Transformation matrix of grid */
347
350
  var gridMatrix = new Three.Matrix4();
348
351
  var rayDirection = new Three.Vector3();
@@ -1044,35 +1047,73 @@ var Scene3DViewer = /*#__PURE__*/function (_React$Component) {
1044
1047
  var firstMove = false;
1045
1048
  var prevX, prevY;
1046
1049
  var selObj = null;
1050
+ var TOOL_CANVAS_WIDTH = 100;
1051
+ var TOOL_CANVAS_TWO_BUTTON_HEIGHT = 200;
1052
+ var TOOL_CANVAS_THREE_BUTTON_HEIGHT = 300;
1053
+ var TOOL_BUTTON_RADIUS = 40;
1054
+ var TOOL_BUTTONS_SPACING = 20;
1055
+ var TOOL_HIT_RADIUS = 20;
1056
+ var getItemMirrored = function getItemMirrored(item) {
1057
+ return (item === null || item === void 0 ? void 0 : item.mirrored) === true;
1058
+ };
1059
+ var canMirrorItem = function canMirrorItem(item) {
1060
+ return canMirrorCabinet(item);
1061
+ };
1062
+ var toolTexture = null;
1047
1063
  var createToolObject = function createToolObject() {
1064
+ var mirrorActive = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;
1065
+ var canMirror = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;
1066
+ var buttons = [{
1067
+ src: '/assets/img/svg/3d_item_rotation.svg',
1068
+ y: 50
1069
+ }, {
1070
+ src: '/assets/img/svg/3d_item_move.svg',
1071
+ y: 150
1072
+ }, canMirror && {
1073
+ src: '/assets/img/svg/invert.svg',
1074
+ y: 250,
1075
+ flip: !mirrorActive
1076
+ }].filter(Boolean);
1048
1077
  var canvas = document.createElement('canvas');
1049
- canvas.width = 100;
1050
- canvas.height = 200;
1051
- canvas.style.width = 50 + 'px';
1052
- canvas.style.height = 100 + 'px';
1078
+ canvas.width = TOOL_CANVAS_WIDTH;
1079
+ canvas.height = canMirror ? TOOL_CANVAS_THREE_BUTTON_HEIGHT : TOOL_CANVAS_TWO_BUTTON_HEIGHT;
1080
+ canvas.style.width = '50px';
1081
+ canvas.style.height = canMirror ? '150px' : '100px';
1053
1082
  var ctx = canvas.getContext('2d');
1054
- ctx.fillStyle = '#FFFFFF';
1055
- ctx.strokeStyle = '#000000';
1056
- ctx.beginPath();
1057
- ctx.arc(50, 50, 40, 0, 4 * Math.PI);
1058
- ctx.fill();
1059
- ctx.stroke();
1060
- var img1 = new Image();
1061
- img1.crossOrigin = 'anonymous';
1062
- img1.src = '/assets/img/svg/3d_item_rotation.svg';
1063
- img1.onload = function () {
1064
- ctx.drawImage(img1, 16, 16, 68, 68);
1083
+ var drawShadowCircle = function drawShadowCircle(x, y, radius) {
1084
+ ctx.save();
1085
+ ctx.shadowColor = 'rgba(0, 0, 0, 0.16)';
1086
+ ctx.shadowBlur = 2.4;
1087
+ ctx.shadowOffsetX = 0;
1088
+ ctx.shadowOffsetY = -1;
1089
+ ctx.fillStyle = '#FFFFFF';
1090
+ ctx.beginPath();
1091
+ ctx.arc(x, y, radius, 0, 2 * Math.PI);
1092
+ ctx.fill();
1093
+ ctx.restore();
1065
1094
  };
1066
- ctx.beginPath();
1067
- ctx.arc(50, 150, 40, 0, 4 * Math.PI);
1068
- ctx.fill();
1069
- ctx.stroke();
1070
- var img2 = new Image();
1071
- img2.crossOrigin = 'anonymous';
1072
- img2.src = '/assets/img/svg/3d_item_move.svg';
1073
- img2.onload = function () {
1074
- ctx.drawImage(img2, 16, 116, 68, 68);
1095
+ var drawIcon = function drawIcon(_ref) {
1096
+ var src = _ref.src,
1097
+ y = _ref.y,
1098
+ flip = _ref.flip;
1099
+ drawShadowCircle(50, y, TOOL_BUTTON_RADIUS);
1100
+ var img = new Image();
1101
+ img.crossOrigin = 'anonymous';
1102
+ img.src = src;
1103
+ img.onload = function () {
1104
+ ctx.save();
1105
+ if (flip) {
1106
+ ctx.translate(100, 0);
1107
+ ctx.scale(-1, 1);
1108
+ }
1109
+ ctx.imageSmoothingEnabled = true;
1110
+ ctx.imageSmoothingQuality = 'high';
1111
+ ctx.drawImage(img, 25, y - 25, 50, 50);
1112
+ ctx.restore();
1113
+ if (toolTexture) toolTexture.needsUpdate = true;
1114
+ };
1075
1115
  };
1116
+ buttons.forEach(drawIcon);
1076
1117
  return canvas;
1077
1118
  };
1078
1119
  var clockWise = true;
@@ -1111,7 +1152,7 @@ var Scene3DViewer = /*#__PURE__*/function (_React$Component) {
1111
1152
  lastAngle = rotate;
1112
1153
  return canvas;
1113
1154
  };
1114
- var toolTexture = new Three.Texture(createToolObject());
1155
+ toolTexture = new Three.Texture(createToolObject(false, false));
1115
1156
  toolTexture.needsUpdate = true;
1116
1157
  var toolObj = new Three.Sprite(new Three.SpriteMaterial({
1117
1158
  map: toolTexture,
@@ -1122,6 +1163,15 @@ var Scene3DViewer = /*#__PURE__*/function (_React$Component) {
1122
1163
  toolObj.scale.set(20, 40, 20);
1123
1164
  toolObj.renderOrder = 3;
1124
1165
  toolObj.name = 'toolObj';
1166
+ toolObj.userData.canMirror = false;
1167
+ var refreshToolObject = function refreshToolObject(item) {
1168
+ var showMirror = canMirrorItem(item);
1169
+ toolTexture.image = createToolObject(getItemMirrored(item), showMirror);
1170
+ toolTexture.needsUpdate = true;
1171
+ toolObj.scale.set(20, showMirror ? 60 : 40, 20);
1172
+ toolObj.userData.canMirror = showMirror;
1173
+ };
1174
+ this.refreshToolObject = refreshToolObject;
1125
1175
  var angleTexture = new Three.Texture(createAngleObject(0));
1126
1176
  angleTexture.needsUpdate = true;
1127
1177
  var angleObj = new Three.Sprite(new Three.SpriteMaterial({
@@ -1199,6 +1249,7 @@ var Scene3DViewer = /*#__PURE__*/function (_React$Component) {
1199
1249
  }
1200
1250
  };
1201
1251
  this.mouseDownEvent = function (event) {
1252
+ var _selectedObject;
1202
1253
  gridPlanOrigin = gridPlane.position;
1203
1254
  gridMatrix.copy(gridPlane.matrixWorld).invert();
1204
1255
  var altitude = 0;
@@ -1227,6 +1278,7 @@ var Scene3DViewer = /*#__PURE__*/function (_React$Component) {
1227
1278
  * 1 - move up/down
1228
1279
  * 2 - move x/y
1229
1280
  * 3 - camera rotate
1281
+ * 4 - mirror
1230
1282
  */
1231
1283
  var transflag = 3;
1232
1284
  raycaster.setFromCamera(mouse, camera);
@@ -1240,20 +1292,23 @@ var Scene3DViewer = /*#__PURE__*/function (_React$Component) {
1240
1292
  var intersects = raycaster.intersectObjects(meshes, true);
1241
1293
  var toolIntersects = raycaster.intersectObjects([toolObj], true);
1242
1294
 
1243
- // This code is excuted when click the tool object(rotation or move icon).
1295
+ // This code is excuted when click the tool object(rotation, move or mirror icon).
1244
1296
  if (toolIntersects.length > 0) {
1245
1297
  updateSelectedObject();
1246
- // it determines whether mouse is over on rotation icon or move icon.
1247
- var distance = Math.sqrt(Math.pow((toolIntersects[0].uv.x - 0.5) * 50, 2) + Math.pow((toolIntersects[0].uv.y - 0.25) * 100, 2));
1248
- // move icon selected
1249
- if (distance <= 20) {
1298
+ var toolHeight = toolObj.userData.canMirror ? TOOL_CANVAS_THREE_BUTTON_HEIGHT : TOOL_CANVAS_TWO_BUTTON_HEIGHT;
1299
+ var yScale = toolHeight / 2;
1300
+ var distanceFromToolButton = function distanceFromToolButton(centerY) {
1301
+ return Math.sqrt(Math.pow((toolIntersects[0].uv.x - 0.5) * 50, 2) + Math.pow((toolIntersects[0].uv.y - centerY) * yScale, 2));
1302
+ };
1303
+ var moveCenter = toolObj.userData.canMirror ? 0.5 : 0.25;
1304
+ var rotateCenter = toolObj.userData.canMirror ? 5 / 6 : 0.75;
1305
+ var mirrorCenter = 1 / 6;
1306
+ if (toolObj.userData.canMirror && distanceFromToolButton(mirrorCenter) <= TOOL_HIT_RADIUS) {
1307
+ transflag = 4;
1308
+ } else if (distanceFromToolButton(moveCenter) <= TOOL_HIT_RADIUS) {
1250
1309
  transflag = 2;
1251
- } else {
1252
- distance = Math.sqrt(Math.pow((toolIntersects[0].uv.x - 0.5) * 50, 2) + Math.pow((toolIntersects[0].uv.y - 0.75) * 100, 2));
1253
- // rotation icon selected
1254
- if (distance <= 20) {
1255
- transflag = 0;
1256
- }
1310
+ } else if (distanceFromToolButton(rotateCenter) <= TOOL_HIT_RADIUS) {
1311
+ transflag = 0;
1257
1312
  }
1258
1313
  }
1259
1314
  if (intersects.length > 0) {
@@ -1272,6 +1327,19 @@ var Scene3DViewer = /*#__PURE__*/function (_React$Component) {
1272
1327
  }
1273
1328
  }
1274
1329
  if (_this2.props.state.mode == MODE_DRAWING_ITEM_3D) return;
1330
+ if (isSelected && transflag == 4 && (_selectedObject = selectedObject) !== null && _selectedObject !== void 0 && _selectedObject.itemID) {
1331
+ var _this2$props$state$sc;
1332
+ var selectedItem = (_this2$props$state$sc = _this2.props.state.scene.getIn(['layers', selectedObject.layerID])) === null || _this2$props$state$sc === void 0 ? void 0 : _this2$props$state$sc.items.get(selectedObject.itemID);
1333
+ if (canMirrorItem(selectedItem)) {
1334
+ var mirrored = selectedItem.mirrored !== true;
1335
+ var mirroredItem = selectedItem.set('mirrored', mirrored);
1336
+ refreshToolObject(mirroredItem);
1337
+ _this2.context.itemsActions.toggleItemMirror(selectedObject.layerID, selectedObject.itemID, mirrored, _this2.props.onInternalEvent);
1338
+ cameraControls.mouseButtons.left = CameraControls.ACTION.NONE;
1339
+ bMirror = true;
1340
+ }
1341
+ return;
1342
+ }
1275
1343
  if (isSelected) {
1276
1344
  !_this2.props.downloadFlag && _this2.props.setToolbar('');
1277
1345
  if (intersects.length > 0 && !isNaN(intersects[0].distance)) {
@@ -1290,13 +1358,13 @@ var Scene3DViewer = /*#__PURE__*/function (_React$Component) {
1290
1358
  }
1291
1359
  if (selectedObject !== undefined) {
1292
1360
  // get selected object from planData.sceneGraph
1293
- var selectedItem = null;
1361
+ var _selectedItem = null;
1294
1362
  switch (true) {
1295
1363
  case 'itemID' in selectedObject:
1296
- selectedItem = planData.sceneGraph.layers[selectedObject.layerID].items[selectedObject.itemID];
1364
+ _selectedItem = planData.sceneGraph.layers[selectedObject.layerID].items[selectedObject.itemID];
1297
1365
  break;
1298
1366
  case 'holeID' in selectedObject:
1299
- selectedItem = planData.sceneGraph.layers[selectedObject.layerID].holes[selectedObject.holeID];
1367
+ _selectedItem = planData.sceneGraph.layers[selectedObject.layerID].holes[selectedObject.holeID];
1300
1368
  break;
1301
1369
  default:
1302
1370
  break;
@@ -1315,7 +1383,7 @@ var Scene3DViewer = /*#__PURE__*/function (_React$Component) {
1315
1383
  offsetX: event.offsetX - 50,
1316
1384
  offsetY: event.offsetY
1317
1385
  }, alti);
1318
- if (isUndefined(selectedItem)) return;
1386
+ if (isUndefined(_selectedItem)) return;
1319
1387
  var selItem = _this2.props.state.scene.layers.get(selectedObject.layerID).items.get(selectedObject.itemID);
1320
1388
  lastAngle = 0;
1321
1389
  angleObj.position.set(planData.plan.position.x + Point.x, selItem.category === 'lighting' ? -planData.plan.position.y - selItem.properties.get('height').get('length') : selItem.properties.get('altitude').get('length') + planData.plan.position.y, planData.plan.position.z - Point.y);
@@ -1344,7 +1412,7 @@ var Scene3DViewer = /*#__PURE__*/function (_React$Component) {
1344
1412
  scene3D.remove(toolObj);
1345
1413
  }
1346
1414
  for (_i1 = 0; _i1 < intersects.length; _i1++) {
1347
- if (selectedItem != undefined && intersects[_i1].object.parent && intersects[_i1].object.parent.parent.userData.itemId === selectedItem.userData.itemId) selectedFlag = true;
1415
+ if (_selectedItem != undefined && intersects[_i1].object.parent && intersects[_i1].object.parent.parent.userData.itemId === _selectedItem.userData.itemId) selectedFlag = true;
1348
1416
  }
1349
1417
  if (selectedFlag || toolIntersects.length > 0 && !isElevationView(mode)) {
1350
1418
  cameraControls.mouseButtons.left = CameraControls.ACTION.NONE;
@@ -1361,18 +1429,24 @@ var Scene3DViewer = /*#__PURE__*/function (_React$Component) {
1361
1429
  }
1362
1430
  };
1363
1431
  this.mouseUpEvent = function (event) {
1364
- var _selectedObject;
1432
+ var _selectedObject2;
1365
1433
  var internalType = ''; // internalEvent type - select/drag/draw
1366
1434
  var selectedElement; // internalEvent data
1367
1435
  firstMove = 0;
1368
1436
  var altitude = 0;
1369
- var curLayer = _this2.props.state.scene.getIn(['layers', (_selectedObject = selectedObject) === null || _selectedObject === void 0 ? void 0 : _selectedObject.layerID]);
1437
+ var curLayer = _this2.props.state.scene.getIn(['layers', (_selectedObject2 = selectedObject) === null || _selectedObject2 === void 0 ? void 0 : _selectedObject2.layerID]);
1370
1438
  if (allItemRect && allItemRect.cur && allItemRect.cur.itemInfo !== undefined) {
1371
1439
  var properties = allItemRect.cur.itemInfo.properties;
1372
1440
  altitude = properties.getIn(['altitude', '_length']);
1373
1441
  var unit = properties.getIn(['altitude', '_unit']) || 'in';
1374
1442
  altitude = convert(altitude).from(unit).to(_this2.props.state.scene.unit);
1375
1443
  }
1444
+ if (bMirror) {
1445
+ bMirror = false;
1446
+ cameraControls.mouseButtons.left = CameraControls.ACTION.ROTATE;
1447
+ event.preventDefault();
1448
+ return;
1449
+ }
1376
1450
  scene3D.remove(angleObj);
1377
1451
  scene3D.remove(toolObj);
1378
1452
  if (!_this2.props.downloadFlag && !_this2.props.state.mode.includes('ING')) {
@@ -1481,10 +1555,11 @@ var Scene3DViewer = /*#__PURE__*/function (_React$Component) {
1481
1555
  }
1482
1556
  gridMatrix.copy(gridPlane.matrixWorld).invert();
1483
1557
  var addItemToolObj = function addItemToolObj() {
1484
- var _planData$sceneGraph, _selectedObject2, _intersects$_i;
1485
- var selectedItem = (_planData$sceneGraph = planData.sceneGraph) === null || _planData$sceneGraph === void 0 || (_planData$sceneGraph = _planData$sceneGraph.layers[selectedObject.layerID]) === null || _planData$sceneGraph === void 0 ? void 0 : _planData$sceneGraph.items[(_selectedObject2 = selectedObject) === null || _selectedObject2 === void 0 ? void 0 : _selectedObject2.itemID];
1558
+ var _planData$sceneGraph, _selectedObject3, _intersects$_i;
1559
+ var selectedItem = (_planData$sceneGraph = planData.sceneGraph) === null || _planData$sceneGraph === void 0 || (_planData$sceneGraph = _planData$sceneGraph.layers[selectedObject.layerID]) === null || _planData$sceneGraph === void 0 ? void 0 : _planData$sceneGraph.items[(_selectedObject3 = selectedObject) === null || _selectedObject3 === void 0 ? void 0 : _selectedObject3.itemID];
1486
1560
  if (isUndefined(selectedItem)) return;
1487
1561
  selectedElement = _this2.props.state.scene.layers.get(selectedObject.layerID).items.get(selectedObject.itemID);
1562
+ refreshToolObject(selectedElement);
1488
1563
  var itemPos = selectedItem.position.clone();
1489
1564
  if (((_intersects$_i = intersects[_i10]) === null || _intersects$_i === void 0 || (_intersects$_i = _intersects$_i.object) === null || _intersects$_i === void 0 || (_intersects$_i = _intersects$_i.parent) === null || _intersects$_i === void 0 || (_intersects$_i = _intersects$_i.parent) === null || _intersects$_i === void 0 || (_intersects$_i = _intersects$_i.userData) === null || _intersects$_i === void 0 ? void 0 : _intersects$_i.itemId) === selectedItem.userData.itemId) {
1490
1565
  toolObj.position.set(intersects[_i10].point.x, intersects[_i10].point.y, intersects[_i10].point.z);
@@ -1584,7 +1659,7 @@ var Scene3DViewer = /*#__PURE__*/function (_React$Component) {
1584
1659
  selectedObj = allItemRect.cur;
1585
1660
  }
1586
1661
  } else {
1587
- var _planData$sceneGraph2, _selectedObject3, _selectedObject4;
1662
+ var _planData$sceneGraph2, _selectedObject4, _selectedObject5;
1588
1663
  visibleTransformBox(false);
1589
1664
  var alti = 0;
1590
1665
  if (allItemRect && allItemRect.cur && allItemRect.cur.itemInfo !== undefined) {
@@ -1594,8 +1669,8 @@ var Scene3DViewer = /*#__PURE__*/function (_React$Component) {
1594
1669
  alti = convert(alti).from(_unit2).to(_this2.props.state.scene.unit);
1595
1670
  }
1596
1671
  getPoint(event, alti);
1597
- var _selectedItem = planData === null || planData === void 0 || (_planData$sceneGraph2 = planData.sceneGraph) === null || _planData$sceneGraph2 === void 0 || (_planData$sceneGraph2 = _planData$sceneGraph2.layers[(_selectedObject3 = selectedObject) === null || _selectedObject3 === void 0 ? void 0 : _selectedObject3.layerID]) === null || _planData$sceneGraph2 === void 0 ? void 0 : _planData$sceneGraph2.items[(_selectedObject4 = selectedObject) === null || _selectedObject4 === void 0 ? void 0 : _selectedObject4.itemID];
1598
- if (isSelected && !isEmpty(_selectedItem)) addItemToolObj();
1672
+ var _selectedItem2 = planData === null || planData === void 0 || (_planData$sceneGraph2 = planData.sceneGraph) === null || _planData$sceneGraph2 === void 0 || (_planData$sceneGraph2 = _planData$sceneGraph2.layers[(_selectedObject4 = selectedObject) === null || _selectedObject4 === void 0 ? void 0 : _selectedObject4.layerID]) === null || _planData$sceneGraph2 === void 0 ? void 0 : _planData$sceneGraph2.items[(_selectedObject5 = selectedObject) === null || _selectedObject5 === void 0 ? void 0 : _selectedObject5.itemID];
1673
+ if (isSelected && !isEmpty(_selectedItem2)) addItemToolObj();
1599
1674
  if (bRotate) {
1600
1675
  _this2.setState({
1601
1676
  toolObj: toolObj
@@ -2094,6 +2169,7 @@ var Scene3DViewer = /*#__PURE__*/function (_React$Component) {
2094
2169
  _this2.context.itemsActions.setMoveStatus(false);
2095
2170
  _this2.context.itemsActions.setRotateStatus(false);
2096
2171
  bMoveUP = false;
2172
+ bMirror = false;
2097
2173
  removeSnapBox();
2098
2174
  break;
2099
2175
  case 65:
@@ -2177,6 +2253,7 @@ var Scene3DViewer = /*#__PURE__*/function (_React$Component) {
2177
2253
  currentObject = planData.sceneGraph.layers[selectedObject.layerID].items[selectedObject.itemID];
2178
2254
  if (isUndefined(currentObject)) return;
2179
2255
  var selItem = _this2.props.state.scene.layers.get(selectedObject.layerID).items.get(selectedObject.itemID);
2256
+ refreshToolObject(selItem);
2180
2257
  var itemPos = currentObject.position.clone();
2181
2258
  toolObj.position.set(planData.plan.position.x + itemPos.x, selItem.category === 'lighting' ? -planData.plan.position.y - selItem.properties.get('height').get('length') : planData.plan.position.y + currentObject.children[0].position.y, planData.plan.position.z + itemPos.z);
2182
2259
  scene3D.add(toolObj);
@@ -2521,6 +2598,14 @@ var Scene3DViewer = /*#__PURE__*/function (_React$Component) {
2521
2598
  }
2522
2599
  if (nextProps.state.scene !== this.props.state.scene || nextProps.state.doorStyle && nextProps.state.doorStyle.get('name') !== this.props.state.doorStyle.get('name')) {
2523
2600
  var changedValues = diff(this.props.state.scene, nextProps.state.scene);
2601
+ var changedValuesJS = changedValues.toJS();
2602
+ var selectedItemID = layer.selected.items.size ? layer.selected.items.get(0) : null;
2603
+ var selectedItem = selectedItemID ? layer.items.get(selectedItemID) : null;
2604
+ var shouldRefreshSelectedToolObject = selectedItem && changedValuesJS.some(function (_ref2) {
2605
+ var path = _ref2.path;
2606
+ var modifiedPath = path.split('/');
2607
+ return modifiedPath[1] === 'layers' && modifiedPath[2] === String(data.selectedLayer) && modifiedPath[3] === 'items' && modifiedPath[4] === String(selectedItemID) && modifiedPath[5] === 'mirrored';
2608
+ });
2524
2609
  prepareSnapSpec(layer);
2525
2610
  var isInteractiveMove = nextProps.state.mode === MODE_DRAGGING_ITEM_3D || nextProps.state.mode === MODE_ROTATING_ITEM_3D || nextProps.state.mode === MODE_DRAWING_ITEM_3D || nextProps.state.mode === MODE_DRAGGING_HOLE_3D || nextProps.state.mode === MODE_IDLE_3D;
2526
2611
  if (nextProps.state.doorStyle && nextProps.state.doorStyle.get('name') === this.props.state.doorStyle.get('name')) {
@@ -2553,8 +2638,11 @@ var Scene3DViewer = /*#__PURE__*/function (_React$Component) {
2553
2638
  var _this$state = this.state,
2554
2639
  toolObj = _this$state.toolObj,
2555
2640
  angleObj = _this$state.angleObj;
2556
- var _updateScene = updateScene(this.planData, nextProps.state.scene, this.props.state.scene, changedValues.toJS(), actions, this.context.catalog, nextProps.state.mode, toolObj, angleObj, nextProps.state.draggingSupport),
2641
+ var _updateScene = updateScene(this.planData, nextProps.state.scene, this.props.state.scene, changedValuesJS, actions, this.context.catalog, nextProps.state.mode, toolObj, angleObj, nextProps.state.draggingSupport),
2557
2642
  promise = _updateScene.promise;
2643
+ if (shouldRefreshSelectedToolObject && this.refreshToolObject) {
2644
+ this.refreshToolObject(selectedItem);
2645
+ }
2558
2646
  self.setState();
2559
2647
  promise.then(function (p1Value) {
2560
2648
  self.setState({
package/es/constants.js CHANGED
@@ -79,6 +79,7 @@ export var END_LOADING = 'END_LOADING';
79
79
  export var TOGGLE_LOADING_CABINET = 'TOGGLE_LOADING_CABINET';
80
80
  export var EDIT_WIDTH = 'EDIT_WIDTH';
81
81
  export var DUPLICATE_SELECTED = 'DUPLICATE_SELECTED';
82
+ export var TOGGLE_ITEM_MIRROR = 'TOGGLE_ITEM_MIRROR';
82
83
  export var REPLACE_ITEM = 'REPLACE_ITEM';
83
84
  export var SELECT_TOOL_DRAWING_ITEM = 'SELECT_TOOL_DRAWING_ITEM';
84
85
  export var SELECT_TOOL_DRAWING_ITEM_3D = 'SELECT_TOOL_DRAWING_ITEM_3D';
@@ -127,6 +128,7 @@ export var SET_APPLIANCE_MATERIAL = 'SET_APPLIANCE_MATERIAL';
127
128
  export var SET_MOVE_STATUS = 'SET_MOVE_STATUS';
128
129
  export var SET_ROTATE_STATUS = 'SET_ROTATE_STATUS';
129
130
  export var SET_ITEMS_CCDF = 'SET_ITEMS_CCDF';
131
+ export var SET_MOLDINGS_CCDF = 'SET_MOLDINGS_CCDF';
130
132
  //ACTIONS groups
131
133
  export var ADD_GROUP = 'ADD_GROUP';
132
134
  export var ADD_GROUP_FROM_SELECTED = 'ADD_GROUP_FROM_SELECTED';
@@ -312,13 +314,15 @@ export var ITEMS_ACTIONS = {
312
314
  // SET_MOVE_STATUS,
313
315
  // SET_ROTATE_STATUS,
314
316
  DUPLICATE_SELECTED: DUPLICATE_SELECTED,
317
+ TOGGLE_ITEM_MIRROR: TOGGLE_ITEM_MIRROR,
315
318
  EDIT_WIDTH: EDIT_WIDTH,
316
319
  TOGGLE_LOADING_CABINET: TOGGLE_LOADING_CABINET,
317
320
  END_LOADING: END_LOADING,
318
321
  STORE_DIST_ARRAY: STORE_DIST_ARRAY,
319
322
  VALIDATE_ITEM_POSTIONS: VALIDATE_ITEM_POSTIONS,
320
323
  REPLACE_ITEM: REPLACE_ITEM,
321
- SET_ITEMS_CCDF: SET_ITEMS_CCDF
324
+ SET_ITEMS_CCDF: SET_ITEMS_CCDF,
325
+ SET_MOLDINGS_CCDF: SET_MOLDINGS_CCDF
322
326
  };
323
327
  export var HOLE_ACTIONS = {
324
328
  SELECT_HOLE: SELECT_HOLE,
@@ -742,6 +746,7 @@ export var EXTERNAL_EVENT_PROJECT_SETTING = 'EXTERNAL_EVENT_PROJECT_SETTING'; //
742
746
  export var EXTERNAL_EVENT_CENTERING_2D = 'EXTERNAL_EVENT_CENTERING_2D';
743
747
  export var EXTERNAL_EVENT_DUPLICATE_ELEMENT = 'EXTERNAL_EVENT_DUPLICATE_ELEMENT';
744
748
  export var EXTERNAL_EVENT_DELETE_ELEMENT = 'EXTERNAL_EVENT_DELETE_ELEMENT';
749
+ export var EXTERNAL_EVENT_MIRROR_ELEMENT = 'EXTERNAL_EVENT_MIRROR_ELEMENT';
745
750
  export var EXTERNAL_EVENT_UPDATE_ATTRIBUTE = 'EXTERNAL_EVENT_UPDATE_ATTRIBUTE'; // update the element's attributes (distance, rotation...) in the property window
746
751
  export var EXTERNAL_EVENT_UPDATE_PROPERTY = 'EXTERNAL_EVENT_UPDATE_PROPERTY'; // update the element's property (flip_doorhandle, open_doors...) in the property window
747
752
  export var EXTERNAL_EVENT_REPLACE_CABINET = 'EXTERNAL_EVENT_REPLACE_CABINET';
@@ -754,6 +759,7 @@ export var INTERNAL_EVENT_SELECT_ELEMENT = 'INTERNAL_EVENT_SELECT_ELEMENT';
754
759
  export var INTERNAL_EVENT_DRAG_ELEMENT = 'INTERNAL_EVENT_DRAG_ELEMENT';
755
760
  export var INTERNAL_EVENT_DRAW_ELEMENT = 'INTERNAL_EVENT_DRAW_ELEMENT';
756
761
  export var INTERNAL_EVENT_ROTATE_ELEMENT = 'INTERNAL_EVENT_ROTATE_ELEMENT';
762
+ export var INTERNAL_EVENT_MIRROR_ELEMENT = 'INTERNAL_EVENT_MIRROR_ELEMENT';
757
763
  export var INTERNAL_EVENT_REPLACE_CABINET = 'INTERNAL_EVENT_REPLACE_CABINET';
758
764
  export var INTERNAL_EVENT_START_DRAW_WALL = 'INTERNAL_EVENT_START_DRAW_WALL';
759
765
  export var INTERNAL_EVENT_TOGGLE_TO_ELEVATION = 'INTERNAL_EVENT_TOGGLE_TO_ELEVATION';
@@ -1,6 +1,6 @@
1
1
  import _asyncToGenerator from "@babel/runtime/helpers/esm/asyncToGenerator";
2
2
  import _regeneratorRuntime from "@babel/runtime/regenerator";
3
- import { ARRAY_3D_MODES, DOORSTYLE_SCOPE_ALL, DOORSTYLE_SCOPE_MULTIPLE, DOORSTYLE_SCOPE_SINGLE, DEFAULT_MOLDING_PIECE_LENGTH, EXTERNAL_EVENT_ADD_HOLE, EXTERNAL_EVENT_ADD_ITEM, EXTERNAL_EVENT_ADD_ROOM_SHAPE, EXTERNAL_EVENT_ADD_WALL, EXTERNAL_EVENT_CHANGE_DOORSTYLE, EXTERNAL_EVENT_CENTERING_2D, EXTERNAL_EVENT_DELETE_ELEMENT, EXTERNAL_EVENT_DUPLICATE_ELEMENT, EXTERNAL_EVENT_LOAD_PROJECT, EXTERNAL_EVENT_MOVE_PAN, EXTERNAL_EVENT_NEW_PROJECT, EXTERNAL_EVENT_PROJECT_SETTING, EXTERNAL_EVENT_REDO, EXTERNAL_EVENT_REPLACE_CABINET, EXTERNAL_EVENT_ROTATE_PAN, EXTERNAL_EVENT_SET_FINISHING, EXTERNAL_EVENT_SET_MOLDING, EXTERNAL_EVENT_ZOOM_IN, EXTERNAL_EVENT_ZOOM_OUT, EXTERNAL_EVENT_SYNC_SCENE, EXTERNAL_EVENT_TOGGLE_TO_2D, EXTERNAL_EVENT_TOGGLE_TO_3D, EXTERNAL_EVENT_TOGGLE_TO_ELEVATION, EXTERNAL_EVENT_UNDO, EXTERNAL_EVENT_UPDATE_ATTRIBUTE, EXTERNAL_EVENT_UPDATE_PROPERTY, INTERNAL_EVENT_ITEMS_CATALOG, INTERNAL_EVENT_SYNC_SCENE, MODE_ELEVATION_VIEW, MODE_IDLE, MODE_IDLE_3D } from "../../constants";
3
+ import { ARRAY_3D_MODES, DOORSTYLE_SCOPE_ALL, DOORSTYLE_SCOPE_MULTIPLE, DOORSTYLE_SCOPE_SINGLE, DEFAULT_MOLDING_PIECE_LENGTH, EXTERNAL_EVENT_ADD_HOLE, EXTERNAL_EVENT_ADD_ITEM, EXTERNAL_EVENT_ADD_ROOM_SHAPE, EXTERNAL_EVENT_ADD_WALL, EXTERNAL_EVENT_CHANGE_DOORSTYLE, EXTERNAL_EVENT_CENTERING_2D, EXTERNAL_EVENT_DELETE_ELEMENT, EXTERNAL_EVENT_DUPLICATE_ELEMENT, EXTERNAL_EVENT_MIRROR_ELEMENT, EXTERNAL_EVENT_LOAD_PROJECT, EXTERNAL_EVENT_MOVE_PAN, EXTERNAL_EVENT_NEW_PROJECT, EXTERNAL_EVENT_PROJECT_SETTING, EXTERNAL_EVENT_REDO, EXTERNAL_EVENT_REPLACE_CABINET, EXTERNAL_EVENT_ROTATE_PAN, EXTERNAL_EVENT_SET_FINISHING, EXTERNAL_EVENT_SET_MOLDING, EXTERNAL_EVENT_ZOOM_IN, EXTERNAL_EVENT_ZOOM_OUT, EXTERNAL_EVENT_SYNC_SCENE, EXTERNAL_EVENT_TOGGLE_TO_2D, EXTERNAL_EVENT_TOGGLE_TO_3D, EXTERNAL_EVENT_TOGGLE_TO_ELEVATION, EXTERNAL_EVENT_UNDO, EXTERNAL_EVENT_UPDATE_ATTRIBUTE, EXTERNAL_EVENT_UPDATE_PROPERTY, INTERNAL_EVENT_ITEMS_CATALOG, INTERNAL_EVENT_SYNC_SCENE, MODE_ELEVATION_VIEW, MODE_IDLE, MODE_IDLE_3D } from "../../constants";
4
4
  import { isEmpty } from "../../utils/helper";
5
5
  import { mapExternalEventPayload } from "../../mappings/external-events/mapExternalEventPayload";
6
6
  import { ccdfMapper } from "../../mappings/external-events/mappers/ccdfMapper";
@@ -17,7 +17,7 @@ import { handleAddWall } from "./handlers.wall";
17
17
  import { handleAddHole } from "./handlers.hole";
18
18
  import { handleAddRoomShape } from "./handlers.roomShape";
19
19
  import { handleSetMolding } from "./handlers.molding";
20
- import { handleDuplicateElement, handleDeleteElement } from "./handlers.elementOps";
20
+ import { handleDuplicateElement, handleDeleteElement, handleMirrorElement } from "./handlers.elementOps";
21
21
  import { handleReplaceCabinet } from "./handlers.replaceCabinet";
22
22
  import { handleSyncScene } from "./handlers.syncScene";
23
23
  import { handleLoadProjectEvent } from "./handlers.loadProject";
@@ -46,92 +46,95 @@ function _handleExternalEvent() {
46
46
  layerId = state.getIn(['scene', 'selectedLayer']);
47
47
  layer = state.getIn(['scene', 'layers', layerId]);
48
48
  _t = evt === null || evt === void 0 ? void 0 : evt.type;
49
- _context.next = _t === EXTERNAL_EVENT_LOAD_PROJECT ? 2 : _t === EXTERNAL_EVENT_TOGGLE_TO_3D ? 4 : _t === EXTERNAL_EVENT_TOGGLE_TO_2D ? 5 : _t === EXTERNAL_EVENT_TOGGLE_TO_ELEVATION ? 6 : _t === EXTERNAL_EVENT_ADD_WALL ? 7 : _t === EXTERNAL_EVENT_ADD_ITEM ? 8 : _t === EXTERNAL_EVENT_ADD_HOLE ? 10 : _t === EXTERNAL_EVENT_ROTATE_PAN ? 11 : _t === EXTERNAL_EVENT_MOVE_PAN ? 11 : _t === EXTERNAL_EVENT_NEW_PROJECT ? 12 : _t === EXTERNAL_EVENT_CHANGE_DOORSTYLE ? 13 : _t === EXTERNAL_EVENT_ADD_ROOM_SHAPE ? 15 : _t === EXTERNAL_EVENT_ZOOM_IN ? 16 : _t === EXTERNAL_EVENT_ZOOM_OUT ? 17 : _t === EXTERNAL_EVENT_CENTERING_2D ? 18 : _t === EXTERNAL_EVENT_UNDO ? 19 : _t === EXTERNAL_EVENT_REDO ? 20 : _t === EXTERNAL_EVENT_SET_MOLDING ? 21 : _t === EXTERNAL_EVENT_DUPLICATE_ELEMENT ? 23 : _t === EXTERNAL_EVENT_DELETE_ELEMENT ? 24 : _t === EXTERNAL_EVENT_PROJECT_SETTING ? 25 : _t === EXTERNAL_EVENT_UPDATE_ATTRIBUTE ? 26 : _t === EXTERNAL_EVENT_UPDATE_PROPERTY ? 26 : _t === EXTERNAL_EVENT_REPLACE_CABINET ? 27 : _t === EXTERNAL_EVENT_SET_FINISHING ? 29 : _t === EXTERNAL_EVENT_SYNC_SCENE ? 30 : 31;
49
+ _context.next = _t === EXTERNAL_EVENT_LOAD_PROJECT ? 2 : _t === EXTERNAL_EVENT_TOGGLE_TO_3D ? 4 : _t === EXTERNAL_EVENT_TOGGLE_TO_2D ? 5 : _t === EXTERNAL_EVENT_TOGGLE_TO_ELEVATION ? 6 : _t === EXTERNAL_EVENT_ADD_WALL ? 7 : _t === EXTERNAL_EVENT_ADD_ITEM ? 8 : _t === EXTERNAL_EVENT_ADD_HOLE ? 10 : _t === EXTERNAL_EVENT_ROTATE_PAN ? 11 : _t === EXTERNAL_EVENT_MOVE_PAN ? 11 : _t === EXTERNAL_EVENT_NEW_PROJECT ? 12 : _t === EXTERNAL_EVENT_CHANGE_DOORSTYLE ? 13 : _t === EXTERNAL_EVENT_ADD_ROOM_SHAPE ? 15 : _t === EXTERNAL_EVENT_ZOOM_IN ? 16 : _t === EXTERNAL_EVENT_ZOOM_OUT ? 17 : _t === EXTERNAL_EVENT_CENTERING_2D ? 18 : _t === EXTERNAL_EVENT_UNDO ? 19 : _t === EXTERNAL_EVENT_REDO ? 20 : _t === EXTERNAL_EVENT_SET_MOLDING ? 21 : _t === EXTERNAL_EVENT_DUPLICATE_ELEMENT ? 23 : _t === EXTERNAL_EVENT_DELETE_ELEMENT ? 24 : _t === EXTERNAL_EVENT_MIRROR_ELEMENT ? 25 : _t === EXTERNAL_EVENT_PROJECT_SETTING ? 26 : _t === EXTERNAL_EVENT_UPDATE_ATTRIBUTE ? 27 : _t === EXTERNAL_EVENT_UPDATE_PROPERTY ? 27 : _t === EXTERNAL_EVENT_REPLACE_CABINET ? 28 : _t === EXTERNAL_EVENT_SET_FINISHING ? 30 : _t === EXTERNAL_EVENT_SYNC_SCENE ? 31 : 32;
50
50
  break;
51
51
  case 2:
52
52
  _context.next = 3;
53
53
  return handleLoadProjectEvent(props, state, evt, mapFromCCDFToCDS, updateProjectWithCDSList, ccdfMapper, mergeSameElements, addItemToCatalog);
54
54
  case 3:
55
- return _context.abrupt("continue", 31);
55
+ return _context.abrupt("continue", 32);
56
56
  case 4:
57
57
  handleToggleTo3D(props, MODE_IDLE_3D);
58
- return _context.abrupt("continue", 31);
58
+ return _context.abrupt("continue", 32);
59
59
  case 5:
60
60
  handleToggleTo2D(props, MODE_IDLE);
61
- return _context.abrupt("continue", 31);
61
+ return _context.abrupt("continue", 32);
62
62
  case 6:
63
63
  handleToggleToElevation(props, layer, MODE_ELEVATION_VIEW);
64
- return _context.abrupt("continue", 31);
64
+ return _context.abrupt("continue", 32);
65
65
  case 7:
66
66
  handleAddWall(props, state);
67
- return _context.abrupt("continue", 31);
67
+ return _context.abrupt("continue", 32);
68
68
  case 8:
69
69
  _context.next = 9;
70
70
  return handleAddItemEvent(props, state, evt === null || evt === void 0 ? void 0 : evt.payload, addItemToCatalog, isEmpty, ARRAY_3D_MODES);
71
71
  case 9:
72
- return _context.abrupt("continue", 31);
72
+ return _context.abrupt("continue", 32);
73
73
  case 10:
74
74
  handleAddHole(props, state, evt === null || evt === void 0 ? void 0 : evt.payload);
75
- return _context.abrupt("continue", 31);
75
+ return _context.abrupt("continue", 32);
76
76
  case 11:
77
77
  handleMoveAndRotatePan2D3D(evt.type, props, evt.payload, state);
78
- return _context.abrupt("continue", 31);
78
+ return _context.abrupt("continue", 32);
79
79
  case 12:
80
80
  handleNewProject(props);
81
- return _context.abrupt("continue", 31);
81
+ return _context.abrupt("continue", 32);
82
82
  case 13:
83
83
  _context.next = 14;
84
84
  return handleChangeDoorStyleEvent(props, state, layer, evt.payload, DOORSTYLE_SCOPE_SINGLE, DOORSTYLE_SCOPE_MULTIPLE, DOORSTYLE_SCOPE_ALL, INTERNAL_EVENT_ITEMS_CATALOG, mapFromCCDFToCDS, ccdfMapper, mergeSameElements, addItemToCatalog);
85
85
  case 14:
86
- return _context.abrupt("continue", 31);
86
+ return _context.abrupt("continue", 32);
87
87
  case 15:
88
88
  handleAddRoomShape(props, evt.payload);
89
- return _context.abrupt("continue", 31);
89
+ return _context.abrupt("continue", 32);
90
90
  case 16:
91
91
  handleZoomIn(props, state);
92
- return _context.abrupt("continue", 31);
92
+ return _context.abrupt("continue", 32);
93
93
  case 17:
94
94
  handleZoomOut(props, state);
95
- return _context.abrupt("continue", 31);
95
+ return _context.abrupt("continue", 32);
96
96
  case 18:
97
97
  handleCentering2D(props, state);
98
- return _context.abrupt("continue", 31);
98
+ return _context.abrupt("continue", 32);
99
99
  case 19:
100
100
  handleUndo(props);
101
- return _context.abrupt("continue", 31);
101
+ return _context.abrupt("continue", 32);
102
102
  case 20:
103
103
  handleRedo(props);
104
- return _context.abrupt("continue", 31);
104
+ return _context.abrupt("continue", 32);
105
105
  case 21:
106
106
  _context.next = 22;
107
107
  return handleSetMolding(props, loadMoldingSvg, evt.payload);
108
108
  case 22:
109
- return _context.abrupt("continue", 31);
109
+ return _context.abrupt("continue", 32);
110
110
  case 23:
111
111
  handleDuplicateElement(props, getElement, evt.payload, state);
112
- return _context.abrupt("continue", 31);
112
+ return _context.abrupt("continue", 32);
113
113
  case 24:
114
114
  handleDeleteElement(props, getElement, evt.payload, state);
115
- return _context.abrupt("continue", 31);
115
+ return _context.abrupt("continue", 32);
116
116
  case 25:
117
- handleProjectSetting(props, evt.payload, layer);
118
- return _context.abrupt("continue", 31);
117
+ handleMirrorElement(props, getElement, evt.payload, state);
118
+ return _context.abrupt("continue", 32);
119
119
  case 26:
120
- handleUpdateSelectedElementsEvent(props, state, evt, EXTERNAL_EVENT_UPDATE_ATTRIBUTE, updateAttributeOfSelectedElement, updatePropertyOfSelectedElement);
121
- return _context.abrupt("continue", 31);
120
+ handleProjectSetting(props, evt.payload, layer);
121
+ return _context.abrupt("continue", 32);
122
122
  case 27:
123
- _context.next = 28;
124
- return handleReplaceCabinet(props, addItemToCatalog, evt === null || evt === void 0 ? void 0 : evt.payload, state);
123
+ handleUpdateSelectedElementsEvent(props, state, evt, EXTERNAL_EVENT_UPDATE_ATTRIBUTE, updateAttributeOfSelectedElement, updatePropertyOfSelectedElement);
124
+ return _context.abrupt("continue", 32);
125
125
  case 28:
126
- return _context.abrupt("continue", 31);
126
+ _context.next = 29;
127
+ return handleReplaceCabinet(props, addItemToCatalog, evt === null || evt === void 0 ? void 0 : evt.payload, state);
127
128
  case 29:
128
- handleSetFinishing(props, state, evt.payload);
129
- return _context.abrupt("continue", 31);
129
+ return _context.abrupt("continue", 32);
130
130
  case 30:
131
+ handleSetFinishing(props, state, evt.payload);
132
+ return _context.abrupt("continue", 32);
133
+ case 31:
131
134
  console.log('*** catalog ***', props.catalog);
132
135
  handleSyncScene(props, state, layer, layerId, getMoldingDataOfScene2, computeSkinPanels, DEFAULT_MOLDING_PIECE_LENGTH, INTERNAL_EVENT_SYNC_SCENE);
133
- return _context.abrupt("continue", 31);
134
- case 31:
136
+ return _context.abrupt("continue", 32);
137
+ case 32:
135
138
  case "end":
136
139
  return _context.stop();
137
140
  }
@@ -90,7 +90,8 @@ function _parseTempPlaceholdersFromCabinetPayload() {
90
90
  has_single_door = false;
91
91
  fixedPHs = 0;
92
92
  temp.forEach(function (t, index) {
93
- var nodes = t.data.nodes;
93
+ var _t$data;
94
+ var nodes = t === null || t === void 0 || (_t$data = t.data) === null || _t$data === void 0 ? void 0 : _t$data.nodes;
94
95
  if (nodes === undefined) {
95
96
  nodes = [];
96
97
  }
@@ -221,7 +222,8 @@ function _parseTempPlaceholdersFromCabinetPayload() {
221
222
  return felement.name === 'base_drawer_door' + t.name.slice(-2);
222
223
  });
223
224
  if (ph_temp != undefined) {
224
- var ph_drawer_door_handle = ph_temp.data.nodes;
225
+ var _ph_temp$data$nodes, _ph_temp;
226
+ var ph_drawer_door_handle = (_ph_temp$data$nodes = (_ph_temp = ph_temp) === null || _ph_temp === void 0 || (_ph_temp = _ph_temp.data) === null || _ph_temp === void 0 ? void 0 : _ph_temp.nodes) !== null && _ph_temp$data$nodes !== void 0 ? _ph_temp$data$nodes : [];
225
227
  ph_drawer_door_handle = ph_drawer_door_handle.filter(function (element) {
226
228
  return element.name.startsWith('ph_') && element.name.includes('handle');
227
229
  });