mirror of
https://github.com/DayuanJiang/next-ai-draw-io.git
synced 2026-01-02 14:22:28 +08:00
fix(cascade-delete): recursively collect edge children (labels)
- Change from cellsToDelete.add(edgeId) to collectDescendants(edgeId) - Fixes orphaned edge labels causing draw.io to crash/clear canvas - Edge labels (parent=edgeId) are now deleted with their parent edge
This commit is contained in:
@@ -674,13 +674,18 @@ export function applyDiagramOperations(
|
|||||||
collectDescendants(op.cell_id)
|
collectDescendants(op.cell_id)
|
||||||
|
|
||||||
// Find edges referencing any of the cells to be deleted
|
// Find edges referencing any of the cells to be deleted
|
||||||
|
// Also recursively collect children of those edges (e.g., edge labels)
|
||||||
for (const cellId of cellsToDelete) {
|
for (const cellId of cellsToDelete) {
|
||||||
const referencingEdges = root.querySelectorAll(
|
const referencingEdges = root.querySelectorAll(
|
||||||
`mxCell[source="${cellId}"], mxCell[target="${cellId}"]`,
|
`mxCell[source="${cellId}"], mxCell[target="${cellId}"]`,
|
||||||
)
|
)
|
||||||
referencingEdges.forEach((edge) => {
|
referencingEdges.forEach((edge) => {
|
||||||
const edgeId = edge.getAttribute("id")
|
const edgeId = edge.getAttribute("id")
|
||||||
if (edgeId) cellsToDelete.add(edgeId)
|
// Protect root cells from being added via edge references
|
||||||
|
if (edgeId && edgeId !== "0" && edgeId !== "1") {
|
||||||
|
// Recurse to collect edge's children (like labels)
|
||||||
|
collectDescendants(edgeId)
|
||||||
|
}
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "@next-ai-drawio/mcp-server",
|
"name": "@next-ai-drawio/mcp-server",
|
||||||
"version": "0.1.9",
|
"version": "0.1.10",
|
||||||
"description": "MCP server for Next AI Draw.io - AI-powered diagram generation with real-time browser preview",
|
"description": "MCP server for Next AI Draw.io - AI-powered diagram generation with real-time browser preview",
|
||||||
"type": "module",
|
"type": "module",
|
||||||
"main": "dist/index.js",
|
"main": "dist/index.js",
|
||||||
|
|||||||
@@ -223,13 +223,18 @@ export function applyDiagramOperations(
|
|||||||
collectDescendants(op.cell_id)
|
collectDescendants(op.cell_id)
|
||||||
|
|
||||||
// Find edges referencing any of the cells to be deleted
|
// Find edges referencing any of the cells to be deleted
|
||||||
|
// Also recursively collect children of those edges (e.g., edge labels)
|
||||||
for (const cellId of cellsToDelete) {
|
for (const cellId of cellsToDelete) {
|
||||||
const referencingEdges = root.querySelectorAll(
|
const referencingEdges = root.querySelectorAll(
|
||||||
`mxCell[source="${cellId}"], mxCell[target="${cellId}"]`,
|
`mxCell[source="${cellId}"], mxCell[target="${cellId}"]`,
|
||||||
)
|
)
|
||||||
referencingEdges.forEach((edge) => {
|
referencingEdges.forEach((edge) => {
|
||||||
const edgeId = edge.getAttribute("id")
|
const edgeId = edge.getAttribute("id")
|
||||||
if (edgeId) cellsToDelete.add(edgeId)
|
// Protect root cells from being added via edge references
|
||||||
|
if (edgeId && edgeId !== "0" && edgeId !== "1") {
|
||||||
|
// Recurse to collect edge's children (like labels)
|
||||||
|
collectDescendants(edgeId)
|
||||||
|
}
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user