kitchen-simulator 10.0.6 → 10.0.7

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/es/class/item.js CHANGED
@@ -272,7 +272,7 @@ var Item = /*#__PURE__*/function () {
272
272
  var should = applyScope === DOORSTYLE_SCOPE_ALL ? true : (_idSet = idSet) === null || _idSet === void 0 ? void 0 : _idSet.has(it.id);
273
273
  if (!should) return;
274
274
  var picked = ccdf_list.find(function (c) {
275
- return (c === null || c === void 0 ? void 0 : c.cabinet_id) == null || (c === null || c === void 0 ? void 0 : c.cabinet_id) === it.itemID;
275
+ return (c === null || c === void 0 ? void 0 : c.cabinet_id) === it.itemID;
276
276
  });
277
277
  if (!picked) return;
278
278
  state = state.setIn(['scene', 'layers', layerID, 'items', it.id, 'ccdf'], _objectSpread(_objectSpread({}, picked), {}, {
package/es/constants.js CHANGED
@@ -317,7 +317,8 @@ export var ITEMS_ACTIONS = {
317
317
  END_LOADING: END_LOADING,
318
318
  STORE_DIST_ARRAY: STORE_DIST_ARRAY,
319
319
  VALIDATE_ITEM_POSTIONS: VALIDATE_ITEM_POSTIONS,
320
- REPLACE_ITEM: REPLACE_ITEM
320
+ REPLACE_ITEM: REPLACE_ITEM,
321
+ SET_ITEMS_CCDF: SET_ITEMS_CCDF
321
322
  };
322
323
  export var HOLE_ACTIONS = {
323
324
  SELECT_HOLE: SELECT_HOLE,
@@ -51,15 +51,7 @@ function _handleChangeDoorStyleEvent() {
51
51
  if (!ccdf_list.some(function (v) {
52
52
  return item.itemID === v.itemID && item.name === v.name && doorStyle.id === v.doorFinishId;
53
53
  })) {
54
- ccdf_list.push(_objectSpread(_objectSpread({}, item), {}, {
55
- itemID: item.itemID,
56
- prototype: item.prototype,
57
- category: item.category,
58
- name: item.name,
59
- type: item.type,
60
- sku_number: item.sku_number,
61
- doorFinishId: doorStyle.id
62
- }));
54
+ ccdf_list.push(_objectSpread({}, item));
63
55
  }
64
56
  case 1:
65
57
  case "end":
@@ -90,7 +82,8 @@ function _handleChangeDoorStyleEvent() {
90
82
  // result is ccdf_list
91
83
  function () {
92
84
  var _ref = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime.mark(function _callee(result) {
93
- var mappedCabinetDefinitionList, rt, _i, _result$ccdf_list, _doorStyle$id;
85
+ var _result$ccdf_list, _doorStyle$id;
86
+ var mappedCabinetDefinitionList, rt, _i;
94
87
  return _regeneratorRuntime.wrap(function (_context) {
95
88
  while (1) switch (_context.prev = _context.next) {
96
89
  case 0:
@@ -110,14 +103,10 @@ function _handleChangeDoorStyleEvent() {
110
103
  _context.next = 1;
111
104
  break;
112
105
  case 3:
113
- // Persist ccdf on affected instances so SYNC includes ccdf.id for each item.
106
+ // Persist ccdf on affected instances so SYNC includes the latest ccdf.id for each item.
114
107
  // IMPORTANT: host response `ccdf_list[]` may not include `door_finish_id`.
115
- // Use request doorFinishId (doorStyle.id) as source of truth.
116
- try {
117
- 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);
118
- } catch (e) {
119
- // best-effort only
120
- }
108
+ // Use request doorFinishId (doorStyle.id) as the source of truth for door_finish_id.
109
+ 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);
121
110
  props.itemsActions.setDoorStyle(doorStyle, itemCDS, applyScope, itemIds);
122
111
  case 4:
123
112
  case "end":
@@ -55,7 +55,7 @@ function _handleLoadProjectEvent() {
55
55
  }, /*#__PURE__*/function () {
56
56
  var _ref = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime.mark(function _callee(result) {
57
57
  var _evt$payload2;
58
- var cdsList, _result$ccdf_list, ccdfList, doorFinishIdByCabinetId, cabinetDefinitionList, rt, i;
58
+ var cdsList, _result$ccdf_list, resp, cabinetDefinitionList, rt, i;
59
59
  return _regeneratorRuntime.wrap(function (_context) {
60
60
  while (1) switch (_context.prev = _context.next) {
61
61
  case 0:
@@ -67,23 +67,19 @@ function _handleLoadProjectEvent() {
67
67
  // IMPORTANT: host response `ccdf_list[]` may not include `door_finish_id`.
68
68
  // Use request payload (`ccdf_list[].doorFinishId`) as door_finish_id source.
69
69
  try {
70
- ccdfList = (_result$ccdf_list = result === null || result === void 0 ? void 0 : result.ccdf_list) !== null && _result$ccdf_list !== void 0 ? _result$ccdf_list : [];
71
- doorFinishIdByCabinetId = new Map(ccdf_list.filter(function (x) {
72
- return (x === null || x === void 0 ? void 0 : x.itemID) != null && (x === null || x === void 0 ? void 0 : x.doorFinishId) != null;
73
- }).map(function (x) {
74
- return [x.itemID, x.doorFinishId];
75
- }));
70
+ resp = (_result$ccdf_list = result === null || result === void 0 ? void 0 : result.ccdf_list) !== null && _result$ccdf_list !== void 0 ? _result$ccdf_list : [];
76
71
  Object.keys(items).forEach(function (k) {
77
- var _ref2, _it$doorStyle$id, _it$doorStyle3;
72
+ var _it$doorStyle$id, _it$doorStyle3;
78
73
  var it = items[k];
79
- var desiredDoorFinishId = (_ref2 = (_it$doorStyle$id = it === null || it === void 0 || (_it$doorStyle3 = it.doorStyle) === null || _it$doorStyle3 === void 0 ? void 0 : _it$doorStyle3.id) !== null && _it$doorStyle$id !== void 0 ? _it$doorStyle$id : doorFinishIdByCabinetId.get(it.itemID)) !== null && _ref2 !== void 0 ? _ref2 : null; // door_finish_id
74
+ var desiredDoorFinishId = (_it$doorStyle$id = it === null || it === void 0 || (_it$doorStyle3 = it.doorStyle) === null || _it$doorStyle3 === void 0 ? void 0 : _it$doorStyle3.id) !== null && _it$doorStyle$id !== void 0 ? _it$doorStyle$id : null;
80
75
  if (!desiredDoorFinishId) return;
81
- var matched = ccdfList.find(function (c) {
76
+ var picked = resp.find(function (c) {
82
77
  return (c === null || c === void 0 ? void 0 : c.cabinet_id) === it.itemID;
83
78
  });
84
- if (matched) {
85
- it.ccdf = _objectSpread(_objectSpread({}, matched), {}, {
86
- door_finish_id: desiredDoorFinishId
79
+ if (picked) {
80
+ var _picked$door_finish_i;
81
+ it.ccdf = _objectSpread(_objectSpread({}, picked), {}, {
82
+ door_finish_id: (_picked$door_finish_i = picked === null || picked === void 0 ? void 0 : picked.door_finish_id) !== null && _picked$door_finish_i !== void 0 ? _picked$door_finish_i : desiredDoorFinishId
87
83
  });
88
84
  }
89
85
  });
@@ -6,13 +6,17 @@ export function ccdfMapper(ccdf_list, layer) {
6
6
  // console.log(ccdf_list, catalog);
7
7
  // make structure_json list using ccdf-list
8
8
  var cabinetDefinitionList = [];
9
- var tempPlaceholders = [];
10
- var structure = {};
11
- var cdfId;
12
- var structure_json = {};
13
- var cabinetDefinition = {};
14
9
  var layerJS = toJSIfNeeded(layer);
15
10
  ccdf_list === null || ccdf_list === void 0 || ccdf_list.forEach(function (ccdf) {
11
+ // IMPORTANT: DIY-834-43
12
+ // Each CCDF row must produce its own independent structure/tempPlaceholders objects.
13
+ // Reusing the same object across iterations causes cross-cabinet mutation bugs
14
+ // (e.g. B12's `structure.base` being overwritten by W1218's gltf).
15
+ var tempPlaceholders = [];
16
+ var structure = {};
17
+ var cdfId;
18
+ var structure_json = {};
19
+ var cabinetDefinition = {};
16
20
  var itemKeys = Object.keys(layerJS.items);
17
21
  var correctItemId = '';
18
22
  for (var i = 0; i < itemKeys.length; i++) {
@@ -2,9 +2,12 @@ import { isEmpty } from "../../../components/viewer2d/utils";
2
2
  export function mapFromCCDFToCDS(ccdf_list) {
3
3
  // This function make CDS from CCDF_List
4
4
  var itemCDSList = [];
5
- var itemCDSData = {};
6
- var cabitnetDoorStyleId;
7
5
  ccdf_list === null || ccdf_list === void 0 || ccdf_list.forEach(function (asItem) {
6
+ // IMPORTANT: DIY-834-43
7
+ // `itemCDSData` must be recreated per asItem. Reusing it across iterations
8
+ // can leak one cabinet's door/drawer mappings into another.
9
+ var itemCDSData = {};
10
+ var cabitnetDoorStyleId;
8
11
  if (!isEmpty(asItem === null || asItem === void 0 ? void 0 : asItem.id)) {
9
12
  cabitnetDoorStyleId = asItem.id;
10
13
  }
package/lib/class/item.js CHANGED
@@ -279,7 +279,7 @@ var Item = exports["default"] = /*#__PURE__*/function () {
279
279
  var should = applyScope === _constants.DOORSTYLE_SCOPE_ALL ? true : (_idSet = idSet) === null || _idSet === void 0 ? void 0 : _idSet.has(it.id);
280
280
  if (!should) return;
281
281
  var picked = ccdf_list.find(function (c) {
282
- return (c === null || c === void 0 ? void 0 : c.cabinet_id) == null || (c === null || c === void 0 ? void 0 : c.cabinet_id) === it.itemID;
282
+ return (c === null || c === void 0 ? void 0 : c.cabinet_id) === it.itemID;
283
283
  });
284
284
  if (!picked) return;
285
285
  state = state.setIn(['scene', 'layers', layerID, 'items', it.id, 'ccdf'], _objectSpread(_objectSpread({}, picked), {}, {
package/lib/constants.js CHANGED
@@ -327,7 +327,8 @@ var ITEMS_ACTIONS = exports.ITEMS_ACTIONS = {
327
327
  END_LOADING: END_LOADING,
328
328
  STORE_DIST_ARRAY: STORE_DIST_ARRAY,
329
329
  VALIDATE_ITEM_POSTIONS: VALIDATE_ITEM_POSTIONS,
330
- REPLACE_ITEM: REPLACE_ITEM
330
+ REPLACE_ITEM: REPLACE_ITEM,
331
+ SET_ITEMS_CCDF: SET_ITEMS_CCDF
331
332
  };
332
333
  var HOLE_ACTIONS = exports.HOLE_ACTIONS = {
333
334
  SELECT_HOLE: SELECT_HOLE,
@@ -58,15 +58,7 @@ function _handleChangeDoorStyleEvent() {
58
58
  if (!ccdf_list.some(function (v) {
59
59
  return item.itemID === v.itemID && item.name === v.name && doorStyle.id === v.doorFinishId;
60
60
  })) {
61
- ccdf_list.push(_objectSpread(_objectSpread({}, item), {}, {
62
- itemID: item.itemID,
63
- prototype: item.prototype,
64
- category: item.category,
65
- name: item.name,
66
- type: item.type,
67
- sku_number: item.sku_number,
68
- doorFinishId: doorStyle.id
69
- }));
61
+ ccdf_list.push(_objectSpread({}, item));
70
62
  }
71
63
  case 1:
72
64
  case "end":
@@ -97,7 +89,8 @@ function _handleChangeDoorStyleEvent() {
97
89
  // result is ccdf_list
98
90
  function () {
99
91
  var _ref = (0, _asyncToGenerator2["default"])(/*#__PURE__*/_regenerator["default"].mark(function _callee(result) {
100
- var mappedCabinetDefinitionList, rt, _i, _result$ccdf_list, _doorStyle$id;
92
+ var _result$ccdf_list, _doorStyle$id;
93
+ var mappedCabinetDefinitionList, rt, _i;
101
94
  return _regenerator["default"].wrap(function (_context) {
102
95
  while (1) switch (_context.prev = _context.next) {
103
96
  case 0:
@@ -117,14 +110,10 @@ function _handleChangeDoorStyleEvent() {
117
110
  _context.next = 1;
118
111
  break;
119
112
  case 3:
120
- // Persist ccdf on affected instances so SYNC includes ccdf.id for each item.
113
+ // Persist ccdf on affected instances so SYNC includes the latest ccdf.id for each item.
121
114
  // IMPORTANT: host response `ccdf_list[]` may not include `door_finish_id`.
122
- // Use request doorFinishId (doorStyle.id) as source of truth.
123
- try {
124
- 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);
125
- } catch (e) {
126
- // best-effort only
127
- }
115
+ // Use request doorFinishId (doorStyle.id) as the source of truth for door_finish_id.
116
+ 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);
128
117
  props.itemsActions.setDoorStyle(doorStyle, itemCDS, applyScope, itemIds);
129
118
  case 4:
130
119
  case "end":
@@ -62,7 +62,7 @@ function _handleLoadProjectEvent() {
62
62
  }, /*#__PURE__*/function () {
63
63
  var _ref = (0, _asyncToGenerator2["default"])(/*#__PURE__*/_regenerator["default"].mark(function _callee(result) {
64
64
  var _evt$payload2;
65
- var cdsList, _result$ccdf_list, ccdfList, doorFinishIdByCabinetId, cabinetDefinitionList, rt, i;
65
+ var cdsList, _result$ccdf_list, resp, cabinetDefinitionList, rt, i;
66
66
  return _regenerator["default"].wrap(function (_context) {
67
67
  while (1) switch (_context.prev = _context.next) {
68
68
  case 0:
@@ -74,23 +74,19 @@ function _handleLoadProjectEvent() {
74
74
  // IMPORTANT: host response `ccdf_list[]` may not include `door_finish_id`.
75
75
  // Use request payload (`ccdf_list[].doorFinishId`) as door_finish_id source.
76
76
  try {
77
- ccdfList = (_result$ccdf_list = result === null || result === void 0 ? void 0 : result.ccdf_list) !== null && _result$ccdf_list !== void 0 ? _result$ccdf_list : [];
78
- doorFinishIdByCabinetId = new Map(ccdf_list.filter(function (x) {
79
- return (x === null || x === void 0 ? void 0 : x.itemID) != null && (x === null || x === void 0 ? void 0 : x.doorFinishId) != null;
80
- }).map(function (x) {
81
- return [x.itemID, x.doorFinishId];
82
- }));
77
+ resp = (_result$ccdf_list = result === null || result === void 0 ? void 0 : result.ccdf_list) !== null && _result$ccdf_list !== void 0 ? _result$ccdf_list : [];
83
78
  Object.keys(items).forEach(function (k) {
84
- var _ref2, _it$doorStyle$id, _it$doorStyle3;
79
+ var _it$doorStyle$id, _it$doorStyle3;
85
80
  var it = items[k];
86
- var desiredDoorFinishId = (_ref2 = (_it$doorStyle$id = it === null || it === void 0 || (_it$doorStyle3 = it.doorStyle) === null || _it$doorStyle3 === void 0 ? void 0 : _it$doorStyle3.id) !== null && _it$doorStyle$id !== void 0 ? _it$doorStyle$id : doorFinishIdByCabinetId.get(it.itemID)) !== null && _ref2 !== void 0 ? _ref2 : null; // door_finish_id
81
+ var desiredDoorFinishId = (_it$doorStyle$id = it === null || it === void 0 || (_it$doorStyle3 = it.doorStyle) === null || _it$doorStyle3 === void 0 ? void 0 : _it$doorStyle3.id) !== null && _it$doorStyle$id !== void 0 ? _it$doorStyle$id : null;
87
82
  if (!desiredDoorFinishId) return;
88
- var matched = ccdfList.find(function (c) {
83
+ var picked = resp.find(function (c) {
89
84
  return (c === null || c === void 0 ? void 0 : c.cabinet_id) === it.itemID;
90
85
  });
91
- if (matched) {
92
- it.ccdf = _objectSpread(_objectSpread({}, matched), {}, {
93
- door_finish_id: desiredDoorFinishId
86
+ if (picked) {
87
+ var _picked$door_finish_i;
88
+ it.ccdf = _objectSpread(_objectSpread({}, picked), {}, {
89
+ door_finish_id: (_picked$door_finish_i = picked === null || picked === void 0 ? void 0 : picked.door_finish_id) !== null && _picked$door_finish_i !== void 0 ? _picked$door_finish_i : desiredDoorFinishId
94
90
  });
95
91
  }
96
92
  });
@@ -13,13 +13,17 @@ function ccdfMapper(ccdf_list, layer) {
13
13
  // console.log(ccdf_list, catalog);
14
14
  // make structure_json list using ccdf-list
15
15
  var cabinetDefinitionList = [];
16
- var tempPlaceholders = [];
17
- var structure = {};
18
- var cdfId;
19
- var structure_json = {};
20
- var cabinetDefinition = {};
21
16
  var layerJS = (0, _immutable.toJSIfNeeded)(layer);
22
17
  ccdf_list === null || ccdf_list === void 0 || ccdf_list.forEach(function (ccdf) {
18
+ // IMPORTANT: DIY-834-43
19
+ // Each CCDF row must produce its own independent structure/tempPlaceholders objects.
20
+ // Reusing the same object across iterations causes cross-cabinet mutation bugs
21
+ // (e.g. B12's `structure.base` being overwritten by W1218's gltf).
22
+ var tempPlaceholders = [];
23
+ var structure = {};
24
+ var cdfId;
25
+ var structure_json = {};
26
+ var cabinetDefinition = {};
23
27
  var itemKeys = Object.keys(layerJS.items);
24
28
  var correctItemId = '';
25
29
  for (var i = 0; i < itemKeys.length; i++) {
@@ -8,9 +8,12 @@ var _utils = require("../../../components/viewer2d/utils");
8
8
  function mapFromCCDFToCDS(ccdf_list) {
9
9
  // This function make CDS from CCDF_List
10
10
  var itemCDSList = [];
11
- var itemCDSData = {};
12
- var cabitnetDoorStyleId;
13
11
  ccdf_list === null || ccdf_list === void 0 || ccdf_list.forEach(function (asItem) {
12
+ // IMPORTANT: DIY-834-43
13
+ // `itemCDSData` must be recreated per asItem. Reusing it across iterations
14
+ // can leak one cabinet's door/drawer mappings into another.
15
+ var itemCDSData = {};
16
+ var cabitnetDoorStyleId;
14
17
  if (!(0, _utils.isEmpty)(asItem === null || asItem === void 0 ? void 0 : asItem.id)) {
15
18
  cabitnetDoorStyleId = asItem.id;
16
19
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "kitchen-simulator",
3
- "version": "10.0.6",
3
+ "version": "10.0.7",
4
4
  "description": "It is a kitchen simulator (self-contained micro-frontend).",
5
5
  "license": "MIT",
6
6
  "main": "lib/index.js",