Skip to content

Commit 3fcb45f

Browse files
committed
🤖 fix: update after rebase on main with ProjectContext
- Remove useProjectManagement in favor of useProjectContext - AppLoader now wraps with both ProjectProvider and WorkspaceProvider - App.tsx and LeftSidebar.tsx get projects from ProjectContext - Fix lint/typecheck errors from integration
1 parent 6317650 commit 3fcb45f

File tree

4 files changed

+20
-36
lines changed

4 files changed

+20
-36
lines changed

src/App.tsx

Lines changed: 4 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
import { useState, useEffect, useCallback, useRef } from "react";
22
import "./styles/globals.css";
33
import { useApp } from "./contexts/AppContext";
4+
import { useProjectContext } from "./contexts/ProjectContext";
45
import type { WorkspaceSelection } from "./components/ProjectSidebar";
56
import type { FrontendWorkspaceMetadata } from "./types/workspace";
67
import { LeftSidebar } from "./components/LeftSidebar";
@@ -36,17 +37,8 @@ const THINKING_LEVELS: ThinkingLevel[] = ["off", "low", "medium", "high"];
3637

3738
function AppInner() {
3839
// Get app-level state from context
39-
const {
40-
projects,
41-
addProject,
42-
removeProject,
43-
workspaceMetadata,
44-
setWorkspaceMetadata,
45-
removeWorkspace,
46-
renameWorkspace,
47-
selectedWorkspace,
48-
setSelectedWorkspace,
49-
} = useApp();
40+
const { workspaceMetadata, setWorkspaceMetadata, removeWorkspace, renameWorkspace, selectedWorkspace, setSelectedWorkspace } = useApp();
41+
const { projects, addProject, removeProject } = useProjectContext();
5042
const [projectCreateModalOpen, setProjectCreateModalOpen] = useState(false);
5143

5244
// Track when we're in "new workspace creation" mode (show FirstMessageInput)
@@ -179,12 +171,7 @@ function AppInner() {
179171
[removeProject, selectedWorkspace, setSelectedWorkspace]
180172
);
181173

182-
const handleAddWorkspace = useCallback(
183-
(projectPath: string) => {
184-
startWorkspaceCreation(projectPath);
185-
},
186-
[startWorkspaceCreation]
187-
);
174+
188175

189176
// Memoize callbacks to prevent LeftSidebar/ProjectSidebar re-renders
190177
const handleAddProjectCallback = useCallback(() => {

src/components/AppLoader.tsx

Lines changed: 13 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,12 @@
11
import { useState, useEffect } from "react";
22
import App from "../App";
33
import { LoadingScreen } from "./LoadingScreen";
4-
import { useProjectManagement } from "../hooks/useProjectManagement";
54
import { useWorkspaceStoreRaw } from "../stores/WorkspaceStore";
65
import { useGitStatusStoreRaw } from "../stores/GitStatusStore";
76
import { usePersistedState } from "../hooks/usePersistedState";
87
import type { WorkspaceSelection } from "./ProjectSidebar";
98
import { AppProvider } from "../contexts/AppContext";
9+
import { ProjectProvider, useProjectContext } from "../contexts/ProjectContext";
1010
import { WorkspaceProvider, useWorkspaceContext } from "../contexts/WorkspaceContext";
1111

1212
/**
@@ -20,27 +20,32 @@ import { WorkspaceProvider, useWorkspaceContext } from "../contexts/WorkspaceCon
2020
* the need for conditional guards in effects.
2121
*/
2222
export function AppLoader() {
23+
return (
24+
<ProjectProvider>
25+
<AppLoaderMiddle />
26+
</ProjectProvider>
27+
);
28+
}
29+
30+
function AppLoaderMiddle() {
2331
// Workspace selection - restored from localStorage immediately
2432
const [selectedWorkspace, setSelectedWorkspace] = usePersistedState<WorkspaceSelection | null>(
2533
"selectedWorkspace",
2634
null
2735
);
2836

29-
// Load projects
30-
const projectManagement = useProjectManagement();
37+
const { refreshProjects } = useProjectContext();
3138

3239
// Render App with WorkspaceProvider wrapping it
3340
return (
3441
<WorkspaceProvider
3542
selectedWorkspace={selectedWorkspace}
3643
onSelectedWorkspaceUpdate={setSelectedWorkspace}
37-
onProjectsUpdate={projectManagement.setProjects}
44+
onProjectsUpdate={() => {
45+
void refreshProjects();
46+
}}
3847
>
3948
<AppLoaderInner
40-
projects={projectManagement.projects}
41-
setProjects={projectManagement.setProjects}
42-
addProject={projectManagement.addProject}
43-
removeProject={projectManagement.removeProject}
4449
selectedWorkspace={selectedWorkspace}
4550
setSelectedWorkspace={setSelectedWorkspace}
4651
/>
@@ -52,10 +57,6 @@ export function AppLoader() {
5257
* Inner component that has access to WorkspaceContext
5358
*/
5459
function AppLoaderInner(props: {
55-
projects: ReturnType<typeof useProjectManagement>["projects"];
56-
setProjects: ReturnType<typeof useProjectManagement>["setProjects"];
57-
addProject: ReturnType<typeof useProjectManagement>["addProject"];
58-
removeProject: ReturnType<typeof useProjectManagement>["removeProject"];
5960
selectedWorkspace: WorkspaceSelection | null;
6061
setSelectedWorkspace: (workspace: WorkspaceSelection | null) => void;
6162
}) {
@@ -164,10 +165,6 @@ function AppLoaderInner(props: {
164165
// Render App with all initialized data via context
165166
return (
166167
<AppProvider
167-
projects={props.projects}
168-
setProjects={props.setProjects}
169-
addProject={props.addProject}
170-
removeProject={props.removeProject}
171168
workspaceMetadata={workspaceContext.workspaceMetadata}
172169
setWorkspaceMetadata={workspaceContext.setWorkspaceMetadata}
173170
createWorkspace={workspaceContext.createWorkspace}

src/components/LeftSidebar.tsx

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ import type { FrontendWorkspaceMetadata } from "@/types/workspace";
44
import type { Secret } from "@/types/secrets";
55
import ProjectSidebar from "./ProjectSidebar";
66
import { TitleBar } from "./TitleBar";
7-
import { useApp } from "@/contexts/AppContext";
7+
import { useProjectContext } from "@/contexts/ProjectContext";
88

99
interface LeftSidebarProps {
1010
onAddProject: () => void;
@@ -23,7 +23,7 @@ export function LeftSidebar(props: LeftSidebarProps) {
2323
const { collapsed, onToggleCollapsed, ...projectSidebarProps } = props;
2424

2525
// Get app-level state from context
26-
const { projects } = useApp();
26+
const { projects } = useProjectContext();
2727

2828
return (
2929
<>

src/components/ProjectSidebar.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ import { TooltipWrapper, Tooltip } from "./Tooltip";
1818
import SecretsModal from "./SecretsModal";
1919
import type { Secret } from "@/types/secrets";
2020
import { ForceDeleteModal } from "./ForceDeleteModal";
21-
import { WorkspaceListItem, type WorkspaceSelection } from "./WorkspaceListItem";
21+
import { WorkspaceListItem } from "./WorkspaceListItem";
2222
import { RenameProvider } from "@/contexts/WorkspaceRenameContext";
2323
import { useWorkspaceContext } from "@/contexts/WorkspaceContext";
2424

0 commit comments

Comments
 (0)