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
@@ -53,92 +53,95 @@ function _handleExternalEvent() {
53
53
  layerId = state.getIn(['scene', 'selectedLayer']);
54
54
  layer = state.getIn(['scene', 'layers', layerId]);
55
55
  _t = evt === null || evt === void 0 ? void 0 : evt.type;
56
- _context.next = _t === _constants.EXTERNAL_EVENT_LOAD_PROJECT ? 2 : _t === _constants.EXTERNAL_EVENT_TOGGLE_TO_3D ? 4 : _t === _constants.EXTERNAL_EVENT_TOGGLE_TO_2D ? 5 : _t === _constants.EXTERNAL_EVENT_TOGGLE_TO_ELEVATION ? 6 : _t === _constants.EXTERNAL_EVENT_ADD_WALL ? 7 : _t === _constants.EXTERNAL_EVENT_ADD_ITEM ? 8 : _t === _constants.EXTERNAL_EVENT_ADD_HOLE ? 10 : _t === _constants.EXTERNAL_EVENT_ROTATE_PAN ? 11 : _t === _constants.EXTERNAL_EVENT_MOVE_PAN ? 11 : _t === _constants.EXTERNAL_EVENT_NEW_PROJECT ? 12 : _t === _constants.EXTERNAL_EVENT_CHANGE_DOORSTYLE ? 13 : _t === _constants.EXTERNAL_EVENT_ADD_ROOM_SHAPE ? 15 : _t === _constants.EXTERNAL_EVENT_ZOOM_IN ? 16 : _t === _constants.EXTERNAL_EVENT_ZOOM_OUT ? 17 : _t === _constants.EXTERNAL_EVENT_CENTERING_2D ? 18 : _t === _constants.EXTERNAL_EVENT_UNDO ? 19 : _t === _constants.EXTERNAL_EVENT_REDO ? 20 : _t === _constants.EXTERNAL_EVENT_SET_MOLDING ? 21 : _t === _constants.EXTERNAL_EVENT_DUPLICATE_ELEMENT ? 23 : _t === _constants.EXTERNAL_EVENT_DELETE_ELEMENT ? 24 : _t === _constants.EXTERNAL_EVENT_PROJECT_SETTING ? 25 : _t === _constants.EXTERNAL_EVENT_UPDATE_ATTRIBUTE ? 26 : _t === _constants.EXTERNAL_EVENT_UPDATE_PROPERTY ? 26 : _t === _constants.EXTERNAL_EVENT_REPLACE_CABINET ? 27 : _t === _constants.EXTERNAL_EVENT_SET_FINISHING ? 29 : _t === _constants.EXTERNAL_EVENT_SYNC_SCENE ? 30 : 31;
56
+ _context.next = _t === _constants.EXTERNAL_EVENT_LOAD_PROJECT ? 2 : _t === _constants.EXTERNAL_EVENT_TOGGLE_TO_3D ? 4 : _t === _constants.EXTERNAL_EVENT_TOGGLE_TO_2D ? 5 : _t === _constants.EXTERNAL_EVENT_TOGGLE_TO_ELEVATION ? 6 : _t === _constants.EXTERNAL_EVENT_ADD_WALL ? 7 : _t === _constants.EXTERNAL_EVENT_ADD_ITEM ? 8 : _t === _constants.EXTERNAL_EVENT_ADD_HOLE ? 10 : _t === _constants.EXTERNAL_EVENT_ROTATE_PAN ? 11 : _t === _constants.EXTERNAL_EVENT_MOVE_PAN ? 11 : _t === _constants.EXTERNAL_EVENT_NEW_PROJECT ? 12 : _t === _constants.EXTERNAL_EVENT_CHANGE_DOORSTYLE ? 13 : _t === _constants.EXTERNAL_EVENT_ADD_ROOM_SHAPE ? 15 : _t === _constants.EXTERNAL_EVENT_ZOOM_IN ? 16 : _t === _constants.EXTERNAL_EVENT_ZOOM_OUT ? 17 : _t === _constants.EXTERNAL_EVENT_CENTERING_2D ? 18 : _t === _constants.EXTERNAL_EVENT_UNDO ? 19 : _t === _constants.EXTERNAL_EVENT_REDO ? 20 : _t === _constants.EXTERNAL_EVENT_SET_MOLDING ? 21 : _t === _constants.EXTERNAL_EVENT_DUPLICATE_ELEMENT ? 23 : _t === _constants.EXTERNAL_EVENT_DELETE_ELEMENT ? 24 : _t === _constants.EXTERNAL_EVENT_MIRROR_ELEMENT ? 25 : _t === _constants.EXTERNAL_EVENT_PROJECT_SETTING ? 26 : _t === _constants.EXTERNAL_EVENT_UPDATE_ATTRIBUTE ? 27 : _t === _constants.EXTERNAL_EVENT_UPDATE_PROPERTY ? 27 : _t === _constants.EXTERNAL_EVENT_REPLACE_CABINET ? 28 : _t === _constants.EXTERNAL_EVENT_SET_FINISHING ? 30 : _t === _constants.EXTERNAL_EVENT_SYNC_SCENE ? 31 : 32;
57
57
  break;
58
58
  case 2:
59
59
  _context.next = 3;
60
60
  return (0, _handlers11.handleLoadProjectEvent)(props, state, evt, _ccdfToCDSMapper.mapFromCCDFToCDS, _loadProjectMapper.updateProjectWithCDSList, _ccdfMapper.ccdfMapper, _handleExternalEvent2.mergeSameElements, _handleExternalEvent2.addItemToCatalog);
61
61
  case 3:
62
- return _context.abrupt("continue", 31);
62
+ return _context.abrupt("continue", 32);
63
63
  case 4:
64
64
  (0, _handlers.handleToggleTo3D)(props, _constants.MODE_IDLE_3D);
65
- return _context.abrupt("continue", 31);
65
+ return _context.abrupt("continue", 32);
66
66
  case 5:
67
67
  (0, _handlers.handleToggleTo2D)(props, _constants.MODE_IDLE);
68
- return _context.abrupt("continue", 31);
68
+ return _context.abrupt("continue", 32);
69
69
  case 6:
70
70
  (0, _handlers.handleToggleToElevation)(props, layer, _constants.MODE_ELEVATION_VIEW);
71
- return _context.abrupt("continue", 31);
71
+ return _context.abrupt("continue", 32);
72
72
  case 7:
73
73
  (0, _handlers6.handleAddWall)(props, state);
74
- return _context.abrupt("continue", 31);
74
+ return _context.abrupt("continue", 32);
75
75
  case 8:
76
76
  _context.next = 9;
77
77
  return (0, _handlers12.handleAddItemEvent)(props, state, evt === null || evt === void 0 ? void 0 : evt.payload, _handleExternalEvent2.addItemToCatalog, _helper.isEmpty, _constants.ARRAY_3D_MODES);
78
78
  case 9:
79
- return _context.abrupt("continue", 31);
79
+ return _context.abrupt("continue", 32);
80
80
  case 10:
81
81
  (0, _handlers7.handleAddHole)(props, state, evt === null || evt === void 0 ? void 0 : evt.payload);
82
- return _context.abrupt("continue", 31);
82
+ return _context.abrupt("continue", 32);
83
83
  case 11:
84
84
  (0, _handlers2.handleMoveAndRotatePan2D3D)(evt.type, props, evt.payload, state);
85
- return _context.abrupt("continue", 31);
85
+ return _context.abrupt("continue", 32);
86
86
  case 12:
87
87
  (0, _handlers3.handleNewProject)(props);
88
- return _context.abrupt("continue", 31);
88
+ return _context.abrupt("continue", 32);
89
89
  case 13:
90
90
  _context.next = 14;
91
91
  return (0, _handlers13.handleChangeDoorStyleEvent)(props, state, layer, evt.payload, _constants.DOORSTYLE_SCOPE_SINGLE, _constants.DOORSTYLE_SCOPE_MULTIPLE, _constants.DOORSTYLE_SCOPE_ALL, _constants.INTERNAL_EVENT_ITEMS_CATALOG, _ccdfToCDSMapper.mapFromCCDFToCDS, _ccdfMapper.ccdfMapper, _handleExternalEvent2.mergeSameElements, _handleExternalEvent2.addItemToCatalog);
92
92
  case 14:
93
- return _context.abrupt("continue", 31);
93
+ return _context.abrupt("continue", 32);
94
94
  case 15:
95
95
  (0, _handlers8.handleAddRoomShape)(props, evt.payload);
96
- return _context.abrupt("continue", 31);
96
+ return _context.abrupt("continue", 32);
97
97
  case 16:
98
98
  (0, _handlers2.handleZoomIn)(props, state);
99
- return _context.abrupt("continue", 31);
99
+ return _context.abrupt("continue", 32);
100
100
  case 17:
101
101
  (0, _handlers2.handleZoomOut)(props, state);
102
- return _context.abrupt("continue", 31);
102
+ return _context.abrupt("continue", 32);
103
103
  case 18:
104
104
  (0, _handlers2.handleCentering2D)(props, state);
105
- return _context.abrupt("continue", 31);
105
+ return _context.abrupt("continue", 32);
106
106
  case 19:
107
107
  (0, _handlers3.handleUndo)(props);
108
- return _context.abrupt("continue", 31);
108
+ return _context.abrupt("continue", 32);
109
109
  case 20:
110
110
  (0, _handlers3.handleRedo)(props);
111
- return _context.abrupt("continue", 31);
111
+ return _context.abrupt("continue", 32);
112
112
  case 21:
113
113
  _context.next = 22;
114
114
  return (0, _handlers9.handleSetMolding)(props, _handleExternalEvent2.loadMoldingSvg, evt.payload);
115
115
  case 22:
116
- return _context.abrupt("continue", 31);
116
+ return _context.abrupt("continue", 32);
117
117
  case 23:
118
118
  (0, _handlers0.handleDuplicateElement)(props, _handleExternalEvent2.getElement, evt.payload, state);
119
- return _context.abrupt("continue", 31);
119
+ return _context.abrupt("continue", 32);
120
120
  case 24:
121
121
  (0, _handlers0.handleDeleteElement)(props, _handleExternalEvent2.getElement, evt.payload, state);
122
- return _context.abrupt("continue", 31);
122
+ return _context.abrupt("continue", 32);
123
123
  case 25:
124
- (0, _handlers4.handleProjectSetting)(props, evt.payload, layer);
125
- return _context.abrupt("continue", 31);
124
+ (0, _handlers0.handleMirrorElement)(props, _handleExternalEvent2.getElement, evt.payload, state);
125
+ return _context.abrupt("continue", 32);
126
126
  case 26:
127
- (0, _handlers14.handleUpdateSelectedElementsEvent)(props, state, evt, _constants.EXTERNAL_EVENT_UPDATE_ATTRIBUTE, _handleExternalEvent2.updateAttributeOfSelectedElement, _handleExternalEvent2.updatePropertyOfSelectedElement);
128
- return _context.abrupt("continue", 31);
127
+ (0, _handlers4.handleProjectSetting)(props, evt.payload, layer);
128
+ return _context.abrupt("continue", 32);
129
129
  case 27:
130
- _context.next = 28;
131
- return (0, _handlers1.handleReplaceCabinet)(props, _handleExternalEvent2.addItemToCatalog, evt === null || evt === void 0 ? void 0 : evt.payload, state);
130
+ (0, _handlers14.handleUpdateSelectedElementsEvent)(props, state, evt, _constants.EXTERNAL_EVENT_UPDATE_ATTRIBUTE, _handleExternalEvent2.updateAttributeOfSelectedElement, _handleExternalEvent2.updatePropertyOfSelectedElement);
131
+ return _context.abrupt("continue", 32);
132
132
  case 28:
133
- return _context.abrupt("continue", 31);
133
+ _context.next = 29;
134
+ return (0, _handlers1.handleReplaceCabinet)(props, _handleExternalEvent2.addItemToCatalog, evt === null || evt === void 0 ? void 0 : evt.payload, state);
134
135
  case 29:
135
- (0, _handlers5.handleSetFinishing)(props, state, evt.payload);
136
- return _context.abrupt("continue", 31);
136
+ return _context.abrupt("continue", 32);
137
137
  case 30:
138
+ (0, _handlers5.handleSetFinishing)(props, state, evt.payload);
139
+ return _context.abrupt("continue", 32);
140
+ case 31:
138
141
  console.log('*** catalog ***', props.catalog);
139
142
  (0, _handlers10.handleSyncScene)(props, state, layer, layerId, _molding.getMoldingDataOfScene2, _skinPanelEngine.computeSkinPanels, _constants.DEFAULT_MOLDING_PIECE_LENGTH, _constants.INTERNAL_EVENT_SYNC_SCENE);
140
- return _context.abrupt("continue", 31);
141
- case 31:
143
+ return _context.abrupt("continue", 32);
144
+ case 32:
142
145
  case "end":
143
146
  return _context.stop();
144
147
  }
