mirror of
https://github.com/DayuanJiang/next-ai-draw-io.git
synced 2026-09-02 09:30:23 +08:00
fix: zoom reset on drag and IndexedDB version conflict
- Fix zoom resetting when dragging items (#775): removed useEffect that called load() on every autosave-triggered chartXML change, which reset the viewport. Moved diagram restore logic to onDrawioLoad where it only fires on remount. - Fix IndexedDB VersionError: template-storage.ts shared the same DB name as session-storage.ts but at version 2, causing session storage to fail with "requested version (1) < existing version (2)". Give templates their own DB ("next-ai-drawio-templates").
This commit is contained in:
@@ -65,6 +65,10 @@ export function DiagramProvider({ children }: { children: React.ReactNode }) {
|
||||
if (hasCalledOnLoadRef.current) return
|
||||
hasCalledOnLoadRef.current = true
|
||||
setIsDrawioReady(true)
|
||||
// Restore diagram after remount (e.g., theme/UI change)
|
||||
if (drawioRef.current && isRealDiagram(chartXMLRef.current)) {
|
||||
drawioRef.current.load({ xml: chartXMLRef.current })
|
||||
}
|
||||
}
|
||||
|
||||
const resetDrawioReady = () => {
|
||||
@@ -77,24 +81,6 @@ export function DiagramProvider({ children }: { children: React.ReactNode }) {
|
||||
chartXMLRef.current = chartXML
|
||||
}, [chartXML])
|
||||
|
||||
// Restore diagram when DrawIO becomes ready after remount (e.g., theme/UI change)
|
||||
// Also restore when chartXML changes while DrawIO is ready (e.g., session loaded after iframe ready)
|
||||
const lastRestoredXmlRef = useRef<string>("")
|
||||
useEffect(() => {
|
||||
if (!isDrawioReady || !drawioRef.current) return
|
||||
// Only load if we have a real diagram and it's different from what we already loaded
|
||||
if (
|
||||
isRealDiagram(chartXML) &&
|
||||
chartXML !== lastRestoredXmlRef.current
|
||||
) {
|
||||
lastRestoredXmlRef.current = chartXML
|
||||
drawioRef.current.load({ xml: chartXML })
|
||||
} else if (!isRealDiagram(chartXML)) {
|
||||
// Reset when diagram is cleared so a future restore can re-load the same XML.
|
||||
lastRestoredXmlRef.current = ""
|
||||
}
|
||||
}, [isDrawioReady, chartXML])
|
||||
|
||||
// Track if we're expecting an export for file save (stores raw export data)
|
||||
const saveResolverRef = useRef<{
|
||||
resolver: ((data: string) => void) | null
|
||||
|
||||
Reference in New Issue
Block a user