fix(network): force re-render on undo/redo so canUndo/canRedo stay accurate

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
chihlasm
2026-04-13 20:03:35 +00:00
parent 662df2907d
commit b9c9bb548d

View File

@@ -1,4 +1,4 @@
import { useState, useCallback, useEffect, useRef } from 'react'
import { useState, useCallback, useEffect, useRef, useReducer } from 'react'
import { useParams, useNavigate } from 'react-router-dom'
import {
ReactFlowProvider,
@@ -74,6 +74,7 @@ function DiagramEditorInner() {
const historyStack = useRef<{ nodes: Node[]; edges: Edge[] }[]>([])
const historyIndex = useRef<number>(-1)
const MAX_HISTORY = 50
const [, forceHistoryUpdate] = useReducer((x: number) => x + 1, 0)
const pushHistory = useCallback((currentNodes: Node[], currentEdges: Edge[]) => {
historyStack.current = historyStack.current.slice(0, historyIndex.current + 1)
@@ -86,7 +87,8 @@ function DiagramEditorInner() {
} else {
historyIndex.current += 1
}
}, [])
forceHistoryUpdate()
}, [forceHistoryUpdate])
const undo = useCallback(() => {
if (historyIndex.current <= 0) return
@@ -95,7 +97,8 @@ function DiagramEditorInner() {
setNodes(snapshot.nodes)
setEdges(snapshot.edges)
setIsDirty(true)
}, [setNodes, setEdges])
forceHistoryUpdate()
}, [setNodes, setEdges, forceHistoryUpdate])
const redo = useCallback(() => {
if (historyIndex.current >= historyStack.current.length - 1) return
@@ -104,7 +107,8 @@ function DiagramEditorInner() {
setNodes(snapshot.nodes)
setEdges(snapshot.edges)
setIsDirty(true)
}, [setNodes, setEdges])
forceHistoryUpdate()
}, [setNodes, setEdges, forceHistoryUpdate])
const canUndo = historyIndex.current > 0
const canRedo = historyIndex.current < historyStack.current.length - 1