@@ -103,7 +103,8 @@ function _parseTempPlaceholdersFromCabinetPayload() {
103
103
  has_single_door = false;
104
104
  fixedPHs = 0;
105
105
  temp.forEach(function (t, index) {
106
- var nodes = t.data.nodes;
106
+ var _t$data;
107
+ var nodes = t === null || t === void 0 || (_t$data = t.data) === null || _t$data === void 0 ? void 0 : _t$data.nodes;
107
108
  if (nodes === undefined) {
108
109
  nodes = [];
109
110
  }
@@ -234,7 +235,8 @@ function _parseTempPlaceholdersFromCabinetPayload() {
234
235
  return felement.name === 'base_drawer_door' + t.name.slice(-2);
235
236
  });
236
237
  if (ph_temp != undefined) {
237
- var ph_drawer_door_handle = ph_temp.data.nodes;
238
+ var _ph_temp$data$nodes, _ph_temp;
239
+ 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 : [];
238
240
  ph_drawer_door_handle = ph_drawer_door_handle.filter(function (element) {
239
241
  return element.name.startsWith('ph_') && element.name.includes('handle');
240
242
  });
@@ -7,12 +7,29 @@ Object.defineProperty(exports, "__esModule", {
7
7
  exports.handleChangeDoorStyleEvent = handleChangeDoorStyleEvent;
8
8
  var _regenerator = _interopRequireDefault(require("@babel/runtime/regenerator"));
9
9
  var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator"));
10
+ function prepareMoldingCCDFList(doorStyle, moldingData) {
11
+ var moldingCCDFs = [];
12
+ for (var i = 0; i < moldingData.length; i++) {
13
+ var _molding$ccdf$catalog, _molding$ccdf, _molding$ccdf$cabinet, _molding$ccdf2, _doorStyle$id, _molding$long_name;
14
+ var molding = moldingData[i];
15
+ moldingCCDFs.push({
16
+ sizeinfo: molding.sizeinfo,
17
+ catalog_cabinet_sku: (_molding$ccdf$catalog = molding === null || molding === void 0 || (_molding$ccdf = molding.ccdf) === null || _molding$ccdf === void 0 ? void 0 : _molding$ccdf.catalog_cabinet_sku) !== null && _molding$ccdf$catalog !== void 0 ? _molding$ccdf$catalog : molding.sku_number,
18
+ cabinet_id: (_molding$ccdf$cabinet = molding === null || molding === void 0 || (_molding$ccdf2 = molding.ccdf) === null || _molding$ccdf2 === void 0 ? void 0 : _molding$ccdf2.cabinet_id) !== null && _molding$ccdf$cabinet !== void 0 ? _molding$ccdf$cabinet : molding.itemID,
19
+ ccdf: molding.ccdf,
20
+ target_door_finish_id: (_doorStyle$id = doorStyle === null || doorStyle === void 0 ? void 0 : doorStyle.id) !== null && _doorStyle$id !== void 0 ? _doorStyle$id : null,
21
+ long_name: (_molding$long_name = molding === null || molding === void 0 ? void 0 : molding.long_name) !== null && _molding$long_name !== void 0 ? _molding$long_name : null,
22
+ id: molding.itemID
23
+ });
24
+ }
25
+ return moldingCCDFs;
26
+ }
10
27
  function handleChangeDoorStyleEvent(_x, _x2, _x3, _x4, _x5, _x6, _x7, _x8, _x9, _x0, _x1, _x10) {
11
28
  return _handleChangeDoorStyleEvent.apply(this, arguments);
12
29
  }
13
30
  function _handleChangeDoorStyleEvent() {
14
31
  _handleChangeDoorStyleEvent = (0, _asyncToGenerator2["default"])(/*#__PURE__*/_regenerator["default"].mark(function _callee2(props, state, layer, payload, DOORSTYLE_SCOPE_SINGLE, DOORSTYLE_SCOPE_MULTIPLE, DOORSTYLE_SCOPE_ALL, INTERNAL_EVENT_ITEMS_CATALOG, mapFromCCDFToCDS, ccdfMapper, mergeSameElements, addItemToCatalog) {
15
- var doorStyle, applyScope, _payload$itemIds, itemIds, itemCDS, layerId, allItems, targetItems, idSet, selectedItemIds, ccdf_list, _loop, i, _props$onInternalEven, _t;
32
+ var doorStyle, applyScope, _payload$itemIds, itemIds, itemCDS, layerId, allItems, moldingData, targetItems, idSet, selectedItemIds, ccdf_list, _loop, i, moldingCCDFList, _props$onInternalEven, _t;
16
33
  return _regenerator["default"].wrap(function (_context3) {
17
34
  while (1) switch (_context3.prev = _context3.next) {
18
35
  case 0:
@@ -20,6 +37,7 @@ function _handleChangeDoorStyleEvent() {
20
37
  itemCDS = [];
21
38
  layerId = state.getIn(['scene', 'selectedLayer']);
22
39
  allItems = state.getIn(['scene', 'layers', layerId, 'items']).toJS();
40
+ moldingData = state.getIn(['scene', 'layers', layerId, 'molding']);
23
41
  targetItems = []; // Prepare idSet for SINGLE or MULTIPLE
24
42
  idSet = null;
25
43
  if (applyScope === DOORSTYLE_SCOPE_SINGLE) {
@@ -47,7 +65,7 @@ function _handleChangeDoorStyleEvent() {
47
65
  case 4:
48
66
  ccdf_list = [];
49
67
  _loop = /*#__PURE__*/_regenerator["default"].mark(function _loop() {
50
- var item, _item$ccdf$catalog_ca, _item$ccdf, _item$ccdf$cabinet_id, _item$ccdf2, _doorStyle$id2, _item$long_name;
68
+ var item, _item$ccdf$catalog_ca, _item$ccdf, _item$ccdf$cabinet_id, _item$ccdf2, _doorStyle$id3, _item$long_name;
51
69
  return _regenerator["default"].wrap(function (_context2) {
52
70
  while (1) switch (_context2.prev = _context2.next) {
53
71
  case 0:
@@ -61,7 +79,7 @@ function _handleChangeDoorStyleEvent() {
61
79
  catalog_cabinet_sku: (_item$ccdf$catalog_ca = item === null || item === void 0 || (_item$ccdf = item.ccdf) === null || _item$ccdf === void 0 ? void 0 : _item$ccdf.catalog_cabinet_sku) !== null && _item$ccdf$catalog_ca !== void 0 ? _item$ccdf$catalog_ca : item.sku_number,
62
80
  cabinet_id: (_item$ccdf$cabinet_id = item === null || item === void 0 || (_item$ccdf2 = item.ccdf) === null || _item$ccdf2 === void 0 ? void 0 : _item$ccdf2.cabinet_id) !== null && _item$ccdf$cabinet_id !== void 0 ? _item$ccdf$cabinet_id : null,
63
81
  ccdf: item.ccdf,
64
- target_door_finish_id: (_doorStyle$id2 = doorStyle === null || doorStyle === void 0 ? void 0 : doorStyle.id) !== null && _doorStyle$id2 !== void 0 ? _doorStyle$id2 : null,
82
+ target_door_finish_id: (_doorStyle$id3 = doorStyle === null || doorStyle === void 0 ? void 0 : doorStyle.id) !== null && _doorStyle$id3 !== void 0 ? _doorStyle$id3 : null,
65
83
  long_name: (_item$long_name = item === null || item === void 0 ? void 0 : item.long_name) !== null && _item$long_name !== void 0 ? _item$long_name : null,
66
84
  scene_cabinet_id: item.id
67
85
  });
@@ -84,19 +102,21 @@ function _handleChangeDoorStyleEvent() {
84
102
  _context3.next = 5;
85
103
  break;
86
104
  case 7:
105
+ moldingCCDFList = prepareMoldingCCDFList(doorStyle, moldingData);
87
106
  if (ccdf_list.length > 0) {
88
107
  (_props$onInternalEven = props.onInternalEvent) === null || _props$onInternalEven === void 0 || _props$onInternalEven.call(props, {
89
108
  type: INTERNAL_EVENT_ITEMS_CATALOG,
90
109
  value: {
91
110
  event_type: 'change_door_style',
92
- ccdf_list: ccdf_list
111
+ ccdf_list: ccdf_list,
112
+ molding_ccdf_list: moldingCCDFList
93
113
  }
94
114
  },
95
115
  /*#__PURE__*/
96
116
  // result is ccdf_list
97
117
  function () {
98
118
  var _ref = (0, _asyncToGenerator2["default"])(/*#__PURE__*/_regenerator["default"].mark(function _callee(result) {
99
- var _result$ccdf_list, _doorStyle$id;
119
+ var _result$ccdf_list, _doorStyle$id2, _result$molding_ccdf_;
100
120
  var mappedCabinetDefinitionList, rt, _i;
101
121
  return _regenerator["default"].wrap(function (_context) {
102
122
  while (1) switch (_context.prev = _context.next) {
@@ -104,7 +124,7 @@ function _handleChangeDoorStyleEvent() {
104
124
  // Map CCDF rows back to placed items using stable identity (long_name),
105
125
  // because host `cabinet_id` can vary by doorstyle.
106
126
  itemCDS = mapFromCCDFToCDS(result === null || result === void 0 ? void 0 : result.ccdf_list, targetItems);
107
- mappedCabinetDefinitionList = ccdfMapper(result.ccdf_list, layer); // result: ccdf_list
127
+ mappedCabinetDefinitionList = ccdfMapper(result === null || result === void 0 ? void 0 : result.ccdf_list, layer); // result: ccdf_list
108
128
  rt = mergeSameElements(mappedCabinetDefinitionList);
109
129
  _i = 0;
110
130
  case 1:
@@ -122,7 +142,8 @@ function _handleChangeDoorStyleEvent() {
122
142
  // Persist ccdf on affected instances so SYNC includes the latest ccdf.id for each item.
123
143
  // IMPORTANT: host response `ccdf_list[]` may not include `door_finish_id`.
124
144
  // Use request door_finish_id (doorStyle.id) as the source of truth for door_finish_id.
125
- props.itemsActions.setItemsCCDF((_result$ccdf_list = result === null || result === void 0 ? void 0 : result.ccdf_list) !== null && _result$ccdf_list !== void 0 ? _result$ccdf_list : [], applyScope, itemIds, (_doorStyle$id = doorStyle === null || doorStyle === void 0 ? void 0 : doorStyle.id) !== null && _doorStyle$id !== void 0 ? _doorStyle$id : null);
145
+ props.itemsActions.setItemsCCDF((_result$ccdf_list = result === null || result === void 0 ? void 0 : result.ccdf_list) !== null && _result$ccdf_list !== void 0 ? _result$ccdf_list : [], applyScope, itemIds, (_doorStyle$id2 = doorStyle === null || doorStyle === void 0 ? void 0 : doorStyle.id) !== null && _doorStyle$id2 !== void 0 ? _doorStyle$id2 : null);
146
+ props.itemsActions.setMoldingsCCDF((_result$molding_ccdf_ = result === null || result === void 0 ? void 0 : result.molding_ccdf_list) !== null && _result$molding_ccdf_ !== void 0 ? _result$molding_ccdf_ : [], applyScope);
126
147
  props.itemsActions.setDoorStyle(doorStyle, itemCDS, applyScope, itemIds);
127
148
  case 4:
128
149
  case "end":
@@ -5,6 +5,8 @@ Object.defineProperty(exports, "__esModule", {
5
5
  });
6
6
  exports.handleDeleteElement = handleDeleteElement;
7
7
  exports.handleDuplicateElement = handleDuplicateElement;
8
+ exports.handleMirrorElement = handleMirrorElement;
9
+ var _cabinetMirror = require("../../shared/domain/cabinet-mirror");
8
10
  function handleDuplicateElement(props, getElement, payload, state) {
9
11
  var distElement = getElement(payload, state);
10
12
  if (distElement) props.itemsActions.duplicateSelected(distElement, props.onInternalEvent);
@@ -12,4 +14,11 @@ function handleDuplicateElement(props, getElement, payload, state) {
12
14
  function handleDeleteElement(props, getElement, payload, state) {
13
15
  var distElement = getElement(payload, state);
14
16
  if (distElement) props.projectActions.remove(distElement);
17
+ }
18
+ function handleMirrorElement(props, getElement, payload, state) {
19
+ var distElement = getElement(payload, state);
20
+ if (!distElement || distElement.prototype !== 'items' || !(0, _cabinetMirror.canMirrorCabinet)(distElement)) return;
21
+ var layerID = state.getIn(['scene', 'selectedLayer']);
22
+ var mirrored = typeof (payload === null || payload === void 0 ? void 0 : payload.mirrored) === 'boolean' ? payload.mirrored : null;
23
+ props.itemsActions.toggleItemMirror(layerID, distElement.id, mirrored, props.onInternalEvent);
15
24
  }
@@ -9,10 +9,10 @@ var _helper = require("../../utils/helper");
9
9
  var _addItemMapper = require("./mappers/addItemMapper");
10
10
  var _changeDoorStyleMapper = require("./mappers/changeDoorStyleMapper");
11
11
  var _loadProjectMapper = require("./mappers/loadProjectMapper");
12
- /**
13
- * Main dispatcher for external event payload mapping.
14
- * Converts new API formats into legacy internal formats (e.g. assets3d -> structure_json)
15
- * without changing the behavior of the existing 3D tool.
12
+ /**
13
+ * Main dispatcher for external event payload mapping.
14
+ * Converts new API formats into legacy internal formats (e.g. assets3d -> structure_json)
15
+ * without changing the behavior of the existing 3D tool.
16
16
  */
17
17
  function mapExternalEventPayload(evt, state, defaultTextures) {
18
18
  if ((0, _helper.isEmpty)(evt)) return null;
@@ -11,15 +11,15 @@ var _constants = require("../../../constants");
11
11
  var _helper = require("../../../utils/helper");
12
12
  function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
13
13
  function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { (0, _defineProperty2["default"])(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
14
- /**
15
- * Mapping logic for EXTERNAL_EVENT_ADD_ITEM.
16
- *
17
- * Converts the new assets3d payload shape into the legacy structure_json format
18
- * expected by the existing 3D tool.
19
- *
20
- * @param {Object} evt.payload External event payload
21
- * @param {Immutable.Map} state Planner state
22
- * @returns {Object|null} Updated event (or null when payload is empty)
14
+ /**
15
+ * Mapping logic for EXTERNAL_EVENT_ADD_ITEM.
16
+ *
17
+ * Converts the new assets3d payload shape into the legacy structure_json format
18
+ * expected by the existing 3D tool.
19
+ *
20
+ * @param {Object} evt.payload External event payload
21
+ * @param {Immutable.Map} state Planner state
22
+ * @returns {Object|null} Updated event (or null when payload is empty)
23
23
  */
24
24
  function mapAddItemEvent(orgEvtPayload, state) {
25
25
  var _evtPayload, _evtPayload3;
@@ -77,7 +77,7 @@ function ccdfMapper(ccdf_list, layer) {
77
77
  });
78
78
  }
79
79
  // make structure_json
80
- if (cd.category === 'cabinet' || cd.category === 'Base' /* TEMP fix: DIY-973, 'Base' should have not been set in 'category' */) structure_json = {
80
+ if (cd.category === 'cabinet' || cd.category === 'Base') structure_json = {
81
81
  tempPlaceholders: tempPlaceholders
82
82
  };else structure_json = structure;
83
83
  // make cabinet definition using structure_json and catalog
package/lib/models.js CHANGED
@@ -215,6 +215,8 @@ var Item = exports.Item = /*#__PURE__*/function (_Record7) {
215
215
  uri: ''
216
216
  },
217
217
  molding: [],
218
+ can_be_mirrored: false,
219
+ mirrored: false,
218
220
  isInitialPos: false,
219
221
  //current {x,y} is the initial position from host?
220
222
  backsplashVisible: false,
@@ -363,6 +365,8 @@ var CatalogElement = exports.CatalogElement = /*#__PURE__*/function (_Record1) {
363
365
  type: '',
364
366
  cds: new _immutable.Map(),
365
367
  ccdf_list: new _immutable.List(),
368
+ can_be_mirrored: false,
369
+ mirrored: false,
366
370
  structure_json: {},
367
371
  gltf: ''
368
372
  }, 'CatalogElement'));
@@ -6,6 +6,7 @@ Object.defineProperty(exports, "__esModule", {
6
6
  exports["default"] = _default;
7
7
  var _export = require("../class/export");
8
8
  var _export2 = require("../utils/export");
9
+ var _cabinetMirror = require("../shared/domain/cabinet-mirror");
9
10
  var _constants = require("../constants");
10
11
  function _default(state, action) {
11
12
  switch (action.type) {
@@ -21,6 +22,12 @@ function _default(state, action) {
21
22
  return _export.Item.editWidth(state, action.newWidth, action.layerID, action.itemID).updatedState;
22
23
  case _constants.DUPLICATE_SELECTED:
23
24
  return _export.Item.duplicateSelected(state, action.currentObject, action.onInternalEvent).updatedState;
25
+ case _constants.TOGGLE_ITEM_MIRROR:
26
+ if (!(0, _cabinetMirror.canMirrorCabinet)(state.getIn(['scene', 'layers', action.layerID, 'items', action.itemID]))) return state;
27
+ state = state.merge({
28
+ sceneHistory: _export2.history.historyPush(state.sceneHistory, state.scene)
29
+ });
30
+ return _export.Item.toggleItemMirror(state, action.layerID, action.itemID, action.mirrored, action.onInternalEvent).updatedState;
24
31
  case _constants.END_CREATING_CABINET:
25
32
  return _export.Item.endCreatingCabinet(state).updatedState;
26
33
  case _constants.UPDATE_POPUP_OPEN:
@@ -139,6 +146,8 @@ function _default(state, action) {
139
146
  return _export.Item.setInitialDoorStyle(state, action.doorStyle).updatedState;
140
147
  case _constants.SET_ITEMS_CCDF:
141
148
  return _export.Item.setItemsCCDF(state, action.ccdf_list, action.applyScope, action.itemIds, action.doorFinishId).updatedState;
149
+ case _constants.SET_MOLDINGS_CCDF:
150
+ return _export.Item.setMoldingsCCDF(state, action.ccdf_list, action.applyScope).updatedState;
142
151
  case _constants.UPDATE_ITEM_POSITION:
143
152
  return _export.Item.updateItemPosition(state, action.layerID, action.itemID, action.pos).updatedState;
144
153
  // case SET_MOVE_STATUS:
@@ -4,11 +4,11 @@ Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
6
  exports.sanitizeAssetUrl = void 0;
7
- /**
8
- * Strip stray dots from the **path portion** of a GLTF/BIN URL.
9
- * e.g. `…/B36_36x34.5x24.gltf` → `…/B36_36x345x24.gltf`
10
- *
11
- * Leaves the protocol/domain and the final file extension untouched.
7
+ /**
8
+ * Strip stray dots from the **path portion** of a GLTF/BIN URL.
9
+ * e.g. `…/B36_36x34.5x24.gltf` → `…/B36_36x345x24.gltf`
10
+ *
11
+ * Leaves the protocol/domain and the final file extension untouched.
12
12
  */
13
13
  var sanitizeAssetUrl = exports.sanitizeAssetUrl = function sanitizeAssetUrl(url) {
14
14
  if (!url) return url;
@@ -0,0 +1,13 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.canMirrorCabinet = canMirrorCabinet;
7
+ var _constants = require("../../constants");
8
+ var _immutable = require("../objects/immutable");
9
+ function canMirrorCabinet(item) {
10
+ var js = (0, _immutable.toJSIfNeeded)(item);
11
+ var isCabinet = (js === null || js === void 0 ? void 0 : js.category) === _constants.ITEM_TYPE.CABINET || (js === null || js === void 0 ? void 0 : js.type) === _constants.ITEM_TYPE.CABINET;
12
+ return isCabinet && (js === null || js === void 0 ? void 0 : js.can_be_mirrored) === true;
13
+ }
@@ -1749,12 +1749,12 @@ function calcSnap2(allItemRect, allItemSnap, allLineRects, allLineSnap, allRect,
1749
1749
  }
1750
1750
  });
1751
1751
  }
1752
- if (allItemRect.cur.itemInfo.name.includes('Hood') || allItemRect.cur.itemInfo.name.includes('Range') || allItemRect.cur.itemInfo.name.includes('Cook Top')) {
1752
+ if (allItemRect.cur.itemInfo.name.includes('Hood') || allItemRect.cur.itemInfo.cabinet_category.toLowerCase().includes('hood') || allItemRect.cur.itemInfo.name.includes('Range') || allItemRect.cur.itemInfo.name.includes('Cook Top')) {
1753
1753
  var _intersects = allItemRect.others.filter(function (others) {
1754
1754
  return intersectRect(others.rect, curitem.rect);
1755
1755
  });
1756
1756
  _intersects.forEach(function (rect) {
1757
- if (isPointInArea(allArea, rect.itemInfo) || !allArea.length) if (rect.itemInfo.name.includes('Hood') || rect.itemInfo.name.includes('Range') || rect.itemInfo.name.includes('Cook Top')) {
1757
+ if (isPointInArea(allArea, rect.itemInfo) || !allArea.length) if (rect.itemInfo.name.includes('Hood') || rect.itemInfo.cabinet_category.toLowerCase().includes('hood') || rect.itemInfo.name.includes('Range') || rect.itemInfo.name.includes('Cook Top')) {
1758
1758
  nx = rect.itemInfo.x;
1759
1759
  ny = rect.itemInfo.y;
1760
1760
  rotRad = rect.itemInfo.rotation * Math.PI / 180;
@@ -2140,9 +2140,11 @@ function needSnap(curItem, othItem) {
2140
2140
  var delta;
2141
2141
  curFloor > otherFloor ? delta = otherItem.height : delta = currentItem.height;
2142
2142
  if (Math.abs(curFloor - otherFloor) < delta) blSnap = true;
2143
+ var isBlsnapOth = othItem.item.category === 'cabinet' && othItem.item.layoutpos === _constants.BASE_CABINET_LAYOUTPOS && Math.abs(curFloor - otherFloor) >= delta;
2144
+ var isBlsnapCur = curItem.selectedItem.category === 'cabinet' && curItem.selectedItem.layoutpos === _constants.BASE_CABINET_LAYOUTPOS && Math.abs(curFloor - otherFloor) >= delta;
2143
2145
  if (curItem.cat.hasOwnProperty('long_name') || othItem.cat && othItem.cat.hasOwnProperty('long_name')) {
2144
2146
  if (curItem.cat.long_name.includes('Hood') || othItem.cat && othItem.cat.long_name.includes('Hood')) blSnap = true;
2145
- if (curItem.cat.long_name.includes('Hood') && othItem.cat && othItem.cat.long_name.includes('Base Cabinet') || curItem.cat.long_name.includes('Base Cabinet') && othItem.cat && othItem.cat.long_name.includes('Hood')) blSnap = false;
2147
+ if (curItem.cat.long_name.includes('Hood') && othItem.cat && isBlsnapOth || isBlsnapCur && othItem.cat.long_name.includes('Hood')) blSnap = false;
2146
2148
  if (curItem.cat.long_name.includes('Cook Top') && othItem.cat && othItem.cat.long_name.includes('Cabinet') || curItem.cat.long_name.includes('Cabinet') && othItem.cat && othItem.cat.long_name.includes('Cook Top')) blSnap = true;
2147
2149
  }
2148
2150
  return blSnap;
@@ -145,10 +145,10 @@ function isSnappedWithCornerCabient(srcItem, desItem) {
145
145
  } else return false;
146
146
  }
147
147
 
148
- /**
149
- * @param {*} faceSegs
150
- * @param {*} otherFaces
151
- * @returns
148
+ /**
149
+ * @param {*} faceSegs
150
+ * @param {*} otherFaces
151
+ * @returns
152
152
  */
153
153
  function getTrimmedFaceSegs(faceSegs, otherFaces, cnt) {
154
154
  try {
@@ -309,8 +309,8 @@ function applyGroupingRules(faces) {
309
309
  };
310
310
  }
311
311
 
312
- /**
313
- * Horizontal Grouping (for base cabinets back-to-back : BSV48 48" x 34.5")
312
+ /**
313
+ * Horizontal Grouping (for base cabinets back-to-back : BSV48 48" x 34.5")
314
314
  */
315
315
  function applyHorizontalGrouping(faces) {
316
316
  var removeIdxs = [];
@@ -352,8 +352,8 @@ function applyHorizontalGrouping(faces) {
352
352
  };
353
353
  }
354
354
 
355
- /**
356
- * Vertical Grouping (For CT3DR or CT2DR SKUs + stacked wall cabinets)
355
+ /**
356
+ * Vertical Grouping (For CT3DR or CT2DR SKUs + stacked wall cabinets)
357
357
  */
358
358
  function applyVerticalGrouping(faces) {
359
359
  var removeIdxs = [];
@@ -444,8 +444,8 @@ function buildMP3SkinPanelArray(bottomHeight, topHeight, mp3SkinPanelArray) {
444
444
  return skinPanelTypeArray;
445
445
  }
446
446
 
447
- /**
448
- * Decide which skin panel pieces are needed for a tall cabinet.
447
+ /**
448
+ * Decide which skin panel pieces are needed for a tall cabinet.
449
449
  */
450
450
  function resolveTallCabinetBundle(face) {
451
451
  var item = face.itemInfo;
@@ -465,8 +465,8 @@ function resolveTallCabinetBundle(face) {
465
465
  return face !== null && face !== void 0 && face.skinPanelSKU ? [face.skinPanelSKU] : [];
466
466
  }
467
467
 
468
- /**
469
- * Converts a face → list of SKUs
468
+ /**
469
+ * Converts a face → list of SKUs
470
470
  */
471
471
  function resolveSkinPanelSKU(face) {
472
472
  var layout = face.itemInfo.layoutpos;
@@ -476,8 +476,8 @@ function resolveSkinPanelSKU(face) {
476
476
  return [face.skinPanelSKU];
477
477
  }
478
478
 
479
- /**
480
- * Make skin panel data with grouping skinPanelSKU & doorStyle
479
+ /**
480
+ * Make skin panel data with grouping skinPanelSKU & doorStyle
481
481
  */
482
482
  function buildSkinPanelData(faces) {
483
483
  var tempResult = [];
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "kitchen-simulator",
3
- "version": "11.27.0",
3
+ "version": "11.28.2",
4
4
  "description": "It is a kitchen simulator (self-contained micro-frontend).",
5
5
  "license": "MIT",
6
6
  "main": "lib/index.js",