added cards to profile

This commit is contained in:
Joshua Hsueh 2021-04-10 17:01:22 -04:00
parent 8f11ed7947
commit 7260ae0f96
5 changed files with 35526 additions and 35419 deletions

70715
package-lock.json generated

File diff suppressed because it is too large Load Diff

View File

@ -1,51 +1,51 @@
{ {
"name": "carpool-frontend", "name": "carpool-frontend",
"version": "0.1.0", "version": "0.1.0",
"private": true, "private": true,
"dependencies": { "dependencies": {
"@material-ui/core": "^4.11.3", "@material-ui/core": "^4.11.3",
"@material-ui/icons": "^4.11.2", "@material-ui/icons": "^4.11.2",
"@testing-library/jest-dom": "^5.11.4", "@testing-library/jest-dom": "^5.11.4",
"@testing-library/react": "^11.1.0", "@testing-library/react": "^11.1.0",
"@testing-library/user-event": "^12.1.10", "@testing-library/user-event": "^12.1.10",
"@types/bootstrap": "^5.0.12", "@types/bootstrap": "^5.0.12",
"@types/node": "^14.14.37", "@types/node": "^14.14.37",
"@types/react": "^17.0.3", "@types/react": "^17.0.3",
"@types/react-router-dom": "^5.1.7", "@types/react-router-dom": "^5.1.7",
"axios": "^0.21.1", "axios": "^0.21.1",
"bootstrap": "^4.6.0", "bootstrap": "^4.6.0",
"jquery": "^3.6.0", "jquery": "^3.6.0",
"popper.js": "^1.16.1", "popper.js": "^1.16.1",
"react": "^17.0.2", "react": "^17.0.2",
"react-bootstrap": "^1.5.2", "react-bootstrap": "^1.5.2",
"react-dom": "^17.0.2", "react-dom": "^17.0.2",
"react-router-dom": "^5.2.0", "react-router-dom": "^5.2.0",
"react-scripts": "4.0.3", "react-scripts": "4.0.3",
"typescript": "^4.2.4", "typescript": "^4.2.4",
"web-vitals": "^1.0.1" "web-vitals": "^1.0.1"
}, },
"scripts": { "scripts": {
"start": "react-scripts start", "start": "react-scripts start",
"build": "react-scripts build", "build": "react-scripts build",
"test": "react-scripts test", "test": "react-scripts test",
"eject": "react-scripts eject" "eject": "react-scripts eject"
}, },
"eslintConfig": { "eslintConfig": {
"extends": [ "extends": [
"react-app", "react-app",
"react-app/jest" "react-app/jest"
] ]
}, },
"browserslist": { "browserslist": {
"production": [ "production": [
">0.2%", ">0.2%",
"not dead", "not dead",
"not op_mini all" "not op_mini all"
], ],
"development": [ "development": [
"last 1 chrome version", "last 1 chrome version",
"last 1 firefox version", "last 1 firefox version",
"last 1 safari version" "last 1 safari version"
] ]
} }
} }

View File

