mirror of
https://github.com/siteboon/claudecodeui.git
synced 2026-06-04 20:05:38 +08:00
refactor: improve session limit and offset validation in provider routes
This commit is contained in:
@@ -120,6 +120,8 @@ export function useSidebarController({
|
||||
const searchSeqRef = useRef(0);
|
||||
const eventSourceRef = useRef<EventSource | null>(null);
|
||||
const starToggleSequenceByProjectRef = useRef<Map<string, number>>(new Map());
|
||||
const migrationStartedRef = useRef(false);
|
||||
const onRefreshRef = useRef(onRefresh);
|
||||
|
||||
const isSidebarCollapsed = !isMobile && !sidebarVisible;
|
||||
|
||||
@@ -194,19 +196,25 @@ export function useSidebarController({
|
||||
}, []);
|
||||
|
||||
useEffect(() => {
|
||||
onRefreshRef.current = onRefresh;
|
||||
}, [onRefresh]);
|
||||
|
||||
useEffect(() => {
|
||||
if (migrationStartedRef.current) {
|
||||
return;
|
||||
}
|
||||
|
||||
const legacyStarredProjectIds = readLegacyStarredProjectIds();
|
||||
if (legacyStarredProjectIds.length === 0) {
|
||||
return;
|
||||
}
|
||||
|
||||
let active = true;
|
||||
migrationStartedRef.current = true;
|
||||
|
||||
const migrateLegacyStars = async () => {
|
||||
try {
|
||||
await api.migrateLegacyProjectStars(legacyStarredProjectIds);
|
||||
if (active) {
|
||||
await onRefresh();
|
||||
}
|
||||
await onRefreshRef.current();
|
||||
} catch (error) {
|
||||
console.error('[Sidebar] Failed to migrate legacy starred projects:', error);
|
||||
} finally {
|
||||
@@ -215,10 +223,6 @@ export function useSidebarController({
|
||||
};
|
||||
|
||||
void migrateLegacyStars();
|
||||
|
||||
return () => {
|
||||
active = false;
|
||||
};
|
||||
}, [onRefresh]);
|
||||
|
||||
useEffect(() => {
|
||||
@@ -446,16 +450,26 @@ export function useSidebarController({
|
||||
const getProjectSessions = useCallback((project: Project) => getAllSessions(project), []);
|
||||
|
||||
const loadMoreSessionsForProject = useCallback(async (projectId: string) => {
|
||||
if (!onLoadMoreSessions || loadingMoreProjects.has(projectId)) {
|
||||
if (!onLoadMoreSessions) {
|
||||
return;
|
||||
}
|
||||
|
||||
let shouldLoad = false;
|
||||
setLoadingMoreProjects((previous) => {
|
||||
if (previous.has(projectId)) {
|
||||
return previous;
|
||||
}
|
||||
|
||||
shouldLoad = true;
|
||||
const next = new Set(previous);
|
||||
next.add(projectId);
|
||||
return next;
|
||||
});
|
||||
|
||||
if (!shouldLoad) {
|
||||
return;
|
||||
}
|
||||
|
||||
try {
|
||||
await onLoadMoreSessions(projectId);
|
||||
} catch (error) {
|
||||
@@ -468,7 +482,7 @@ export function useSidebarController({
|
||||
return next;
|
||||
});
|
||||
}
|
||||
}, [loadingMoreProjects, onLoadMoreSessions, t]);
|
||||
}, [onLoadMoreSessions, t]);
|
||||
|
||||
const projectsWithResolvedStarState = useMemo(() => {
|
||||
if (optimisticStarByProjectId.size === 0) {
|
||||
|
||||
@@ -605,12 +605,28 @@ export function useProjectsState({
|
||||
|
||||
setProjects((prevProjects) =>
|
||||
prevProjects.map((project) => {
|
||||
const sessions = project.sessions?.filter((session) => session.id !== sessionIdToDelete) ?? [];
|
||||
const cursorSessions = project.cursorSessions?.filter((session) => session.id !== sessionIdToDelete) ?? [];
|
||||
const codexSessions = project.codexSessions?.filter((session) => session.id !== sessionIdToDelete) ?? [];
|
||||
const geminiSessions = project.geminiSessions?.filter((session) => session.id !== sessionIdToDelete) ?? [];
|
||||
|
||||
const removedFromProject = (
|
||||
sessions.length !== (project.sessions?.length ?? 0)
|
||||
|| cursorSessions.length !== (project.cursorSessions?.length ?? 0)
|
||||
|| codexSessions.length !== (project.codexSessions?.length ?? 0)
|
||||
|| geminiSessions.length !== (project.geminiSessions?.length ?? 0)
|
||||
);
|
||||
|
||||
if (!removedFromProject) {
|
||||
return project;
|
||||
}
|
||||
|
||||
const updatedProject: Project = {
|
||||
...project,
|
||||
sessions: project.sessions?.filter((session) => session.id !== sessionIdToDelete) ?? [],
|
||||
cursorSessions: project.cursorSessions?.filter((session) => session.id !== sessionIdToDelete) ?? [],
|
||||
codexSessions: project.codexSessions?.filter((session) => session.id !== sessionIdToDelete) ?? [],
|
||||
geminiSessions: project.geminiSessions?.filter((session) => session.id !== sessionIdToDelete) ?? [],
|
||||
sessions,
|
||||
cursorSessions,
|
||||
codexSessions,
|
||||
geminiSessions,
|
||||
};
|
||||
|
||||
const totalSessions = Math.max(0, Number(project.sessionMeta?.total ?? 0) - 1);
|
||||
|
||||
Reference in New Issue
Block a user