Skip to content

Commit 548e536

Browse files
committed
Remove the project path from the client code
Also remove the project footer UI component
1 parent 663130a commit 548e536

7 files changed

Lines changed: 33 additions & 46 deletions

File tree

src/AppStartup.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -51,7 +51,7 @@ export function AppStartup() {
5151
setInitialized(true);
5252
setAllProjects(projects);
5353
if (projectInfo) {
54-
await openProject(projectId, projectInfo.path, projectInfo.name);
54+
await openProject(projectId, projectInfo.name);
5555
}
5656
notifyInfo('Application Initialized');
5757
}

src/api/projectsAPI.ts

Lines changed: 14 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -3,19 +3,18 @@ import { apiDelete, apiGetJson, apiPost } from './typed-api';
33

44
export interface ProjectInfo {
55
id: string;
6-
path: string;
76
name: string;
87
}
98

10-
type ProjectsResponse = Record<string, { project_name: string; project_path: string }>;
9+
type ProjectsResponse = Record<string, { project_name: string }>;
1110
type ProjectPostResponse = ProjectsResponse;
1211

1312
// ########################################################################################
1413
// PROJECT LIFE CYCLE
1514
// ########################################################################################
1615
export async function readAllProjects(): Promise<ProjectInfo[]> {
1716
const projects = (await apiGetJson('/api/projects/')) as ProjectsResponse;
18-
return Object.keys(projects).map((id) => ({ id, path: projects[id].project_path, name: projects[id].project_name }));
17+
return Object.keys(projects).map((id) => ({ id, name: projects[id].project_name }));
1918
}
2019

2120
export async function readProjectById(projectId: string): Promise<ProjectInfo> {
@@ -24,23 +23,32 @@ export async function readProjectById(projectId: string): Promise<ProjectInfo> {
2423
});
2524
return {
2625
id: projectInfo.id,
27-
path: projectInfo.path,
2826
name: projectInfo.name,
2927
};
3028
}
3129

30+
/**
31+
* Creates a project in the server.
32+
*
33+
* @param projectName the name of the project
34+
* @param projectPath the path of the project, when running in the desktop
35+
* @returns the project info
36+
*/
3237
export async function createRemoteProject(projectName: string, projectPath?: string): Promise<ProjectInfo> {
3338
const payload = (await apiPost('/api/projects/', {
3439
project_name: projectName,
3540
project_path: projectPath,
3641
})) as ProjectPostResponse;
3742

43+
if (projectPath && import.meta.env.VITE_IS_WEB) {
44+
throw new Error('Cannot set the project path when running in the browser.');
45+
}
46+
3847
const projectId = Object.keys(payload)[0];
39-
const { project_path, project_name } = payload[projectId];
48+
const { project_name } = payload[projectId];
4049

4150
return {
4251
id: projectId,
43-
path: project_path,
4452
name: project_name,
4553
};
4654
}

src/application/components/__tests__/test-fixtures.ts

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,12 +3,10 @@ import { ProjectInfo } from '../../../api/projectsAPI';
33
export const PROJECTS: ProjectInfo[] = [
44
{
55
id: 'dbbfed40-9159-49b9-98bb-7cf3dd3370f1',
6-
path: 'any/path/to/project1',
76
name: 'Project 1',
87
},
98
{
109
id: 'b59c34ee-4c9e-11ee-be56-0242ac120002',
11-
path: 'any/path/to/project2',
1210
name: 'Project 2',
1311
},
1412
];

src/application/listeners/projectEventListeners.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@ export function useFileProjectNewListener() {
3636
return;
3737
}
3838