@ -1,6 +1,22 @@
import React, { useState, useEffect } from 'react'; import React, { useState, useEffect } from 'react';
import { API_ENDPOINT } from '../api/api'; import { API_ENDPOINT } from '../api/api';
import { makeStyles } from '@material-ui/core/styles';
import Card from '@material-ui/core/Card';
import CardActionArea from '@material-ui/core/CardActionArea';
import CardActions from '@material-ui/core/CardActions';
import CardContent from '@material-ui/core/CardContent';
import CardMedia from '@material-ui/core/CardMedia';
import Button from '@material-ui/core/Button';
import Typography from '@material-ui/core/Typography';
const useStyles = makeStyles({
root: {
maxWidth: 345,
},
media: {
height: 140,
},
});
const MyPools = () => { const MyPools = () => {
// const id = props.match.params.id; // const id = props.match.params.id;
const [pools, setPools] = useState([ const [pools, setPools] = useState([
@ -67,6 +83,8 @@ const MyPools = () => {
const maybePluralize = (count: number, noun: string, suffix = 's') => const maybePluralize = (count: number, noun: string, suffix = 's') =>
`${count} ${noun}${count !== 1 ? suffix : ''}`; `${count} ${noun}${count !== 1 ? suffix : ''}`;
const classes = useStyles();
return ( return (
<div className="bg-dark" style={{ minHeight: '100vh' }}> <div className="bg-dark" style={{ minHeight: '100vh' }}>
<h1 <h1
@ -92,22 +110,32 @@ const MyPools = () => {
background = '#FFFFFF'; background = '#FFFFFF';
} }
return ( return (
<div <Card className={classes.root + 'd-inline-flex'}>
className="card card-body text-left" <CardActionArea>
style={{ backgroundColor: background }} <CardContent>
> <Typography gutterBottom variant="h5" component="h2">
<a href={'/Pool/' + pool.id} className="card-title"> {pool.pool_title}
{pool.pool_title} </Typography>
</a> <Typography
<p className="text-left"> variant="body2"
Capacity: {pool.participants.length} / {pool.capacity} color="textSecondary"
</p> component="p"
<p className="text-left">Start Time: {pool.start_time}</p> >
<p className="text-left">End Time: {pool.end_time}</p> Lizards are a widespread group of squamate reptiles, with
<p className="text-warning"> over 6,000 species, ranging across all continents except
{maybePluralize(pool.comments.length, 'comment')} Antarctica
</p> </Typography>
</div> </CardContent>
</CardActionArea>
<CardActions>
<Button size="small" color="primary">
Share
</Button>
<Button size="small" color="primary">
Learn More
</Button>
</CardActions>
</Card>
); );
})} })}
</div> </div>

View File

@ -1,5 +1,22 @@
import React, { useState, useEffect } from 'react'; import React, { useState, useEffect } from 'react';
import { API_ENDPOINT } from '../api/api';
import { makeStyles } from '@material-ui/core/styles';
import Card from '@material-ui/core/Card';
import CardActionArea from '@material-ui/core/CardActionArea';
import CardActions from '@material-ui/core/CardActions';
import CardContent from '@material-ui/core/CardContent';
import CardMedia from '@material-ui/core/CardMedia';
import Button from '@material-ui/core/Button';
import Typography from '@material-ui/core/Typography';
const useStyles = makeStyles({
root: {
maxWidth: 345,
},
media: {
height: 140,
},
});
const Profile = () => { const Profile = () => {
const [state, setState] = useState({ const [state, setState] = useState({
user: { user: {
@ -45,6 +62,7 @@ const Profile = () => {
], ],
groups: [], groups: [],
}); });
const classes = useStyles();
const callAPI = () => { const callAPI = () => {
fetch(`${process.env.REACT_APP_API_ENDPOINT}/profile/`) fetch(`${process.env.REACT_APP_API_ENDPOINT}/profile/`)
@ -60,7 +78,10 @@ const Profile = () => {
callAPI(); callAPI();
}, []); }, []);
return ( return (
<div className="" style={{ minHeight: '100vh', backgroundColor: '#F1EAE8' }}> <div
className=""
style={{ minHeight: '100vh', backgroundColor: '#F1EAE8' }}
>
<h1 <h1
className="d-flex justify-content-center p-4" className="d-flex justify-content-center p-4"
style={{ backgroundColor: '#F1EAE8', fontFamily: 'Courier New' }} style={{ backgroundColor: '#F1EAE8', fontFamily: 'Courier New' }}
@ -68,19 +89,52 @@ const Profile = () => {
Profile Profile
</h1> </h1>
<div className="container" style={{ fontFamily: 'Courier New' }}> <div className="container" style={{ fontFamily: 'Courier New' }}>
<h2><u>{state.user.username}'s Pools</u></h2> <h2>
<u>{state.user.username}'s Pools</u>
</h2>
<div className=""> <div className="">
{state.pools.map((pool) => { {state.pools.map((pool) => {
return ( return (
<div <Card className={classes.root + 'd-inline-flex'}>
className="text-left m-2 p-1" <CardActionArea href={'/pool/' + pool.id}>
style={{minHeight: 50, minWidth: '200px', maxWidth: '200px', border: '3px #000000 solid', verticalAlign: 'center', textAlign: 'center', padding: '10px 10px 5px 10px', margin: '0px 10px 0px 10px', display: 'inline'}}> <CardContent>
<a href={'pool/' + pool.id}>{pool.title}</a> <Typography gutterBottom variant="h5" component="h2">
</div> {pool.title}
</Typography>
<Typography
variant="body2"
color="textSecondary"
component="p"
>
{pool.description}
</Typography>
</CardContent>
</CardActionArea>
<CardActions>
<Button
size="small"
color="primary"
onClick={() => {
let link: string = 'localhost:3000/pool/' + pool.id;
navigator.clipboard.writeText(link);
}}
>
Share
</Button>
<Button
href={'/pool/' + pool.id}
size="small"
color="primary"
>
Learn More
</Button>
</CardActions>
</Card>
); );
})} })}
</div> </div>
</div> </div>
<script></script>
</div> </div>
); );
}; };

View File

@ -9460,7 +9460,7 @@
"strip-ansi" "6.0.0" "strip-ansi" "6.0.0"
"text-table" "0.2.0" "text-table" "0.2.0"
"react-dom@^17.0.2": "react-dom@^17.0.2", "react-dom@>=16.3.0", "react-dom@>=16.8.0":
"integrity" "sha512-s4h96KtLDUQlsENhMn1ar8t2bEa+q/YAtj8pPPdIjPDGBDIVNsrD9aXNWqspUe6AzKCIG0C1HZZLqLV7qpOBGA==" "integrity" "sha512-s4h96KtLDUQlsENhMn1ar8t2bEa+q/YAtj8pPPdIjPDGBDIVNsrD9aXNWqspUe6AzKCIG0C1HZZLqLV7qpOBGA=="
"resolved" "https://registry.npmjs.org/react-dom/-/react-dom-17.0.2.tgz" "resolved" "https://registry.npmjs.org/react-dom/-/react-dom-17.0.2.tgz"
"version" "17.0.2" "version" "17.0.2"
@ -9628,7 +9628,7 @@
"loose-envify" "^1.4.0" "loose-envify" "^1.4.0"
"prop-types" "^15.6.2" "prop-types" "^15.6.2"
"react@^17.0.2": "react@^17.0.2", "react@>=0.14.0", "react@>=15.0.0", "react@>=16.3.0", "react@>=16.3.2", "react@>=16.8.0":
"integrity" "sha512-gnhPt75i/dq/z3/6q/0asP78D0u592D5L1pd7M8P+dck6Fu/jJeL6iVVK23fptSUZj8Vjf++7wXA8UNclGQcbA==" "integrity" "sha512-gnhPt75i/dq/z3/6q/0asP78D0u592D5L1pd7M8P+dck6Fu/jJeL6iVVK23fptSUZj8Vjf++7wXA8UNclGQcbA=="
"resolved" "https://registry.npmjs.org/react/-/react-17.0.2.tgz" "resolved" "https://registry.npmjs.org/react/-/react-17.0.2.tgz"
"version" "17.0.2" "version" "17.0.2"