mirror of
https://github.com/siteboon/claudecodeui.git
synced 2026-03-07 06:57:40 +00:00
refactor(useSidebarController): manage project session overrides in local state
This commit is contained in:
@@ -63,6 +63,7 @@ export function useSidebarController({
|
|||||||
const [currentTime, setCurrentTime] = useState(new Date());
|
const [currentTime, setCurrentTime] = useState(new Date());
|
||||||
const [projectSortOrder, setProjectSortOrder] = useState<ProjectSortOrder>('name');
|
const [projectSortOrder, setProjectSortOrder] = useState<ProjectSortOrder>('name');
|
||||||
const [isRefreshing, setIsRefreshing] = useState(false);
|
const [isRefreshing, setIsRefreshing] = useState(false);
|
||||||
|
const [projectHasMoreOverrides, setProjectHasMoreOverrides] = useState<Record<string, boolean>>({});
|
||||||
const [editingSession, setEditingSession] = useState<string | null>(null);
|
const [editingSession, setEditingSession] = useState<string | null>(null);
|
||||||
const [editingSessionName, setEditingSessionName] = useState('');
|
const [editingSessionName, setEditingSessionName] = useState('');
|
||||||
const [searchFilter, setSearchFilter] = useState('');
|
const [searchFilter, setSearchFilter] = useState('');
|
||||||
@@ -85,6 +86,7 @@ export function useSidebarController({
|
|||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
setAdditionalSessions({});
|
setAdditionalSessions({});
|
||||||
setInitialSessionsLoaded(new Set());
|
setInitialSessionsLoaded(new Set());
|
||||||
|
setProjectHasMoreOverrides({});
|
||||||
}, [projects]);
|
}, [projects]);
|
||||||
|
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
@@ -195,9 +197,25 @@ export function useSidebarController({
|
|||||||
[additionalSessions],
|
[additionalSessions],
|
||||||
);
|
);
|
||||||
|
|
||||||
|
const projectsWithSessionMeta = useMemo(
|
||||||
|
() =>
|
||||||
|
projects.map((project) => {
|
||||||
|
const hasMoreOverride = projectHasMoreOverrides[project.name];
|
||||||
|
if (hasMoreOverride === undefined) {
|
||||||
|
return project;
|
||||||
|
}
|
||||||
|
|
||||||
|
return {
|
||||||
|
...project,
|
||||||
|
sessionMeta: { ...project.sessionMeta, hasMore: hasMoreOverride },
|
||||||
|
};
|
||||||
|
}),
|
||||||
|
[projectHasMoreOverrides, projects],
|
||||||
|
);
|
||||||
|
|
||||||
const sortedProjects = useMemo(
|
const sortedProjects = useMemo(
|
||||||
() => sortProjects(projects, projectSortOrder, starredProjects, additionalSessions),
|
() => sortProjects(projectsWithSessionMeta, projectSortOrder, starredProjects, additionalSessions),
|
||||||
[additionalSessions, projectSortOrder, projects, starredProjects],
|
[additionalSessions, projectSortOrder, projectsWithSessionMeta, starredProjects],
|
||||||
);
|
);
|
||||||
|
|
||||||
const filteredProjects = useMemo(
|
const filteredProjects = useMemo(
|
||||||
@@ -324,7 +342,9 @@ export function useSidebarController({
|
|||||||
|
|
||||||
const loadMoreSessions = useCallback(
|
const loadMoreSessions = useCallback(
|
||||||
async (project: Project) => {
|
async (project: Project) => {
|
||||||
const canLoadMore = project.sessionMeta?.hasMore === true;
|
const hasMoreOverride = projectHasMoreOverrides[project.name];
|
||||||
|
const canLoadMore =
|
||||||
|
hasMoreOverride !== undefined ? hasMoreOverride : project.sessionMeta?.hasMore === true;
|
||||||
if (!canLoadMore || loadingSessions[project.name]) {
|
if (!canLoadMore || loadingSessions[project.name]) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@@ -351,7 +371,8 @@ export function useSidebarController({
|
|||||||
}));
|
}));
|
||||||
|
|
||||||
if (result.hasMore === false) {
|
if (result.hasMore === false) {
|
||||||
project.sessionMeta = { ...project.sessionMeta, hasMore: false };
|
// Keep hasMore state in local hook state instead of mutating the project prop object.
|
||||||
|
setProjectHasMoreOverrides((prev) => ({ ...prev, [project.name]: false }));
|
||||||
}
|
}
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
console.error('Error loading more sessions:', error);
|
console.error('Error loading more sessions:', error);
|
||||||
@@ -359,7 +380,7 @@ export function useSidebarController({
|
|||||||
setLoadingSessions((prev) => ({ ...prev, [project.name]: false }));
|
setLoadingSessions((prev) => ({ ...prev, [project.name]: false }));
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
[additionalSessions, loadingSessions],
|
[additionalSessions, loadingSessions, projectHasMoreOverrides],
|
||||||
);
|
);
|
||||||
|
|
||||||
const handleProjectSelect = useCallback(
|
const handleProjectSelect = useCallback(
|
||||||
|
|||||||
Reference in New Issue
Block a user