fix(renderer): cancel deferred diff model disposal

This commit is contained in:
m4air
2026-09-15 16:20:31 -07:00
parent 7b527daf07
commit 8613e91878
@@ -12,13 +12,18 @@ export function useDiffSectionModelLifecycle(params: {
setSectionRootNode: (node: HTMLDivElement | null) => void
} {
const disposeDiffModels = useCallback(() => {
window.setTimeout(() => {
if (disposeTimerRef.current !== null) {
window.clearTimeout(disposeTimerRef.current)
}
disposeTimerRef.current = window.setTimeout(() => {
disposeTimerRef.current = null
disposeUnattachedMonacoModelPaths(monaco, [
`${params.modelPathBase}:original`,
`${params.modelPathBase}:modified`
])
}, 0)
}, [params.modelPathBase])
const disposeTimerRef = useRef<number | null>(null)
const disposeDiffModelsRef = useRef(disposeDiffModels)
// Keep callback-ref dispose path on the latest disposer without render-time mutation.
useEffect(() => {
@@ -38,5 +43,14 @@ export function useDiffSectionModelLifecycle(params: {
}
}, [disposeDiffModels, params.collapsed])
useEffect(() => {
return () => {
if (disposeTimerRef.current !== null) {
window.clearTimeout(disposeTimerRef.current)
disposeTimerRef.current = null
}
}
}, [])
return { disposeDiffModels, setSectionRootNode }
}