39-
await openProject(projectInfo.id, projectInfo.path, projectInfo.name);
39+
await openProject(projectInfo.id, projectInfo.name);
4040
createFile();
4141
notifyInfo('New project created with success');
4242
persistActiveProjectInSettings(projectInfo.id);
@@ -57,7 +57,7 @@ export function useFileProjectNewSampleListener() {
5757
if (!project) {
5858
project = await createRemoteProject('RefStudio Sample');
5959
}
60-
await sampleProject(project.id, project.name, project.path);
60+
await sampleProject(project.id, project.name);
6161
createFile();
6262
notifyInfo('Sample project opened with success');
6363
persistActiveProjectInSettings(project.id);
@@ -103,7 +103,7 @@ export function useOpenProjectListener() {
103103

104104
return async ({ projectId }: { projectId: string }) => {
105105
const projectToOpen = await readProjectById(projectId);
106-
await openProject(projectId, projectToOpen.path, projectToOpen.name);
106+
await openProject(projectId, projectToOpen.name);
107107
persistActiveProjectInSettings(projectId);
108108
notifyInfo('New project open.');
109109
};

src/atoms/__tests__/projectState.test.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,7 @@ describe('projectState', () => {
4343
});
4444

4545
it('should set project id, load references and refresh files, when new project is open', async () => {
46-
await store.set(openProjectAtom, 'project-id', 'project-path', 'project-name');
46+
await store.set(openProjectAtom, 'project-id', 'project-name');
4747
expect(store.get(isProjectOpenAtom)).toBeTruthy();
4848
expect(store.get(projectNameAtom)).toBe('project-name');
4949
expect(setCurrentFileSystemProjectId).toHaveBeenCalledWith('project-id');
@@ -53,7 +53,7 @@ describe('projectState', () => {
5353
});
5454

5555
it('should close open project', async () => {
56-
await store.set(openProjectAtom, 'project-id', 'project-path', 'project-name');
56+
await store.set(openProjectAtom, 'project-id', 'project-name');
5757
expect(store.get(isProjectOpenAtom)).toBeTruthy();
5858

5959
await store.set(closeProjectAtom);
@@ -63,7 +63,7 @@ describe('projectState', () => {
6363
});
6464

6565
it('should close all open editors and clear all references on close', async () => {
66-
await store.set(openProjectAtom, 'project-id', 'project-path', 'project-name');
66+
await store.set(openProjectAtom, 'project-id', 'project-name');
6767
await store.set(closeProjectAtom);
6868
expect(store.get(closeAllEditorsAtom)).toHaveBeenCalled();
6969
expect(store.get(clearAllReferencesAtom)).toHaveBeenCalled();

src/atoms/projectState.ts

Lines changed: 12 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -10,15 +10,13 @@ import { clearAllReferencesAtom, loadReferencesAtom } from './referencesState';
1010
// #####################################################################################
1111
// Internal Atoms
1212
// #####################################################################################
13-
const currentProjectPathAtom = atom('');
1413
const currentProjectNameAtom = atom('');
1514
const currentProjectIdAtom = atom('');
1615

1716
// #####################################################################################
1817
// Public API
1918
// #####################################################################################
20-
export const isProjectOpenAtom = atom((get) => get(currentProjectPathAtom) !== '');
21-
export const projectPathAtom: Atom<string> = currentProjectPathAtom;
19+
export const isProjectOpenAtom = atom((get) => get(currentProjectIdAtom) !== '');
2220
export const projectNameAtom: Atom<string> = currentProjectNameAtom;
2321
export const projectIdAtom: Atom<string> = currentProjectIdAtom;
2422

@@ -27,14 +25,13 @@ export const allProjectsAtom = atom<ProjectInfo[]>([]);
2725
export const createProjectModalAtoms = createModalAtoms<string>();
2826
export const selectProjectModalAtoms = createModalAtoms<string>();
2927

30-
export const openProjectAtom = atom(null, async (_, set, projectId: string, path: string, name: string) => {
28+
export const openProjectAtom = atom(null, async (_, set, projectId: string, name: string) => {
3129
// Close current project before create new
3230
await set(closeProjectAtom);
3331

3432
// Create empty project
3533
setCurrentFileSystemProjectId(projectId);
3634
set(currentProjectIdAtom, projectId);
37-
set(currentProjectPathAtom, path);
3835
set(currentProjectNameAtom, name);
3936

4037
await set(loadReferencesAtom, projectId);
@@ -46,7 +43,6 @@ export const closeProjectAtom = atom(null, async (get, set) => {
4643
if (isOpen) {
4744
setCurrentFileSystemProjectId('');
4845
set(currentProjectIdAtom, '');
49-
set(currentProjectPathAtom, '');
5046
set(currentProjectNameAtom, '');
5147

5248
set(closeAllEditorsAtom);
@@ -55,18 +51,14 @@ export const closeProjectAtom = atom(null, async (get, set) => {
5551
}
5652
});
5753

58-
export const newSampleProjectAtom = atom(
59-
null,
60-
async (_, set, projectId: string, projectName: string, projectPath: string) => {
61-
// Close current project before create new
62-
await set(closeProjectAtom);
54+
export const newSampleProjectAtom = atom(null, async (_, set, projectId: string, projectName: string) => {
55+
// Close current project before create new
56+
await set(closeProjectAtom);
6357

64-
// Open sample project
65-
setCurrentFileSystemProjectId(projectId);
66-
set(currentProjectIdAtom, projectId);
67-
set(currentProjectPathAtom, projectPath);
68-
set(currentProjectNameAtom, projectName);
69-
await ensureSampleProjectFiles(projectId);
70-
await set(refreshFileTreeAtom);
71-
},
72-
);
58+
// Open sample project
59+
setCurrentFileSystemProjectId(projectId);
60+
set(currentProjectIdAtom, projectId);
61+
set(currentProjectNameAtom, projectName);
62+
await ensureSampleProjectFiles(projectId);
63+
await set(refreshFileTreeAtom);
64+
});

src/components/footer/Footer.tsx

Lines changed: 0 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,22 +1,11 @@
1-
import { useAtomValue } from 'jotai';
2-
import { VscHome } from 'react-icons/vsc';
3-
4-
import { projectPathAtom } from '../../atoms/projectState';
51
import { ReferencesFooterItems } from '../../features/references/footer/ReferencesFooterItems';
62
import { FooterNotificationItems } from '../../notifications/footer/FooterNotificationItems';
7-
import { FooterItem } from './FooterItem';
83

94
export function Footer() {
105
return (
116
<div className="relative flex items-center justify-end gap-1 bg-black pl-2 text-white">
12-
<ProjectFooterItems />
137
<ReferencesFooterItems />
148
<FooterNotificationItems />
159
</div>
1610
);
1711
}
18-
19-
function ProjectFooterItems() {
20-
const projectDir = useAtomValue(projectPathAtom);
21-
return <>{projectDir && <FooterItem className="mr-auto" icon={<VscHome />} text={projectDir} />}</>;
22-
}

0 commit comments

Comments
 (0)