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
This commit is contained in:
Dayuan Jiang
2025-12-03 20:11:50 +09:00
committed by GitHub
parent 595f24857a
commit c0cd393baa

View File

@@ -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]