@2112-lab/central-plant 0.3.9 → 0.3.10
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/dist/bundle/index.js
CHANGED
|
@@ -37716,39 +37716,152 @@ var CentralPlantInternals = /*#__PURE__*/function () {
|
|
|
37716
37716
|
return false;
|
|
37717
37717
|
}
|
|
37718
37718
|
try {
|
|
37719
|
+
var _this$centralPlant$sc0, _this$centralPlant$sc1, _sceneData$scene2, _sceneData$scene3;
|
|
37719
37720
|
console.log("\uD83D\uDDD1\uFE0F deleteComponent(): Deleting component ".concat(componentId));
|
|
37721
|
+
var threeScene = (_this$centralPlant$sc0 = this.centralPlant.sceneViewer) === null || _this$centralPlant$sc0 === void 0 ? void 0 : _this$centralPlant$sc0.scene;
|
|
37722
|
+
var sceneData = (_this$centralPlant$sc1 = this.centralPlant.sceneViewer) === null || _this$centralPlant$sc1 === void 0 ? void 0 : _this$centralPlant$sc1.currentSceneData;
|
|
37723
|
+
|
|
37724
|
+
// Step 1: Resolve the actual Three.js UUID from componentId.
|
|
37725
|
+
// The UI emits object.name (e.g. "Pump (PUMP-1)") as the selection ID, but
|
|
37726
|
+
// sceneData.scene.children stores the raw uuid (e.g. "PUMP-1"). We must
|
|
37727
|
+
// find the live Three.js object first so we can use its true .uuid for all
|
|
37728
|
+
// sceneData lookups.
|
|
37729
|
+
var resolvedUuid = componentId;
|
|
37730
|
+
if (threeScene) {
|
|
37731
|
+
var threeObj = findObjectByHardcodedUuid(threeScene, componentId);
|
|
37732
|
+
if (!threeObj) threeObj = threeScene.getObjectByProperty('uuid', componentId);
|
|
37733
|
+
if (!threeObj) threeObj = threeScene.getObjectByProperty('name', componentId);
|
|
37734
|
+
if (threeObj) {
|
|
37735
|
+
var _threeObj$userData;
|
|
37736
|
+
resolvedUuid = ((_threeObj$userData = threeObj.userData) === null || _threeObj$userData === void 0 ? void 0 : _threeObj$userData.originalUuid) || threeObj.uuid || componentId;
|
|
37737
|
+
console.log("\uD83D\uDD0D deleteComponent(): Resolved UUID \"".concat(componentId, "\" \u2192 \"").concat(resolvedUuid, "\""));
|
|
37738
|
+
}
|
|
37739
|
+
}
|
|
37740
|
+
|
|
37741
|
+
// Step 2: Collect connector UUIDs from sceneData.scene.children FIRST.
|
|
37742
|
+
var connectorIds = new Set();
|
|
37743
|
+
var sceneDataComponentIndex = -1;
|
|
37744
|
+
if (sceneData !== null && sceneData !== void 0 && (_sceneData$scene2 = sceneData.scene) !== null && _sceneData$scene2 !== void 0 && _sceneData$scene2.children) {
|
|
37745
|
+
sceneDataComponentIndex = sceneData.scene.children.findIndex(function (c) {
|
|
37746
|
+
var _c$userData2;
|
|
37747
|
+
return c.uuid === resolvedUuid || ((_c$userData2 = c.userData) === null || _c$userData2 === void 0 ? void 0 : _c$userData2.originalUuid) === resolvedUuid;
|
|
37748
|
+
});
|
|
37749
|
+
if (sceneDataComponentIndex !== -1) {
|
|
37750
|
+
var componentNode = sceneData.scene.children[sceneDataComponentIndex];
|
|
37751
|
+
if (Array.isArray(componentNode.children)) {
|
|
37752
|
+
componentNode.children.forEach(function (child) {
|
|
37753
|
+
var _child$userData2;
|
|
37754
|
+
if (((_child$userData2 = child.userData) === null || _child$userData2 === void 0 ? void 0 : _child$userData2.objectType) === 'connector' && child.uuid) {
|
|
37755
|
+
connectorIds.add(child.uuid);
|
|
37756
|
+
}
|
|
37757
|
+
});
|
|
37758
|
+
}
|
|
37759
|
+
}
|
|
37760
|
+
}
|
|
37720
37761
|
|
|
37721
|
-
//
|
|
37762
|
+
// Fallback: also traverse the live Three.js scene in case sceneData is missing
|
|
37763
|
+
// the component (e.g., dynamically added but not yet synced to sceneData)
|
|
37764
|
+
if (connectorIds.size === 0 && threeScene) {
|
|
37765
|
+
threeScene.traverse(function (obj) {
|
|
37766
|
+
var _obj$userData2, _obj$userData3;
|
|
37767
|
+
if ((obj.uuid === resolvedUuid || ((_obj$userData2 = obj.userData) === null || _obj$userData2 === void 0 ? void 0 : _obj$userData2.originalUuid) === resolvedUuid) && ((_obj$userData3 = obj.userData) === null || _obj$userData3 === void 0 ? void 0 : _obj$userData3.objectType) === 'component') {
|
|
37768
|
+
obj.children.forEach(function (child) {
|
|
37769
|
+
var _child$userData3;
|
|
37770
|
+
if (((_child$userData3 = child.userData) === null || _child$userData3 === void 0 ? void 0 : _child$userData3.objectType) === 'connector') {
|
|
37771
|
+
connectorIds.add(child.uuid);
|
|
37772
|
+
}
|
|
37773
|
+
});
|
|
37774
|
+
}
|
|
37775
|
+
});
|
|
37776
|
+
}
|
|
37777
|
+
console.log("\uD83D\uDD0C deleteComponent(): Found ".concat(connectorIds.size, " connector(s) for component ").concat(componentId));
|
|
37778
|
+
|
|
37779
|
+
// Step 3: Remove connections from sceneData BEFORE removing from Three.js
|
|
37780
|
+
// so the pathfinder fingerprint reflects the updated state on next updatePaths() call.
|
|
37781
|
+
if (connectorIds.size > 0 && sceneData && Array.isArray(sceneData.connections)) {
|
|
37782
|
+
var beforeCount = sceneData.connections.length;
|
|
37783
|
+
sceneData.connections = sceneData.connections.filter(function (conn) {
|
|
37784
|
+
return !connectorIds.has(conn.from) && !connectorIds.has(conn.to);
|
|
37785
|
+
});
|
|
37786
|
+
var removedCount = beforeCount - sceneData.connections.length;
|
|
37787
|
+
if (removedCount > 0) {
|
|
37788
|
+
console.log("\uD83D\uDD17 deleteComponent(): Removed ".concat(removedCount, " connection(s) for deleted component"));
|
|
37789
|
+
}
|
|
37790
|
+
}
|
|
37791
|
+
|
|
37792
|
+
// Step 4: Remove component from sceneData.scene.children BEFORE removing from Three.js
|
|
37793
|
+
if (sceneDataComponentIndex !== -1) {
|
|
37794
|
+
sceneData.scene.children.splice(sceneDataComponentIndex, 1);
|
|
37795
|
+
console.log('✅ Removed component from sceneData.scene.children');
|
|
37796
|
+
} else if (sceneData !== null && sceneData !== void 0 && (_sceneData$scene3 = sceneData.scene) !== null && _sceneData$scene3 !== void 0 && _sceneData$scene3.children) {
|
|
37797
|
+
// Retry in case findIndex above didn't run (e.g. no sceneData at that point)
|
|
37798
|
+
var retryIndex = sceneData.scene.children.findIndex(function (c) {
|
|
37799
|
+
var _c$userData3;
|
|
37800
|
+
return c.uuid === resolvedUuid || ((_c$userData3 = c.userData) === null || _c$userData3 === void 0 ? void 0 : _c$userData3.originalUuid) === resolvedUuid;
|
|
37801
|
+
});
|
|
37802
|
+
if (retryIndex !== -1) {
|
|
37803
|
+
sceneData.scene.children.splice(retryIndex, 1);
|
|
37804
|
+
console.log('✅ Removed component from sceneData.scene.children (retry)');
|
|
37805
|
+
}
|
|
37806
|
+
}
|
|
37807
|
+
|
|
37808
|
+
// Step 5: Remove the component from the Three.js scene
|
|
37722
37809
|
var success = componentManager.removeComponentFromScene(componentId);
|
|
37723
37810
|
if (success) {
|
|
37724
|
-
//
|
|
37725
|
-
|
|
37726
|
-
|
|
37727
|
-
|
|
37728
|
-
|
|
37729
|
-
|
|
37730
|
-
|
|
37731
|
-
|
|
37732
|
-
|
|
37733
|
-
|
|
37734
|
-
|
|
37735
|
-
|
|
37736
|
-
|
|
37811
|
+
// Step 6: Directly remove SEGMENT-* and Gateway objects from Three.js whose
|
|
37812
|
+
// pathFrom/pathTo references one of this component's connectors.
|
|
37813
|
+
// This is surgical cleanup that works regardless of shouldUpdatePaths.
|
|
37814
|
+
if (connectorIds.size > 0 && threeScene) {
|
|
37815
|
+
var objectsToRemove = [];
|
|
37816
|
+
threeScene.traverse(function (obj) {
|
|
37817
|
+
var _obj$uuid, _obj$userData4, _obj$uuid2, _obj$userData5;
|
|
37818
|
+
var isComputedSegment = ((_obj$uuid = obj.uuid) === null || _obj$uuid === void 0 ? void 0 : _obj$uuid.startsWith('SEGMENT-')) && ((_obj$userData4 = obj.userData) === null || _obj$userData4 === void 0 ? void 0 : _obj$userData4.isDeclared) !== true;
|
|
37819
|
+
var isComputedGateway = ((_obj$uuid2 = obj.uuid) === null || _obj$uuid2 === void 0 ? void 0 : _obj$uuid2.includes('Gateway')) && ((_obj$userData5 = obj.userData) === null || _obj$userData5 === void 0 ? void 0 : _obj$userData5.isDeclared) !== true;
|
|
37820
|
+
if (isComputedSegment || isComputedGateway) {
|
|
37821
|
+
var _obj$userData6, _obj$userData7;
|
|
37822
|
+
if (connectorIds.has((_obj$userData6 = obj.userData) === null || _obj$userData6 === void 0 ? void 0 : _obj$userData6.pathFrom) || connectorIds.has((_obj$userData7 = obj.userData) === null || _obj$userData7 === void 0 ? void 0 : _obj$userData7.pathTo)) {
|
|
37823
|
+
objectsToRemove.push(obj);
|
|
37824
|
+
}
|
|
37825
|
+
}
|
|
37826
|
+
});
|
|
37827
|
+
objectsToRemove.forEach(function (obj) {
|
|
37828
|
+
var _obj$geometry;
|
|
37829
|
+
var childrenCopy = _toConsumableArray(obj.children);
|
|
37830
|
+
childrenCopy.forEach(function (child) {
|
|
37831
|
+
var _child$geometry;
|
|
37832
|
+
obj.remove(child);
|
|
37833
|
+
(_child$geometry = child.geometry) === null || _child$geometry === void 0 || _child$geometry.dispose();
|
|
37834
|
+
if (Array.isArray(child.material)) {
|
|
37835
|
+
child.material.forEach(function (m) {
|
|
37836
|
+
return m === null || m === void 0 ? void 0 : m.dispose();
|
|
37837
|
+
});
|
|
37838
|
+
} else {
|
|
37839
|
+
var _child$material;
|
|
37840
|
+
(_child$material = child.material) === null || _child$material === void 0 || _child$material.dispose();
|
|
37841
|
+
}
|
|
37737
37842
|
});
|
|
37738
|
-
|
|
37739
|
-
|
|
37740
|
-
|
|
37843
|
+
threeScene.remove(obj);
|
|
37844
|
+
(_obj$geometry = obj.geometry) === null || _obj$geometry === void 0 || _obj$geometry.dispose();
|
|
37845
|
+
if (Array.isArray(obj.material)) {
|
|
37846
|
+
obj.material.forEach(function (m) {
|
|
37847
|
+
return m === null || m === void 0 ? void 0 : m.dispose();
|
|
37848
|
+
});
|
|
37849
|
+
} else {
|
|
37850
|
+
var _obj$material;
|
|
37851
|
+
(_obj$material = obj.material) === null || _obj$material === void 0 || _obj$material.dispose();
|
|
37741
37852
|
}
|
|
37853
|
+
});
|
|
37854
|
+
if (objectsToRemove.length > 0) {
|
|
37855
|
+
console.log("\uD83D\uDEBF deleteComponent(): Removed ".concat(objectsToRemove.length, " pipe segment(s)/gateway(s) for deleted component"));
|
|
37742
37856
|
}
|
|
37743
37857
|
}
|
|
37744
37858
|
|
|
37745
37859
|
// Deselect if the deleted component was selected
|
|
37746
|
-
// We check if the selected object matches the deleted ID, OR if the selected object is now detached from the scene (parent is null)
|
|
37747
37860
|
var transformManager = this.centralPlant.sceneViewer.transformManager;
|
|
37748
37861
|
if (transformManager && transformManager.selectedObjectForTransform) {
|
|
37749
37862
|
var _selectedObj$userData;
|
|
37750
37863
|
var selectedObj = transformManager.selectedObjectForTransform;
|
|
37751
|
-
if (selectedObj.uuid === componentId || selectedObj.name === componentId || ((_selectedObj$userData = selectedObj.userData) === null || _selectedObj$userData === void 0 ? void 0 : _selectedObj$userData.originalUuid) ===
|
|
37864
|
+
if (selectedObj.uuid === resolvedUuid || selectedObj.uuid === componentId || selectedObj.name === componentId || ((_selectedObj$userData = selectedObj.userData) === null || _selectedObj$userData === void 0 ? void 0 : _selectedObj$userData.originalUuid) === resolvedUuid || selectedObj.parent === null) {
|
|
37752
37865
|
console.log('🎯 deleteComponent(): Deselecting deleted object');
|
|
37753
37866
|
transformManager.deselectObject();
|
|
37754
37867
|
}
|
|
@@ -37761,14 +37874,6 @@ var CentralPlantInternals = /*#__PURE__*/function () {
|
|
|
37761
37874
|
});
|
|
37762
37875
|
console.log("\uD83D\uDCE1 Emitted 'component-removed' event for ".concat(componentId));
|
|
37763
37876
|
}
|
|
37764
|
-
|
|
37765
|
-
// Auto-update paths if enabled (mirrors behaviour of transformOperationsManager)
|
|
37766
|
-
if (this.centralPlant.sceneViewer.shouldUpdatePaths) {
|
|
37767
|
-
if (typeof this.centralPlant.sceneViewer.updatePaths === 'function') {
|
|
37768
|
-
console.log('🔄 deleteComponent(): Auto-updating paths after delete...');
|
|
37769
|
-
this.centralPlant.sceneViewer.updatePaths();
|
|
37770
|
-
}
|
|
37771
|
-
}
|
|
37772
37877
|
console.log("\u2705 deleteComponent(): Component ".concat(componentId, " deleted successfully"));
|
|
37773
37878
|
return true;
|
|
37774
37879
|
} else {
|
|
@@ -37793,8 +37898,8 @@ var CentralPlantInternals = /*#__PURE__*/function () {
|
|
|
37793
37898
|
}
|
|
37794
37899
|
var componentIds = [];
|
|
37795
37900
|
this.centralPlant.sceneViewer.scene.traverse(function (child) {
|
|
37796
|
-
var _child$
|
|
37797
|
-
if (((_child$
|
|
37901
|
+
var _child$userData4;
|
|
37902
|
+
if (((_child$userData4 = child.userData) === null || _child$userData4 === void 0 ? void 0 : _child$userData4.objectType) === 'component') {
|
|
37798
37903
|
componentIds.push(child.uuid || child.userData.originalUuid);
|
|
37799
37904
|
}
|
|
37800
37905
|
});
|
|
@@ -37829,7 +37934,7 @@ var CentralPlant = /*#__PURE__*/function (_BaseDisposable) {
|
|
|
37829
37934
|
* Initialize the CentralPlant manager
|
|
37830
37935
|
*
|
|
37831
37936
|
* @constructor
|
|
37832
|
-
* @version 0.3.
|
|
37937
|
+
* @version 0.3.10
|
|
37833
37938
|
* @updated 2025-10-22
|
|
37834
37939
|
*
|
|
37835
37940
|
* @description Creates a new CentralPlant instance and initializes internal managers and utilities.
|
|
@@ -35,7 +35,7 @@ var CentralPlant = /*#__PURE__*/function (_BaseDisposable) {
|
|
|
35
35
|
* Initialize the CentralPlant manager
|
|
36
36
|
*
|
|
37
37
|
* @constructor
|
|
38
|
-
* @version 0.3.
|
|
38
|
+
* @version 0.3.10
|
|
39
39
|
* @updated 2025-10-22
|
|
40
40
|
*
|
|
41
41
|
* @description Creates a new CentralPlant instance and initializes internal managers and utilities.
|
|
@@ -1223,39 +1223,152 @@ var CentralPlantInternals = /*#__PURE__*/function () {
|
|
|
1223
1223
|
return false;
|
|
1224
1224
|
}
|
|
1225
1225
|
try {
|
|
1226
|
+
var _this$centralPlant$sc0, _this$centralPlant$sc1, _sceneData$scene2, _sceneData$scene3;
|
|
1226
1227
|
console.log("\uD83D\uDDD1\uFE0F deleteComponent(): Deleting component ".concat(componentId));
|
|
1228
|
+
var threeScene = (_this$centralPlant$sc0 = this.centralPlant.sceneViewer) === null || _this$centralPlant$sc0 === void 0 ? void 0 : _this$centralPlant$sc0.scene;
|
|
1229
|
+
var sceneData = (_this$centralPlant$sc1 = this.centralPlant.sceneViewer) === null || _this$centralPlant$sc1 === void 0 ? void 0 : _this$centralPlant$sc1.currentSceneData;
|
|
1230
|
+
|
|
1231
|
+
// Step 1: Resolve the actual Three.js UUID from componentId.
|
|
1232
|
+
// The UI emits object.name (e.g. "Pump (PUMP-1)") as the selection ID, but
|
|
1233
|
+
// sceneData.scene.children stores the raw uuid (e.g. "PUMP-1"). We must
|
|
1234
|
+
// find the live Three.js object first so we can use its true .uuid for all
|
|
1235
|
+
// sceneData lookups.
|
|
1236
|
+
var resolvedUuid = componentId;
|
|
1237
|
+
if (threeScene) {
|
|
1238
|
+
var threeObj = nameUtils.findObjectByHardcodedUuid(threeScene, componentId);
|
|
1239
|
+
if (!threeObj) threeObj = threeScene.getObjectByProperty('uuid', componentId);
|
|
1240
|
+
if (!threeObj) threeObj = threeScene.getObjectByProperty('name', componentId);
|
|
1241
|
+
if (threeObj) {
|
|
1242
|
+
var _threeObj$userData;
|
|
1243
|
+
resolvedUuid = ((_threeObj$userData = threeObj.userData) === null || _threeObj$userData === void 0 ? void 0 : _threeObj$userData.originalUuid) || threeObj.uuid || componentId;
|
|
1244
|
+
console.log("\uD83D\uDD0D deleteComponent(): Resolved UUID \"".concat(componentId, "\" \u2192 \"").concat(resolvedUuid, "\""));
|
|
1245
|
+
}
|
|
1246
|
+
}
|
|
1247
|
+
|
|
1248
|
+
// Step 2: Collect connector UUIDs from sceneData.scene.children FIRST.
|
|
1249
|
+
var connectorIds = new Set();
|
|
1250
|
+
var sceneDataComponentIndex = -1;
|
|
1251
|
+
if (sceneData !== null && sceneData !== void 0 && (_sceneData$scene2 = sceneData.scene) !== null && _sceneData$scene2 !== void 0 && _sceneData$scene2.children) {
|
|
1252
|
+
sceneDataComponentIndex = sceneData.scene.children.findIndex(function (c) {
|
|
1253
|
+
var _c$userData2;
|
|
1254
|
+
return c.uuid === resolvedUuid || ((_c$userData2 = c.userData) === null || _c$userData2 === void 0 ? void 0 : _c$userData2.originalUuid) === resolvedUuid;
|
|
1255
|
+
});
|
|
1256
|
+
if (sceneDataComponentIndex !== -1) {
|
|
1257
|
+
var componentNode = sceneData.scene.children[sceneDataComponentIndex];
|
|
1258
|
+
if (Array.isArray(componentNode.children)) {
|
|
1259
|
+
componentNode.children.forEach(function (child) {
|
|
1260
|
+
var _child$userData2;
|
|
1261
|
+
if (((_child$userData2 = child.userData) === null || _child$userData2 === void 0 ? void 0 : _child$userData2.objectType) === 'connector' && child.uuid) {
|
|
1262
|
+
connectorIds.add(child.uuid);
|
|
1263
|
+
}
|
|
1264
|
+
});
|
|
1265
|
+
}
|
|
1266
|
+
}
|
|
1267
|
+
}
|
|
1268
|
+
|
|
1269
|
+
// Fallback: also traverse the live Three.js scene in case sceneData is missing
|
|
1270
|
+
// the component (e.g., dynamically added but not yet synced to sceneData)
|
|
1271
|
+
if (connectorIds.size === 0 && threeScene) {
|
|
1272
|
+
threeScene.traverse(function (obj) {
|
|
1273
|
+
var _obj$userData2, _obj$userData3;
|
|
1274
|
+
if ((obj.uuid === resolvedUuid || ((_obj$userData2 = obj.userData) === null || _obj$userData2 === void 0 ? void 0 : _obj$userData2.originalUuid) === resolvedUuid) && ((_obj$userData3 = obj.userData) === null || _obj$userData3 === void 0 ? void 0 : _obj$userData3.objectType) === 'component') {
|
|
1275
|
+
obj.children.forEach(function (child) {
|
|
1276
|
+
var _child$userData3;
|
|
1277
|
+
if (((_child$userData3 = child.userData) === null || _child$userData3 === void 0 ? void 0 : _child$userData3.objectType) === 'connector') {
|
|
1278
|
+
connectorIds.add(child.uuid);
|
|
1279
|
+
}
|
|
1280
|
+
});
|
|
1281
|
+
}
|
|
1282
|
+
});
|
|
1283
|
+
}
|
|
1284
|
+
console.log("\uD83D\uDD0C deleteComponent(): Found ".concat(connectorIds.size, " connector(s) for component ").concat(componentId));
|
|
1285
|
+
|
|
1286
|
+
// Step 3: Remove connections from sceneData BEFORE removing from Three.js
|
|
1287
|
+
// so the pathfinder fingerprint reflects the updated state on next updatePaths() call.
|
|
1288
|
+
if (connectorIds.size > 0 && sceneData && Array.isArray(sceneData.connections)) {
|
|
1289
|
+
var beforeCount = sceneData.connections.length;
|
|
1290
|
+
sceneData.connections = sceneData.connections.filter(function (conn) {
|
|
1291
|
+
return !connectorIds.has(conn.from) && !connectorIds.has(conn.to);
|
|
1292
|
+
});
|
|
1293
|
+
var removedCount = beforeCount - sceneData.connections.length;
|
|
1294
|
+
if (removedCount > 0) {
|
|
1295
|
+
console.log("\uD83D\uDD17 deleteComponent(): Removed ".concat(removedCount, " connection(s) for deleted component"));
|
|
1296
|
+
}
|
|
1297
|
+
}
|
|
1298
|
+
|
|
1299
|
+
// Step 4: Remove component from sceneData.scene.children BEFORE removing from Three.js
|
|
1300
|
+
if (sceneDataComponentIndex !== -1) {
|
|
1301
|
+
sceneData.scene.children.splice(sceneDataComponentIndex, 1);
|
|
1302
|
+
console.log('✅ Removed component from sceneData.scene.children');
|
|
1303
|
+
} else if (sceneData !== null && sceneData !== void 0 && (_sceneData$scene3 = sceneData.scene) !== null && _sceneData$scene3 !== void 0 && _sceneData$scene3.children) {
|
|
1304
|
+
// Retry in case findIndex above didn't run (e.g. no sceneData at that point)
|
|
1305
|
+
var retryIndex = sceneData.scene.children.findIndex(function (c) {
|
|
1306
|
+
var _c$userData3;
|
|
1307
|
+
return c.uuid === resolvedUuid || ((_c$userData3 = c.userData) === null || _c$userData3 === void 0 ? void 0 : _c$userData3.originalUuid) === resolvedUuid;
|
|
1308
|
+
});
|
|
1309
|
+
if (retryIndex !== -1) {
|
|
1310
|
+
sceneData.scene.children.splice(retryIndex, 1);
|
|
1311
|
+
console.log('✅ Removed component from sceneData.scene.children (retry)');
|
|
1312
|
+
}
|
|
1313
|
+
}
|
|
1227
1314
|
|
|
1228
|
-
//
|
|
1315
|
+
// Step 5: Remove the component from the Three.js scene
|
|
1229
1316
|
var success = componentManager.removeComponentFromScene(componentId);
|
|
1230
1317
|
if (success) {
|
|
1231
|
-
//
|
|
1232
|
-
|
|
1233
|
-
|
|
1234
|
-
|
|
1235
|
-
|
|
1236
|
-
|
|
1237
|
-
|
|
1238
|
-
|
|
1239
|
-
|
|
1240
|
-
|
|
1241
|
-
|
|
1242
|
-
|
|
1243
|
-
|
|
1318
|
+
// Step 6: Directly remove SEGMENT-* and Gateway objects from Three.js whose
|
|
1319
|
+
// pathFrom/pathTo references one of this component's connectors.
|
|
1320
|
+
// This is surgical cleanup that works regardless of shouldUpdatePaths.
|
|
1321
|
+
if (connectorIds.size > 0 && threeScene) {
|
|
1322
|
+
var objectsToRemove = [];
|
|
1323
|
+
threeScene.traverse(function (obj) {
|
|
1324
|
+
var _obj$uuid, _obj$userData4, _obj$uuid2, _obj$userData5;
|
|
1325
|
+
var isComputedSegment = ((_obj$uuid = obj.uuid) === null || _obj$uuid === void 0 ? void 0 : _obj$uuid.startsWith('SEGMENT-')) && ((_obj$userData4 = obj.userData) === null || _obj$userData4 === void 0 ? void 0 : _obj$userData4.isDeclared) !== true;
|
|
1326
|
+
var isComputedGateway = ((_obj$uuid2 = obj.uuid) === null || _obj$uuid2 === void 0 ? void 0 : _obj$uuid2.includes('Gateway')) && ((_obj$userData5 = obj.userData) === null || _obj$userData5 === void 0 ? void 0 : _obj$userData5.isDeclared) !== true;
|
|
1327
|
+
if (isComputedSegment || isComputedGateway) {
|
|
1328
|
+
var _obj$userData6, _obj$userData7;
|
|
1329
|
+
if (connectorIds.has((_obj$userData6 = obj.userData) === null || _obj$userData6 === void 0 ? void 0 : _obj$userData6.pathFrom) || connectorIds.has((_obj$userData7 = obj.userData) === null || _obj$userData7 === void 0 ? void 0 : _obj$userData7.pathTo)) {
|
|
1330
|
+
objectsToRemove.push(obj);
|
|
1331
|
+
}
|
|
1332
|
+
}
|
|
1333
|
+
});
|
|
1334
|
+
objectsToRemove.forEach(function (obj) {
|
|
1335
|
+
var _obj$geometry;
|
|
1336
|
+
var childrenCopy = _rollupPluginBabelHelpers.toConsumableArray(obj.children);
|
|
1337
|
+
childrenCopy.forEach(function (child) {
|
|
1338
|
+
var _child$geometry;
|
|
1339
|
+
obj.remove(child);
|
|
1340
|
+
(_child$geometry = child.geometry) === null || _child$geometry === void 0 || _child$geometry.dispose();
|
|
1341
|
+
if (Array.isArray(child.material)) {
|
|
1342
|
+
child.material.forEach(function (m) {
|
|
1343
|
+
return m === null || m === void 0 ? void 0 : m.dispose();
|
|
1344
|
+
});
|
|
1345
|
+
} else {
|
|
1346
|
+
var _child$material;
|
|
1347
|
+
(_child$material = child.material) === null || _child$material === void 0 || _child$material.dispose();
|
|
1348
|
+
}
|
|
1244
1349
|
});
|
|
1245
|
-
|
|
1246
|
-
|
|
1247
|
-
|
|
1350
|
+
threeScene.remove(obj);
|
|
1351
|
+
(_obj$geometry = obj.geometry) === null || _obj$geometry === void 0 || _obj$geometry.dispose();
|
|
1352
|
+
if (Array.isArray(obj.material)) {
|
|
1353
|
+
obj.material.forEach(function (m) {
|
|
1354
|
+
return m === null || m === void 0 ? void 0 : m.dispose();
|
|
1355
|
+
});
|
|
1356
|
+
} else {
|
|
1357
|
+
var _obj$material;
|
|
1358
|
+
(_obj$material = obj.material) === null || _obj$material === void 0 || _obj$material.dispose();
|
|
1248
1359
|
}
|
|
1360
|
+
});
|
|
1361
|
+
if (objectsToRemove.length > 0) {
|
|
1362
|
+
console.log("\uD83D\uDEBF deleteComponent(): Removed ".concat(objectsToRemove.length, " pipe segment(s)/gateway(s) for deleted component"));
|
|
1249
1363
|
}
|
|
1250
1364
|
}
|
|
1251
1365
|
|
|
1252
1366
|
// Deselect if the deleted component was selected
|
|
1253
|
-
// We check if the selected object matches the deleted ID, OR if the selected object is now detached from the scene (parent is null)
|
|
1254
1367
|
var transformManager = this.centralPlant.sceneViewer.transformManager;
|
|
1255
1368
|
if (transformManager && transformManager.selectedObjectForTransform) {
|
|
1256
1369
|
var _selectedObj$userData;
|
|
1257
1370
|
var selectedObj = transformManager.selectedObjectForTransform;
|
|
1258
|
-
if (selectedObj.uuid === componentId || selectedObj.name === componentId || ((_selectedObj$userData = selectedObj.userData) === null || _selectedObj$userData === void 0 ? void 0 : _selectedObj$userData.originalUuid) ===
|
|
1371
|
+
if (selectedObj.uuid === resolvedUuid || selectedObj.uuid === componentId || selectedObj.name === componentId || ((_selectedObj$userData = selectedObj.userData) === null || _selectedObj$userData === void 0 ? void 0 : _selectedObj$userData.originalUuid) === resolvedUuid || selectedObj.parent === null) {
|
|
1259
1372
|
console.log('🎯 deleteComponent(): Deselecting deleted object');
|
|
1260
1373
|
transformManager.deselectObject();
|
|
1261
1374
|
}
|
|
@@ -1268,14 +1381,6 @@ var CentralPlantInternals = /*#__PURE__*/function () {
|
|
|
1268
1381
|
});
|
|
1269
1382
|
console.log("\uD83D\uDCE1 Emitted 'component-removed' event for ".concat(componentId));
|
|
1270
1383
|
}
|
|
1271
|
-
|
|
1272
|
-
// Auto-update paths if enabled (mirrors behaviour of transformOperationsManager)
|
|
1273
|
-
if (this.centralPlant.sceneViewer.shouldUpdatePaths) {
|
|
1274
|
-
if (typeof this.centralPlant.sceneViewer.updatePaths === 'function') {
|
|
1275
|
-
console.log('🔄 deleteComponent(): Auto-updating paths after delete...');
|
|
1276
|
-
this.centralPlant.sceneViewer.updatePaths();
|
|
1277
|
-
}
|
|
1278
|
-
}
|
|
1279
1384
|
console.log("\u2705 deleteComponent(): Component ".concat(componentId, " deleted successfully"));
|
|
1280
1385
|
return true;
|
|
1281
1386
|
} else {
|
|
@@ -1300,8 +1405,8 @@ var CentralPlantInternals = /*#__PURE__*/function () {
|
|
|
1300
1405
|
}
|
|
1301
1406
|
var componentIds = [];
|
|
1302
1407
|
this.centralPlant.sceneViewer.scene.traverse(function (child) {
|
|
1303
|
-
var _child$
|
|
1304
|
-
if (((_child$
|
|
1408
|
+
var _child$userData4;
|
|
1409
|
+
if (((_child$userData4 = child.userData) === null || _child$userData4 === void 0 ? void 0 : _child$userData4.objectType) === 'component') {
|
|
1305
1410
|
componentIds.push(child.uuid || child.userData.originalUuid);
|
|
1306
1411
|
}
|
|
1307
1412
|
});
|
|
@@ -31,7 +31,7 @@ var CentralPlant = /*#__PURE__*/function (_BaseDisposable) {
|
|
|
31
31
|
* Initialize the CentralPlant manager
|
|
32
32
|
*
|
|
33
33
|
* @constructor
|
|
34
|
-
* @version 0.3.
|
|
34
|
+
* @version 0.3.10
|
|
35
35
|
* @updated 2025-10-22
|
|
36
36
|
*
|
|
37
37
|
* @description Creates a new CentralPlant instance and initializes internal managers and utilities.
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { createClass as _createClass, objectSpread2 as _objectSpread2, createForOfIteratorHelper as _createForOfIteratorHelper, typeof as _typeof, classCallCheck as _classCallCheck, asyncToGenerator as _asyncToGenerator, regenerator as _regenerator } from '../../_virtual/_rollupPluginBabelHelpers.js';
|
|
1
|
+
import { createClass as _createClass, objectSpread2 as _objectSpread2, createForOfIteratorHelper as _createForOfIteratorHelper, typeof as _typeof, toConsumableArray as _toConsumableArray, classCallCheck as _classCallCheck, asyncToGenerator as _asyncToGenerator, regenerator as _regenerator } from '../../_virtual/_rollupPluginBabelHelpers.js';
|
|
2
2
|
import * as THREE from 'three';
|
|
3
3
|
import { CentralPlantValidator } from './centralPlantValidator.js';
|
|
4
4
|
import { createTransformControls } from '../managers/controls/transformControlsManager.js';
|
|
@@ -1199,39 +1199,152 @@ var CentralPlantInternals = /*#__PURE__*/function () {
|
|
|
1199
1199
|
return false;
|
|
1200
1200
|
}
|
|
1201
1201
|
try {
|
|
1202
|
+
var _this$centralPlant$sc0, _this$centralPlant$sc1, _sceneData$scene2, _sceneData$scene3;
|
|
1202
1203
|
console.log("\uD83D\uDDD1\uFE0F deleteComponent(): Deleting component ".concat(componentId));
|
|
1204
|
+
var threeScene = (_this$centralPlant$sc0 = this.centralPlant.sceneViewer) === null || _this$centralPlant$sc0 === void 0 ? void 0 : _this$centralPlant$sc0.scene;
|
|
1205
|
+
var sceneData = (_this$centralPlant$sc1 = this.centralPlant.sceneViewer) === null || _this$centralPlant$sc1 === void 0 ? void 0 : _this$centralPlant$sc1.currentSceneData;
|
|
1206
|
+
|
|
1207
|
+
// Step 1: Resolve the actual Three.js UUID from componentId.
|
|
1208
|
+
// The UI emits object.name (e.g. "Pump (PUMP-1)") as the selection ID, but
|
|
1209
|
+
// sceneData.scene.children stores the raw uuid (e.g. "PUMP-1"). We must
|
|
1210
|
+
// find the live Three.js object first so we can use its true .uuid for all
|
|
1211
|
+
// sceneData lookups.
|
|
1212
|
+
var resolvedUuid = componentId;
|
|
1213
|
+
if (threeScene) {
|
|
1214
|
+
var threeObj = findObjectByHardcodedUuid(threeScene, componentId);
|
|
1215
|
+
if (!threeObj) threeObj = threeScene.getObjectByProperty('uuid', componentId);
|
|
1216
|
+
if (!threeObj) threeObj = threeScene.getObjectByProperty('name', componentId);
|
|
1217
|
+
if (threeObj) {
|
|
1218
|
+
var _threeObj$userData;
|
|
1219
|
+
resolvedUuid = ((_threeObj$userData = threeObj.userData) === null || _threeObj$userData === void 0 ? void 0 : _threeObj$userData.originalUuid) || threeObj.uuid || componentId;
|
|
1220
|
+
console.log("\uD83D\uDD0D deleteComponent(): Resolved UUID \"".concat(componentId, "\" \u2192 \"").concat(resolvedUuid, "\""));
|
|
1221
|
+
}
|
|
1222
|
+
}
|
|
1223
|
+
|
|
1224
|
+
// Step 2: Collect connector UUIDs from sceneData.scene.children FIRST.
|
|
1225
|
+
var connectorIds = new Set();
|
|
1226
|
+
var sceneDataComponentIndex = -1;
|
|
1227
|
+
if (sceneData !== null && sceneData !== void 0 && (_sceneData$scene2 = sceneData.scene) !== null && _sceneData$scene2 !== void 0 && _sceneData$scene2.children) {
|
|
1228
|
+
sceneDataComponentIndex = sceneData.scene.children.findIndex(function (c) {
|
|
1229
|
+
var _c$userData2;
|
|
1230
|
+
return c.uuid === resolvedUuid || ((_c$userData2 = c.userData) === null || _c$userData2 === void 0 ? void 0 : _c$userData2.originalUuid) === resolvedUuid;
|
|
1231
|
+
});
|
|
1232
|
+
if (sceneDataComponentIndex !== -1) {
|
|
1233
|
+
var componentNode = sceneData.scene.children[sceneDataComponentIndex];
|
|
1234
|
+
if (Array.isArray(componentNode.children)) {
|
|
1235
|
+
componentNode.children.forEach(function (child) {
|
|
1236
|
+
var _child$userData2;
|
|
1237
|
+
if (((_child$userData2 = child.userData) === null || _child$userData2 === void 0 ? void 0 : _child$userData2.objectType) === 'connector' && child.uuid) {
|
|
1238
|
+
connectorIds.add(child.uuid);
|
|
1239
|
+
}
|
|
1240
|
+
});
|
|
1241
|
+
}
|
|
1242
|
+
}
|
|
1243
|
+
}
|
|
1244
|
+
|
|
1245
|
+
// Fallback: also traverse the live Three.js scene in case sceneData is missing
|
|
1246
|
+
// the component (e.g., dynamically added but not yet synced to sceneData)
|
|
1247
|
+
if (connectorIds.size === 0 && threeScene) {
|
|
1248
|
+
threeScene.traverse(function (obj) {
|
|
1249
|
+
var _obj$userData2, _obj$userData3;
|
|
1250
|
+
if ((obj.uuid === resolvedUuid || ((_obj$userData2 = obj.userData) === null || _obj$userData2 === void 0 ? void 0 : _obj$userData2.originalUuid) === resolvedUuid) && ((_obj$userData3 = obj.userData) === null || _obj$userData3 === void 0 ? void 0 : _obj$userData3.objectType) === 'component') {
|
|
1251
|
+
obj.children.forEach(function (child) {
|
|
1252
|
+
var _child$userData3;
|
|
1253
|
+
if (((_child$userData3 = child.userData) === null || _child$userData3 === void 0 ? void 0 : _child$userData3.objectType) === 'connector') {
|
|
1254
|
+
connectorIds.add(child.uuid);
|
|
1255
|
+
}
|
|
1256
|
+
});
|
|
1257
|
+
}
|
|
1258
|
+
});
|
|
1259
|
+
}
|
|
1260
|
+
console.log("\uD83D\uDD0C deleteComponent(): Found ".concat(connectorIds.size, " connector(s) for component ").concat(componentId));
|
|
1261
|
+
|
|
1262
|
+
// Step 3: Remove connections from sceneData BEFORE removing from Three.js
|
|
1263
|
+
// so the pathfinder fingerprint reflects the updated state on next updatePaths() call.
|
|
1264
|
+
if (connectorIds.size > 0 && sceneData && Array.isArray(sceneData.connections)) {
|
|
1265
|
+
var beforeCount = sceneData.connections.length;
|
|
1266
|
+
sceneData.connections = sceneData.connections.filter(function (conn) {
|
|
1267
|
+
return !connectorIds.has(conn.from) && !connectorIds.has(conn.to);
|
|
1268
|
+
});
|
|
1269
|
+
var removedCount = beforeCount - sceneData.connections.length;
|
|
1270
|
+
if (removedCount > 0) {
|
|
1271
|
+
console.log("\uD83D\uDD17 deleteComponent(): Removed ".concat(removedCount, " connection(s) for deleted component"));
|
|
1272
|
+
}
|
|
1273
|
+
}
|
|
1274
|
+
|
|
1275
|
+
// Step 4: Remove component from sceneData.scene.children BEFORE removing from Three.js
|
|
1276
|
+
if (sceneDataComponentIndex !== -1) {
|
|
1277
|
+
sceneData.scene.children.splice(sceneDataComponentIndex, 1);
|
|
1278
|
+
console.log('✅ Removed component from sceneData.scene.children');
|
|
1279
|
+
} else if (sceneData !== null && sceneData !== void 0 && (_sceneData$scene3 = sceneData.scene) !== null && _sceneData$scene3 !== void 0 && _sceneData$scene3.children) {
|
|
1280
|
+
// Retry in case findIndex above didn't run (e.g. no sceneData at that point)
|
|
1281
|
+
var retryIndex = sceneData.scene.children.findIndex(function (c) {
|
|
1282
|
+
var _c$userData3;
|
|
1283
|
+
return c.uuid === resolvedUuid || ((_c$userData3 = c.userData) === null || _c$userData3 === void 0 ? void 0 : _c$userData3.originalUuid) === resolvedUuid;
|
|
1284
|
+
});
|
|
1285
|
+
if (retryIndex !== -1) {
|
|
1286
|
+
sceneData.scene.children.splice(retryIndex, 1);
|
|
1287
|
+
console.log('✅ Removed component from sceneData.scene.children (retry)');
|
|
1288
|
+
}
|
|
1289
|
+
}
|
|
1203
1290
|
|
|
1204
|
-
//
|
|
1291
|
+
// Step 5: Remove the component from the Three.js scene
|
|
1205
1292
|
var success = componentManager.removeComponentFromScene(componentId);
|
|
1206
1293
|
if (success) {
|
|
1207
|
-
//
|
|
1208
|
-
|
|
1209
|
-
|
|
1210
|
-
|
|
1211
|
-
|
|
1212
|
-
|
|
1213
|
-
|
|
1214
|
-
|
|
1215
|
-
|
|
1216
|
-
|
|
1217
|
-
|
|
1218
|
-
|
|
1219
|
-
|
|
1294
|
+
// Step 6: Directly remove SEGMENT-* and Gateway objects from Three.js whose
|
|
1295
|
+
// pathFrom/pathTo references one of this component's connectors.
|
|
1296
|
+
// This is surgical cleanup that works regardless of shouldUpdatePaths.
|
|
1297
|
+
if (connectorIds.size > 0 && threeScene) {
|
|
1298
|
+
var objectsToRemove = [];
|
|
1299
|
+
threeScene.traverse(function (obj) {
|
|
1300
|
+
var _obj$uuid, _obj$userData4, _obj$uuid2, _obj$userData5;
|
|
1301
|
+
var isComputedSegment = ((_obj$uuid = obj.uuid) === null || _obj$uuid === void 0 ? void 0 : _obj$uuid.startsWith('SEGMENT-')) && ((_obj$userData4 = obj.userData) === null || _obj$userData4 === void 0 ? void 0 : _obj$userData4.isDeclared) !== true;
|
|
1302
|
+
var isComputedGateway = ((_obj$uuid2 = obj.uuid) === null || _obj$uuid2 === void 0 ? void 0 : _obj$uuid2.includes('Gateway')) && ((_obj$userData5 = obj.userData) === null || _obj$userData5 === void 0 ? void 0 : _obj$userData5.isDeclared) !== true;
|
|
1303
|
+
if (isComputedSegment || isComputedGateway) {
|
|
1304
|
+
var _obj$userData6, _obj$userData7;
|
|
1305
|
+
if (connectorIds.has((_obj$userData6 = obj.userData) === null || _obj$userData6 === void 0 ? void 0 : _obj$userData6.pathFrom) || connectorIds.has((_obj$userData7 = obj.userData) === null || _obj$userData7 === void 0 ? void 0 : _obj$userData7.pathTo)) {
|
|
1306
|
+
objectsToRemove.push(obj);
|
|
1307
|
+
}
|
|
1308
|
+
}
|
|
1309
|
+
});
|
|
1310
|
+
objectsToRemove.forEach(function (obj) {
|
|
1311
|
+
var _obj$geometry;
|
|
1312
|
+
var childrenCopy = _toConsumableArray(obj.children);
|
|
1313
|
+
childrenCopy.forEach(function (child) {
|
|
1314
|
+
var _child$geometry;
|
|
1315
|
+
obj.remove(child);
|
|
1316
|
+
(_child$geometry = child.geometry) === null || _child$geometry === void 0 || _child$geometry.dispose();
|
|
1317
|
+
if (Array.isArray(child.material)) {
|
|
1318
|
+
child.material.forEach(function (m) {
|
|
1319
|
+
return m === null || m === void 0 ? void 0 : m.dispose();
|
|
1320
|
+
});
|
|
1321
|
+
} else {
|
|
1322
|
+
var _child$material;
|
|
1323
|
+
(_child$material = child.material) === null || _child$material === void 0 || _child$material.dispose();
|
|
1324
|
+
}
|
|
1220
1325
|
});
|
|
1221
|
-
|
|
1222
|
-
|
|
1223
|
-
|
|
1326
|
+
threeScene.remove(obj);
|
|
1327
|
+
(_obj$geometry = obj.geometry) === null || _obj$geometry === void 0 || _obj$geometry.dispose();
|
|
1328
|
+
if (Array.isArray(obj.material)) {
|
|
1329
|
+
obj.material.forEach(function (m) {
|
|
1330
|
+
return m === null || m === void 0 ? void 0 : m.dispose();
|
|
1331
|
+
});
|
|
1332
|
+
} else {
|
|
1333
|
+
var _obj$material;
|
|
1334
|
+
(_obj$material = obj.material) === null || _obj$material === void 0 || _obj$material.dispose();
|
|
1224
1335
|
}
|
|
1336
|
+
});
|
|
1337
|
+
if (objectsToRemove.length > 0) {
|
|
1338
|
+
console.log("\uD83D\uDEBF deleteComponent(): Removed ".concat(objectsToRemove.length, " pipe segment(s)/gateway(s) for deleted component"));
|
|
1225
1339
|
}
|
|
1226
1340
|
}
|
|
1227
1341
|
|
|
1228
1342
|
// Deselect if the deleted component was selected
|
|
1229
|
-
// We check if the selected object matches the deleted ID, OR if the selected object is now detached from the scene (parent is null)
|
|
1230
1343
|
var transformManager = this.centralPlant.sceneViewer.transformManager;
|
|
1231
1344
|
if (transformManager && transformManager.selectedObjectForTransform) {
|
|
1232
1345
|
var _selectedObj$userData;
|
|
1233
1346
|
var selectedObj = transformManager.selectedObjectForTransform;
|
|
1234
|
-
if (selectedObj.uuid === componentId || selectedObj.name === componentId || ((_selectedObj$userData = selectedObj.userData) === null || _selectedObj$userData === void 0 ? void 0 : _selectedObj$userData.originalUuid) ===
|
|
1347
|
+
if (selectedObj.uuid === resolvedUuid || selectedObj.uuid === componentId || selectedObj.name === componentId || ((_selectedObj$userData = selectedObj.userData) === null || _selectedObj$userData === void 0 ? void 0 : _selectedObj$userData.originalUuid) === resolvedUuid || selectedObj.parent === null) {
|
|
1235
1348
|
console.log('🎯 deleteComponent(): Deselecting deleted object');
|
|
1236
1349
|
transformManager.deselectObject();
|
|
1237
1350
|
}
|
|
@@ -1244,14 +1357,6 @@ var CentralPlantInternals = /*#__PURE__*/function () {
|
|
|
1244
1357
|
});
|
|
1245
1358
|
console.log("\uD83D\uDCE1 Emitted 'component-removed' event for ".concat(componentId));
|
|
1246
1359
|
}
|
|
1247
|
-
|
|
1248
|
-
// Auto-update paths if enabled (mirrors behaviour of transformOperationsManager)
|
|
1249
|
-
if (this.centralPlant.sceneViewer.shouldUpdatePaths) {
|
|
1250
|
-
if (typeof this.centralPlant.sceneViewer.updatePaths === 'function') {
|
|
1251
|
-
console.log('🔄 deleteComponent(): Auto-updating paths after delete...');
|
|
1252
|
-
this.centralPlant.sceneViewer.updatePaths();
|
|
1253
|
-
}
|
|
1254
|
-
}
|
|
1255
1360
|
console.log("\u2705 deleteComponent(): Component ".concat(componentId, " deleted successfully"));
|
|
1256
1361
|
return true;
|
|
1257
1362
|
} else {
|
|
@@ -1276,8 +1381,8 @@ var CentralPlantInternals = /*#__PURE__*/function () {
|
|
|
1276
1381
|
}
|
|
1277
1382
|
var componentIds = [];
|
|
1278
1383
|
this.centralPlant.sceneViewer.scene.traverse(function (child) {
|
|
1279
|
-
var _child$
|
|
1280
|
-
if (((_child$
|
|
1384
|
+
var _child$userData4;
|
|
1385
|
+
if (((_child$userData4 = child.userData) === null || _child$userData4 === void 0 ? void 0 : _child$userData4.objectType) === 'component') {
|
|
1281
1386
|
componentIds.push(child.uuid || child.userData.originalUuid);
|
|
1282
1387
|
}
|
|
1283
1388
|
});
|