From c0cd393baac65d3106d49b1092c43870dc24ee89 Mon Sep 17 00:00:00 2001 From: Dayuan Jiang <34411969+DayuanJiang@users.noreply.github.com> Date: Wed, 3 Dec 2025 20:11:50 +0900 Subject: [PATCH] fix: validate XML before sending to draw.io to prevent setId errors (#56) - Add XML validation in handleDisplayChart before calling onDisplayChart - Only update previousXML ref when validation passes to prevent state desync - Add console error logging for failed validations Fixes #5 --- components/chat-message-display.tsx | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/components/chat-message-display.tsx b/components/chat-message-display.tsx index c2d513d..d806a6e 100644 --- a/components/chat-message-display.tsx +++ b/components/chat-message-display.tsx @@ -5,7 +5,7 @@ import Image from "next/image"; import { ScrollArea } from "@/components/ui/scroll-area"; import ExamplePanel from "./chat-example-panel"; import { UIMessage } from "ai"; -import { convertToLegalXml, replaceNodes } from "@/lib/utils"; +import { convertToLegalXml, replaceNodes, validateMxCellStructure } from "@/lib/utils"; import { Copy, Check, X } from "lucide-react"; import { useDiagram } from "@/contexts/diagram-context"; @@ -58,9 +58,16 @@ export function ChatMessageDisplay({ const currentXml = xml || ""; const convertedXml = convertToLegalXml(currentXml); if (convertedXml !== previousXML.current) { - previousXML.current = convertedXml; const replacedXML = replaceNodes(chartXML, convertedXml); - onDisplayChart(replacedXML); + + // Validate before sending to draw.io to prevent "d.setId is not a function" errors + const validationError = validateMxCellStructure(replacedXML); + if (!validationError) { + previousXML.current = convertedXml; // Only update on success + onDisplayChart(replacedXML); + } else { + console.error("[ChatMessageDisplay] XML validation failed:", validationError); + } } }, [chartXML, onDisplayChart]