diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/index.js | 4 | ||||
-rw-r--r-- | src/pages/Profile/Profile.js | 26 | ||||
-rw-r--r-- | src/pages/Profile/Registration/Registration.js | 66 | ||||
-rw-r--r-- | src/pages/Timer/Timer.js | 9 |
4 files changed, 83 insertions, 22 deletions
diff --git a/src/index.js b/src/index.js index f90c39a..4db99cf 100644 --- a/src/index.js +++ b/src/index.js @@ -16,6 +16,7 @@ import Profile from "./pages/Profile/Profile"; const App = () => { const [page, setPage] = useState('app'); + const [user, setUser] = useState({ username: 'anonymous', id: null }); const [recentSolutions, setRecentSolutions] = useState([]); const Page = ({ page }) => { @@ -23,6 +24,7 @@ const App = () => { case 'app': return ( <Timer + user={user} recentSolutions={recentSolutions} setRecentSolutions={setRecentSolutions} setPage={setPage} @@ -30,7 +32,7 @@ const App = () => { ); case 'profile': - return <Profile/>; + return <Profile user={user} setUser={setUser} />; case 'scoreboard': return <Scoreboard />; diff --git a/src/pages/Profile/Profile.js b/src/pages/Profile/Profile.js index 3b0de1e..f2c44ef 100644 --- a/src/pages/Profile/Profile.js +++ b/src/pages/Profile/Profile.js @@ -1,13 +1,11 @@ import React from 'react'; import Window from "../../components/Window/Window"; -import ContentSection from "../../components/ContentSection/ContentSection"; import { - TextField, - Button, - Typography, makeStyles, } from "@material-ui/core"; +import Registration from "./Registration/Registration"; +import ContentSection from "../../components/ContentSection/ContentSection"; const useStyles = makeStyles(theme => ({ @@ -16,22 +14,22 @@ const useStyles = makeStyles(theme => ({ }, })); -const Profile = () => { + +const Profile = ({ user, setUser }) => { const classes = useStyles(); return ( <> <Window type="primary"> <div className={classes.primary}> - <ContentSection sectionName="Tell us who you are"> - <p> Here is some text about why you should register at ChronoCube: </p> - <p> - <TextField variant="outlined" color="secondary" label="Username" /> - </p> - <Button variant="contained" color="secondary" size="large"> - Submit! - </Button> - </ContentSection> + { user.id? ( + <ContentSection sectionName={`Welcome back, ${user.username}`}> + + </ContentSection> + ): ( + <Registration setUser={setUser} /> + ) + } </div> </Window> <Window type="secondary" name="History"> diff --git a/src/pages/Profile/Registration/Registration.js b/src/pages/Profile/Registration/Registration.js new file mode 100644 index 0000000..8853a7a --- /dev/null +++ b/src/pages/Profile/Registration/Registration.js @@ -0,0 +1,66 @@ +import React, {useState} from 'react'; + +import { + TextField, + Button, + Checkbox, + FormControlLabel, + Grid, +} from "@material-ui/core"; + +import ContentSection from "../../../components/ContentSection/ContentSection"; +import {get, post} from "../../../requests"; + + +const Registration = ({ setUser }) => { + + const [username, setUsername] = useState(''); + + const handleChange = (event) => { + setUsername(event.target.value); + }; + + const handleSubmit = () => { + post('users/', { username }) + .then(response => { + setUser(response.data); + }) + .catch(err => { + get('users/').then(response => { + setUser(response.data.filter(user => user.username === username)[0]); + }); + }); + }; + + return ( + <ContentSection sectionName="Tell us who you are"> + <p> Choose yourself a username to track your progress and compete with others: </p> + <Grid container direction="column"> + <Grid item> + <TextField + variant="outlined" + color="secondary" + label="Username" + value={username} + onChange={handleChange} + /> + </Grid> + <Grid item> + <FormControlLabel + control={<Checkbox color="secondary" />} + label="Remember me" + /> + </Grid> + <Grid item> + <Button variant="contained" color="secondary" size="large" onClick={handleSubmit}> + Submit! + </Button> + </Grid> + </Grid> + + </ContentSection> + ); +}; + + +export default Registration; diff --git a/src/pages/Timer/Timer.js b/src/pages/Timer/Timer.js index d63c661..83ec0dc 100644 --- a/src/pages/Timer/Timer.js +++ b/src/pages/Timer/Timer.js @@ -8,7 +8,7 @@ import TimerButton from "./TimerButton/TimerButton"; import SmartList from "../../components/SmartList/SmartList"; import SolutionCard from "../../components/SolutionCard/SolutionCard"; -import { Typography, Button, makeStyles } from "@material-ui/core"; +import { Button, makeStyles } from "@material-ui/core"; const useStyles = makeStyles(theme => ({ @@ -20,14 +20,9 @@ const useStyles = makeStyles(theme => ({ }, })); -const Timer = ({ recentSolutions, setRecentSolutions, setPage }) => { +const Timer = ({ user, recentSolutions, setRecentSolutions, setPage }) => { const classes = useStyles(); - const user = { - id: null, - username: 'anonymous', - }; - const registerResult = result => { const solution = { author_id: user.id, result }; post('solutions/', solution).then(response => { |