fix: persist sourceHandle/targetHandle so cluster edges survive reload

This commit is contained in:
Pouzor
2026-03-08 11:32:38 +01:00
parent 0034100286
commit f43a94a403
5 changed files with 17 additions and 1 deletions
+4
View File
@@ -32,6 +32,10 @@ async def init_db() -> None:
await conn.exec_driver_sql("ALTER TABLE edges ADD COLUMN path_style TEXT")
with suppress(Exception):
await conn.exec_driver_sql("ALTER TABLE nodes ADD COLUMN custom_icon TEXT")
with suppress(Exception):
await conn.exec_driver_sql("ALTER TABLE edges ADD COLUMN source_handle TEXT")
with suppress(Exception):
await conn.exec_driver_sql("ALTER TABLE edges ADD COLUMN target_handle TEXT")
async def get_db() -> AsyncGenerator[AsyncSession, None]:
+2
View File
@@ -58,6 +58,8 @@ class Edge(Base):
speed: Mapped[str | None] = mapped_column(String)
custom_color: Mapped[str | None] = mapped_column(String)
path_style: Mapped[str | None] = mapped_column(String)
source_handle: Mapped[str | None] = mapped_column(String)
target_handle: Mapped[str | None] = mapped_column(String)
created_at: Mapped[datetime] = mapped_column(DateTime(timezone=True), default=_now)
+2
View File
@@ -36,6 +36,8 @@ class EdgeSave(BaseModel):
speed: str | None = None
custom_color: str | None = None
path_style: str | None = None
source_handle: str | None = None
target_handle: str | None = None
class CanvasSaveRequest(BaseModel):
+4
View File
@@ -12,6 +12,8 @@ class EdgeBase(BaseModel):
speed: str | None = None
custom_color: str | None = None
path_style: str | None = None
source_handle: str | None = None
target_handle: str | None = None
class EdgeCreate(EdgeBase):
@@ -25,6 +27,8 @@ class EdgeUpdate(BaseModel):
speed: str | None = None
custom_color: str | None = None
path_style: str | None = None
source_handle: str | None = None
target_handle: str | None = None
class EdgeResponse(EdgeBase):
+5 -1
View File
@@ -66,6 +66,8 @@ export default function App() {
speed: e.data?.speed ?? null,
custom_color: e.data?.custom_color ?? null,
path_style: e.data?.path_style ?? null,
source_handle: e.sourceHandle ?? null,
target_handle: e.targetHandle ?? null,
}))
await canvasApi.save({ nodes: nodesToSave, edges: edgesToSave, viewport: {} })
markSaved()
@@ -103,11 +105,13 @@ export default function App() {
...(n.type === 'proxmox' && n.container_mode !== false ? { width: 300, height: 200 } : {}),
}
})
const rfEdges = apiEdges.map((e: EdgeData & { id: string; source: string; target: string }) => ({
const rfEdges = apiEdges.map((e: EdgeData & { id: string; source: string; target: string; source_handle?: string; target_handle?: string }) => ({
id: e.id,
source: e.source,
target: e.target,
type: e.type,
sourceHandle: e.source_handle ?? null,
targetHandle: e.target_handle ?? null,
data: e,
}))
loadCanvas(rfNodes, rfEdges)