kitchen-simulator 10.0.4 → 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,
@@ -1,4 +1,7 @@
1
+ import _defineProperty from "@babel/runtime/helpers/esm/defineProperty";
1
2
  import _asyncToGenerator from "@babel/runtime/helpers/esm/asyncToGenerator";
3
+ 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; }
4
+ 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) { _defineProperty(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; }
2
5
  import _regeneratorRuntime from "@babel/runtime/regenerator";
3
6
  export function handleChangeDoorStyleEvent(_x, _x2, _x3, _x4, _x5, _x6, _x7, _x8, _x9, _x0, _x1, _x10) {
4
7
  return _handleChangeDoorStyleEvent.apply(this, arguments);
@@ -48,15 +51,7 @@ function _handleChangeDoorStyleEvent() {
48
51
  if (!ccdf_list.some(function (v) {
49
52
  return item.itemID === v.itemID && item.name === v.name && doorStyle.id === v.doorFinishId;
50
53
  })) {
51
- ccdf_list.push({
52
- itemID: item.itemID,
53
- prototype: item.prototype,
54
- category: item.category,
55
- name: item.name,
56
- type: item.type,
57
- sku_number: item.sku_number,
58
- doorFinishId: doorStyle.id
59
- });
54
+ ccdf_list.push(_objectSpread({}, item));
60
55
  }
61
56
  case 1:
62
57
  case "end":
@@ -87,7 +82,8 @@ function _handleChangeDoorStyleEvent() {
87
82
  // result is ccdf_list
88
83
  function () {
89
84
  var _ref = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime.mark(function _callee(result) {
90
- var mappedCabinetDefinitionList, rt, _i, _result$ccdf_list, _doorStyle$id;
85
+ var _result$ccdf_list, _doorStyle$id;
86
+ var mappedCabinetDefinitionList, rt, _i;
91
87
  return _regeneratorRuntime.wrap(function (_context) {
92
88
  while (1) switch (_context.prev = _context.next) {
93
89
  case 0:
@@ -107,14 +103,10 @@ function _handleChangeDoorStyleEvent() {
107
103
  _context.next = 1;
108
104
  break;
109
105
  case 3:
110
- // 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.
111
107
  // IMPORTANT: host response `ccdf_list[]` may not include `door_finish_id`.
112
- // Use request doorFinishId (doorStyle.id) as source of truth.
113
- try {
114
- 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);
115
- } catch (e) {
116
- // best-effort only
117
- }
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);
118
110
  props.itemsActions.setDoorStyle(doorStyle, itemCDS, applyScope, itemIds);
119
111
  case 4:
120
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,
@@ -6,7 +6,10 @@ Object.defineProperty(exports, "__esModule", {
6
6
  });
7
7
  exports.handleChangeDoorStyleEvent = handleChangeDoorStyleEvent;
8
8
  var _regenerator = _interopRequireDefault(require("@babel/runtime/regenerator"));
9
+ var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
9
10
  var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator"));
11
+ 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; }
12
+ 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; }
10
13
  function handleChangeDoorStyleEvent(_x, _x2, _x3, _x4, _x5, _x6, _x7, _x8, _x9, _x0, _x1, _x10) {
11
14
  return _handleChangeDoorStyleEvent.apply(this, arguments);
12
15
  }
@@ -55,15 +58,7 @@ function _handleChangeDoorStyleEvent() {
55
58
  if (!ccdf_list.some(function (v) {
56
59
  return item.itemID === v.itemID && item.name === v.name && doorStyle.id === v.doorFinishId;
57
60
  })) {
58
- ccdf_list.push({
59
- itemID: item.itemID,
60
- prototype: item.prototype,
61
- category: item.category,
62
- name: item.name,
63
- type: item.type,
64
- sku_number: item.sku_number,
65
- doorFinishId: doorStyle.id
66
- });
61
+ ccdf_list.push(_objectSpread({}, item));
67
62
  }
68
63
  case 1:
69
64
  case "end":
@@ -94,7 +89,8 @@ function _handleChangeDoorStyleEvent() {
94
89
  // result is ccdf_list
95
90
  function () {
96
91
  var _ref = (0, _asyncToGenerator2["default"])(/*#__PURE__*/_regenerator["default"].mark(function _callee(result) {
97
- var mappedCabinetDefinitionList, rt, _i, _result$ccdf_list, _doorStyle$id;
92
+ var _result$ccdf_list, _doorStyle$id;
93
+ var mappedCabinetDefinitionList, rt, _i;
98
94
  return _regenerator["default"].wrap(function (_context) {
99
95
  while (1) switch (_context.prev = _context.next) {
100
96
  case 0:
@@ -114,14 +110,10 @@ function _handleChangeDoorStyleEvent() {
114
110
  _context.next = 1;
115
111
  break;
116
112
  case 3:
117
- // 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.
118
114
  // IMPORTANT: host response `ccdf_list[]` may not include `door_finish_id`.
119
- // Use request doorFinishId (doorStyle.id) as source of truth.
120
- try {
121
- 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);
122
- } catch (e) {
123
- // best-effort only
124
- }
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);
125
117
  props.itemsActions.setDoorStyle(doorStyle, itemCDS, applyScope, itemIds);
126
118
  case 4:
127
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.4",
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",