fix: fix memory leaking of SIdebar (#22082)

This commit is contained in:
Shirasawa
2026-03-01 13:35:09 -05:00
committed by GitHub
parent fe604a8a9b
commit 6d7f21b57b
+30 -39
View File
@@ -414,9 +414,7 @@
document.documentElement.style.setProperty('--sidebar-width', `${newSidebarWidth}px`); document.documentElement.style.setProperty('--sidebar-width', `${newSidebarWidth}px`);
}; };
let unsubscribers = []; onMount(() => {
onMount(async () => {
try { try {
const width = Number(localStorage.getItem('sidebarWidth')); const width = Number(localStorage.getItem('sidebarWidth'));
if (!Number.isNaN(width) && width >= MIN_WIDTH && width <= MAX_WIDTH) { if (!Number.isNaN(width) && width >= MIN_WIDTH && width <= MAX_WIDTH) {
@@ -429,9 +427,9 @@
document.documentElement.style.setProperty('--sidebar-width', `${w}px`); document.documentElement.style.setProperty('--sidebar-width', `${w}px`);
}); });
await showSidebar.set(!$mobile ? localStorage.sidebar === 'true' : false); showSidebar.set(!$mobile ? localStorage.sidebar === 'true' : false);
unsubscribers = [ const unsubscribers = [
mobile.subscribe((value) => { mobile.subscribe((value) => {
if ($showSidebar && value) { if ($showSidebar && value) {
showSidebar.set(false); showSidebar.set(false);
@@ -502,14 +500,35 @@
window.addEventListener('blur', onBlur); window.addEventListener('blur', onBlur);
const dropZone = document.getElementById('sidebar'); const dropZone = document.getElementById('sidebar');
if (dropZone) {
dropZone.addEventListener('dragover', onDragOver);
dropZone.addEventListener('drop', onDrop);
dropZone.addEventListener('dragleave', onDragLeave);
}
dropZone?.addEventListener('dragover', onDragOver); const socketInstance = $socket;
dropZone?.addEventListener('drop', onDrop); socketInstance?.on('events', chatActiveEventHandler);
dropZone?.addEventListener('dragleave', onDragLeave);
// Listen for real-time chat:active events via the events channel return () => {
$socket?.off('events', chatActiveEventHandler); unsubscribers.forEach((unsubscriber) => unsubscriber());
$socket?.on('events', chatActiveEventHandler);
window.removeEventListener('keydown', onKeyDown);
window.removeEventListener('keyup', onKeyUp);
window.removeEventListener('touchstart', onTouchStart);
window.removeEventListener('touchend', onTouchEnd);
window.removeEventListener('focus', onFocus);
window.removeEventListener('blur', onBlur);
if (dropZone) {
dropZone.removeEventListener('dragover', onDragOver);
dropZone.removeEventListener('drop', onDrop);
dropZone.removeEventListener('dragleave', onDragLeave);
}
socketInstance?.off('events', chatActiveEventHandler);
};
}); });
// Handler for chat:active events (defined outside onMount for proper cleanup) // Handler for chat:active events (defined outside onMount for proper cleanup)
@@ -532,34 +551,6 @@
} }
}; };
onDestroy(() => {
if (unsubscribers && unsubscribers.length > 0) {
unsubscribers.forEach((unsubscriber) => {
if (unsubscriber) {
unsubscriber();
}
});
}
window.removeEventListener('keydown', onKeyDown);
window.removeEventListener('keyup', onKeyUp);
window.removeEventListener('touchstart', onTouchStart);
window.removeEventListener('touchend', onTouchEnd);
window.removeEventListener('focus', onFocus);
window.removeEventListener('blur', onBlur);
const dropZone = document.getElementById('sidebar');
dropZone?.removeEventListener('dragover', onDragOver);
dropZone?.removeEventListener('drop', onDrop);
dropZone?.removeEventListener('dragleave', onDragLeave);
// Clean up socket listener
$socket?.off('events', chatActiveEventHandler);
});
const newChatHandler = async () => { const newChatHandler = async () => {
selectedChatId = null; selectedChatId = null;
selectedFolder.set(null); selectedFolder.set(null);