fix: keep session titles and lists in sync

Update sidebar titles from session events
Load all session pages instead of partial lists
Refresh sessions only for newly added project directories
This commit is contained in:
Bohdan Triapitsyn
2026-06-03 18:43:13 +03:00
parent 874dc15263
commit 837a47b6a3
5 changed files with 284 additions and 23 deletions
@@ -69,7 +69,13 @@ import {
formatProjectLabel,
normalizePath,
} from './sidebar/utils';
import { mergeSessionDirectoryMetadata, refreshGlobalSessions, resolveGlobalSessionDirectory, useGlobalSessionsStore } from '@/stores/useGlobalSessionsStore';
import {
mergeSessionDirectoryMetadata,
refreshGlobalSessions,
refreshGlobalSessionsForDirectories,
resolveGlobalSessionDirectory,
useGlobalSessionsStore,
} from '@/stores/useGlobalSessionsStore';
import { useRuntimeAPIs } from '@/hooks/useRuntimeAPIs';
import { useGitHubAuthStore } from '@/stores/useGitHubAuthStore';
import { subscribeOpenchamberEvents } from '@/lib/openchamberEvents';
@@ -794,6 +800,36 @@ export const SessionSidebar: React.FC<SessionSidebarProps> = ({
[normalizedProjects],
);
const projectSessionDirectories = React.useMemo(() => {
const directories = new Set<string>();
normalizedProjects.forEach((project) => {
if (project.normalizedPath) directories.add(project.normalizedPath);
const worktrees = availableWorktreesByProject.get(project.normalizedPath) ?? [];
worktrees.forEach((worktree) => {
const directory = normalizePath(worktree.path);
if (directory) directories.add(directory);
});
});
return [...directories].sort();
}, [availableWorktreesByProject, normalizedProjects]);
const knownProjectSessionDirectoriesRef = React.useRef<Set<string> | null>(null);
React.useEffect(() => {
const nextDirectories = new Set(projectSessionDirectories);
const previousDirectories = knownProjectSessionDirectoriesRef.current;
knownProjectSessionDirectoriesRef.current = nextDirectories;
if (!previousDirectories) {
return;
}
const addedDirectories = projectSessionDirectories.filter((directory) => !previousDirectories.has(directory));
if (addedDirectories.length === 0) {
return;
}
void refreshGlobalSessionsForDirectories(addedDirectories, syncSessionsSnapshotRef.current);
}, [projectSessionDirectories]);
const { github } = useRuntimeAPIs();
const githubAuthStatus = useGitHubAuthStore((state) => state.status);
const githubAuthChecked = useGitHubAuthStore((state) => state.hasChecked);