auto-save 2026-05-14 03:37 (~5)

This commit is contained in:
2026-05-14 03:37:19 +08:00
parent 6ff4f59051
commit 26a43fc9a0
5 changed files with 166 additions and 81 deletions

View File

@@ -88,7 +88,8 @@ export default function Home() {
const [selectedFrames, setSelectedFrames] = useState<Set<number>>(new Set())
const [expandedFrame, setExpandedFrame] = useState<number | null>(null)
const [framePanelScale, setFramePanelScale] = useState(1)
const [framePanelPinned, setFramePanelPinned] = useState(true)
const [framePanelDock, setFramePanelDock] = useState<CanvasPanelDock>("left")
const framePanelPinned = framePanelDock !== "canvas"
const [videoPanelJobId, setVideoPanelJobId] = useState<string | null>(null)
const [videoPanelScale, setVideoPanelScale] = useState(1)
const [videoPanelDock, setVideoPanelDock] = useState<CanvasPanelDock>("left")
@@ -210,7 +211,7 @@ export default function Home() {
}, [])
const handleOpenFramePanel = useCallback((idx: number) => {
if (expandedFrame === null) setFramePanelPinned(true)
if (expandedFrame === null) setFramePanelDock("left")
setExpandedFrame(idx)
}, [expandedFrame])
@@ -499,6 +500,7 @@ export default function Home() {
expandedFrame,
framePanelScale,
framePanelPinned,
framePanelDock,
videoPanelJobId,
videoPanelScale,
videoPanelDock,
@@ -509,7 +511,8 @@ export default function Home() {
onExpandFrame: setExpandedFrame,
onOpenFramePanel: handleOpenFramePanel,
onFramePanelScaleChange: handleFramePanelScaleChange,
onFramePanelPinnedChange: setFramePanelPinned,
onFramePanelPinnedChange: (pinned: boolean) => setFramePanelDock(pinned ? "left" : "canvas"),
onFramePanelDockChange: setFramePanelDock,
onCloseExpandedFrame: () => setExpandedFrame(null),
onAddManualFrame: handleAddManualFrame,
onAddManualFrameForJob: handleAddManualFrameForJob,
@@ -533,7 +536,7 @@ export default function Home() {
onCopyImage: handleCopyImage,
pinnedNodes,
onToggleNodePin: handleToggleNodePin,
}), [job, jobs, activeJobId, submitting, analyzing, selectedFrames, expandedFrame, framePanelScale, framePanelPinned, videoPanelJobId, videoPanelScale, videoPanelDock, handleSubmit, handleUpload, handleAnalyze, handleToggleFrame, handleOpenFramePanel, handleFramePanelScaleChange, handleAddManualFrame, handleAddManualFrameForJob, handleOpenVideoPanel, handleVideoPanelScaleChange, handleSwitchJob, setJob, handleDeleteJob, handleDeleteFrame, handleDeleteFrameForJob, handleDeleteGenerated, handleDeleteVideo, handleDeleteCutout, handleCopyImage, pinnedNodes, handleToggleNodePin])
}), [job, jobs, activeJobId, submitting, analyzing, selectedFrames, expandedFrame, framePanelScale, framePanelPinned, framePanelDock, videoPanelJobId, videoPanelScale, videoPanelDock, handleSubmit, handleUpload, handleAnalyze, handleToggleFrame, handleOpenFramePanel, handleFramePanelScaleChange, handleAddManualFrame, handleAddManualFrameForJob, handleOpenVideoPanel, handleVideoPanelScaleChange, handleSwitchJob, setJob, handleDeleteJob, handleDeleteFrame, handleDeleteFrameForJob, handleDeleteGenerated, handleDeleteVideo, handleDeleteCutout, handleCopyImage, pinnedNodes, handleToggleNodePin])
// 用 useNodesState 让 ReactFlow 自己管位置(避免轮询时重置 drag
const savedSizes = useMemo(() => loadNodeSizes(), [])