mirror of
https://github.com/DayuanJiang/next-ai-draw-io.git
synced 2026-01-02 22:32:27 +08:00
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:
@@ -5,7 +5,7 @@ import Image from "next/image";
|
|||||||
import { ScrollArea } from "@/components/ui/scroll-area";
|
import { ScrollArea } from "@/components/ui/scroll-area";
|
||||||
import ExamplePanel from "./chat-example-panel";
|
import ExamplePanel from "./chat-example-panel";
|
||||||
import { UIMessage } from "ai";
|
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 { Copy, Check, X } from "lucide-react";
|
||||||
|
|
||||||
import { useDiagram } from "@/contexts/diagram-context";
|
import { useDiagram } from "@/contexts/diagram-context";
|
||||||
@@ -58,9 +58,16 @@ export function ChatMessageDisplay({
|
|||||||
const currentXml = xml || "";
|
const currentXml = xml || "";
|
||||||
const convertedXml = convertToLegalXml(currentXml);
|
const convertedXml = convertToLegalXml(currentXml);
|
||||||
if (convertedXml !== previousXML.current) {
|
if (convertedXml !== previousXML.current) {
|
||||||
previousXML.current = convertedXml;
|
|
||||||
const replacedXML = replaceNodes(chartXML, 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]
|
[chartXML, onDisplayChart]
|
||||||
|
|||||||
Reference in New Issue
Block a user