Skip to content

Commit 7a1099d

Browse files
AnthonytorreroAnthonytorrero
authored andcommitted
final push for comments and refactored ProjectContainer file
1 parent db392a7 commit 7a1099d

File tree

1 file changed

+39
-54
lines changed

1 file changed

+39
-54
lines changed

app/src/Dashboard/ProjectContainer.tsx

Lines changed: 39 additions & 54 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,5 @@
11
import React, { useState, useContext, useEffect, createContext } from 'react';
22
import { createMuiTheme, MuiThemeProvider } from '@material-ui/core/styles';
3-
import { makeStyles } from '@material-ui/core/styles';
4-
import Grid from '@material-ui/core/Grid';
53
import { useQuery } from '@apollo/client';
64
import { GET_PROJECTS } from './gqlStrings';
75
import Project from './Project';
@@ -22,15 +20,27 @@ const lightTheme = theme1;
2220
const darkTheme = theme2; // dark mode color in theme.ts not reached
2321

2422

23+
const arrToComponent = (arr) => {
24+
return arr.map((proj, index) => <Project
25+
key= {index}
26+
name = {proj.name}
27+
likes = {proj.likes}
28+
published = {proj.published}
29+
userId = {proj.userId}
30+
username = {proj.username}
31+
createdAt = {proj.createdAt}
32+
id = {proj.id}
33+
comments = {proj.comments}
34+
/>);
35+
};
36+
37+
2538
const ProjectContainer = () => {
2639
const myVar = {};
2740
// Need this for the individual user dasboard, for now, dashboard shows all projects from all users
2841
const userSSID = window.localStorage.getItem('ssid') || 'unavailable';
2942
const username = window.localStorage.getItem('username') || 'unavailable';
30-
// if (userSSID !== 'guest') {
31-
// myVar = { userId: userSSID };
32-
// }
33-
43+
3444
const [isThemeLight, setTheme] = useState(true);
3545

3646
const initialStyle = useContext(styleContext);
@@ -39,11 +49,11 @@ const ProjectContainer = () => {
3949
// --------------------------Sorting Buttons------------------------------------//
4050

4151
// hook for sorting menu
42-
const [selectedOption, setSelectedOption] = useState(null);
52+
const [selectedOption, setSelectedOption] = useState('RATING');
4353

4454
const sortByRating = (projects) => {
4555
// generate a sorted array of public projects based on likes
46-
const sortedRatings = projects.sort((a, b) => b.likes - a.likes);
56+
const sortedRatings = projects.sort((a, b) => b.likes - a.likes);
4757
return sortedRatings;
4858
};
4959

@@ -55,81 +65,56 @@ const ProjectContainer = () => {
5565

5666
const sortByUser = (projects) => {
5767
// generate a sorted array of public projects based on username
58-
const sortedRatings = projects.sort((a, b) => b.user - a.user);
68+
const sortedRatings = projects.sort((a, b) => b.username - a.username);
5969
return sortedRatings;
6070
};
6171
// ===================================================================================== //
6272

73+
// function for selecting drop down sorting menu
74+
const optionClicked = (value) => {
75+
setSelectedOption(value);
76+
};
77+
// ===================================================================================== //
78+
79+
6380
// useQuery hook abstracts fetch request
6481
const { loading, error, data } = useQuery(GET_PROJECTS, { pollInterval: 2000, variables: myVar });
6582
if (loading) return <p>Loading...</p>;
6683
if (error) return <p>Error :{error}</p>;
6784

6885
// based on resolver(getAllProject) for this query, the data is stored in the data object with the key 'getAllProjects'
6986
const projects = data.getAllProjects;
87+
7088
// create array to hold the data recieved in the public dashboard the will be conditionally rendered
71-
let sortedProjects = [];
72-
// create array to hold the components Project of loggin-in users
73-
const userDisplay = [];
74-
// generate an array of Project components based on queried data
75-
projects.forEach((proj, index) => {
76-
const component = <Project
77-
key= {index}
78-
name = {proj.name}
79-
likes = {proj.likes}
80-
published = {proj.published}
81-
userId = {proj.userId}
82-
username = {proj.username}
83-
createdAt = {proj.createdAt}
84-
id = {proj.id}
85-
comments = {proj.comments}
86-
/>;
87-
// sorting the public and private dashboards based on the user's username
88-
if (username === proj.username) userDisplay.push(component);
89-
if (proj.published) {
90-
91-
sortedProjects.push(proj);
92-
}
93-
});
89+
let sortedProjects = projects.filter(proj => proj.published);
90+
const userProjects = projects.filter(proj => proj.username === username);
9491

95-
// function for selecting drop down sorting menu
96-
const optionClicked = (value) => {
97-
setSelectedOption(value);
98-
};
9992
// checking which sorting method was selected from drop down menu and invoking correct sorting function
10093
if (selectedOption === 'DATE') sortedProjects = sortByDate(sortedProjects);
10194
else if (selectedOption === 'USER') sortedProjects = sortByUser(sortedProjects);
10295
else if (selectedOption === 'RATING') sortedProjects = sortByRating(sortedProjects);
10396

97+
98+
// create array to hold the components Project of loggin-in users
99+
// generate an array of Project components based on queried data
100+
const userDisplay = arrToComponent(userProjects);
101+
104102
// create an array of components Project that will be conditionally rendered
105-
const sortedDisplay = [];
106-
sortedProjects.forEach((proj, index) => {
107-
sortedDisplay.push(<Project
108-
key= { index }
109-
name = {proj.name}
110-
likes = {proj.likes}
111-
published = { proj.published }
112-
userId = {proj.userId}
113-
username = {proj.username}
114-
createdAt = {proj.createdAt}
115-
id = {proj.id}
116-
comments = {proj.comments}
117-
/>);
118-
});
103+
const sortedDisplay = arrToComponent(sortedProjects);
119104

120105
return (
121106
<MuiThemeProvider theme={isThemeLight ? lightTheme : darkTheme}>
122107
<div className = "dashboardContainer">
123108
<NavBarDash setTheme={setTheme} styles={[style, setStyle]} isThemeLight={isThemeLight} optionClicked={optionClicked}/>
124109
<h1> Public Dashboard </h1>
125-
<Grid className = "projectContainer" container justify='flex-start' wrap='wrap' spacing={3}>
110+
<div className = "projectContainer">
126111
{sortedDisplay}
127-
</Grid>
112+
</div>
128113
<hr></hr>
129114
<h1> User Dashboard </h1>
130-
<Grid className = "projectContainer" container justify='flex-start' wrap='wrap'>
115+
<div className = "projectContainer">
131116
{userDisplay}
132-
</Grid>
117+
</div>
133118
</div>
134119
</MuiThemeProvider>
135120
);

0 commit comments

Comments
 (0)