Skip to content

Commit 716f35a

Browse files
authored
add route for project workspace, add placeholder component for projec… (#231)
* add route for project workspace, add placeholder component for project workspace * add test for project workspace
1 parent 2338b7f commit 716f35a

File tree

19 files changed

+188
-12
lines changed

19 files changed

+188
-12
lines changed

src/api/api-service.ts

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,15 @@ export class ApiService {
4343
return result;
4444
}
4545

46+
public async getProject(projectId: string) {
47+
const endpoint = `${this.apiEndpoint}/projects/${projectId}`;
48+
this.profiler.setReportInfo(endpoint, 'getProject');
49+
this.profiler.startTimeRecord();
50+
const result = await HttpClient.get(endpoint, this.headers);
51+
this.profiler.endTimeRecord();
52+
return result;
53+
}
54+
4655
public async getProjects() {
4756
const endpoint = `${this.apiEndpoint}/projects`;
4857
this.profiler.setReportInfo(endpoint, 'getProjects');

src/components/projects/index.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1,2 @@
1-
export * from './project-gallery';
1+
export * from './projects-gallery/projects-gallery';
2+
export * from './project-workspace/project-workspace';

src/components/projects/project-gallery/index.ts

Lines changed: 0 additions & 1 deletion
This file was deleted.
Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
import React from 'react';
2+
import { render } from '@testing-library/react';
3+
import { ProjectWorkspace } from './project-workspace';
4+
import { MockThemeProvider } from '@mocks';
5+
6+
describe('project gallery tests', () => {
7+
test('render placeholder project workspace', async () => {
8+
// Arrange
9+
const { findByText } = render(
10+
<MockThemeProvider>
11+
<ProjectWorkspace projectId={'test-id'} />
12+
</MockThemeProvider>,
13+
);
14+
// Act
15+
const text = await findByText('Project workspace pages coming soon.');
16+
// Assert
17+
expect(text).toBeDefined();
18+
expect(text).toBeInTheDocument();
19+
expect(text).toBeVisible();
20+
});
21+
});
Lines changed: 59 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,59 @@
1+
import { RouteComponentProps } from '@reach/router';
2+
import React, { FC, Fragment, useEffect, useState } from 'react';
3+
4+
import { Wrapper, Seo, Loader } from '@components/shared';
5+
import { FeedbackForm } from '@components/shared/form';
6+
import { ServiceResolver, Project, ApiResponse, ErrorResponse } from '@api';
7+
import { useSiteMetadata } from '@hooks';
8+
9+
interface ProjectWorkspaceParams {
10+
projectId?: string;
11+
}
12+
13+
type ProjectWorkspaceProps = ProjectWorkspaceParams & RouteComponentProps;
14+
15+
export const ProjectWorkspace: FC<ProjectWorkspaceProps> = (props) => {
16+
const siteMetadata = useSiteMetadata();
17+
const [project, setProject] = useState<Project | undefined>(undefined);
18+
const [error, setError] = useState<string>('');
19+
20+
useEffect(() => {
21+
const api = ServiceResolver.apiResolver();
22+
async function fetchProject() {
23+
try {
24+
if (props.projectId == undefined) {
25+
return;
26+
}
27+
const response = (await api.getProject(props.projectId)) as ApiResponse<
28+
Project | ErrorResponse
29+
>;
30+
const project = response.data as Project;
31+
setProject(project);
32+
} catch (err) {
33+
setError(err.message);
34+
}
35+
}
36+
37+
fetchProject();
38+
});
39+
40+
return (
41+
<Fragment>
42+
<Seo
43+
title={`${project == undefined ? 'Project' : project.name} Workspace`}
44+
description={`Project Workspace for ${siteMetadata.title} website`}
45+
/>
46+
47+
<FeedbackForm page="project page" />
48+
49+
<Wrapper>
50+
{project == undefined ? (
51+
// waiting for project api response
52+
<Loader />
53+
) : (
54+
<div>Project workspace pages coming soon.</div>
55+
)}
56+
</Wrapper>
57+
</Fragment>
58+
);
59+
};

src/components/projects/project-gallery/__tests__/card.spec.tsx renamed to src/components/projects/projects-gallery/__tests__/card.spec.tsx

File renamed without changes.

src/components/projects/project-gallery/__tests__/panel.spec.tsx renamed to src/components/projects/projects-gallery/__tests__/panel.spec.tsx

File renamed without changes.

src/components/projects/project-gallery/__tests__/project-gallery.spec.tsx renamed to src/components/projects/projects-gallery/__tests__/projects-gallery.spec.tsx

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import React from 'react';
22
import { render, waitFor } from '@testing-library/react';
3-
import ProjectGallery from '../project-gallery';
3+
import { ProjectsGallery } from '../projects-gallery';
44
import { MockThemeProvider } from '@mocks';
55
import { getProjects } from '@mocks/responses/get-projects-response';
66

@@ -12,7 +12,7 @@ describe('project gallery tests', () => {
1212
// Arrange
1313
const { getAllByTestId } = render(
1414
<MockThemeProvider>
15-
<ProjectGallery />
15+
<ProjectsGallery />
1616
</MockThemeProvider>,
1717
);
1818
// Act

src/components/projects/project-gallery/card-button.tsx renamed to src/components/projects/projects-gallery/card-button.tsx

File renamed without changes.

src/components/projects/project-gallery/card-tags.tsx renamed to src/components/projects/projects-gallery/card-tags.tsx

File renamed without changes.

0 commit comments

Comments
 (0)