diff options
author | Eugene Sokolov <eug-vs@keemail.me> | 2020-03-21 17:59:48 +0300 |
---|---|---|
committer | GitHub <noreply@github.com> | 2020-03-21 17:59:48 +0300 |
commit | e89a7a79622d25561dc80a8489ae1f6022aebd73 (patch) | |
tree | e115938b26ee6019b4c349f52bd98fc34a4575e9 /src/pages/Profile/Profile.tsx | |
parent | fe750a9aadfb451b9537bb3cdd79581ef5120c07 (diff) | |
parent | 7f8ab6802c68c46f988ef012fdc88b09e43a9e54 (diff) | |
download | chrono-cube-ui-e89a7a79622d25561dc80a8489ae1f6022aebd73.tar.gz |
Merge pull request #48 from eug-vs/typescript
Migrate project to Typescript
Diffstat (limited to 'src/pages/Profile/Profile.tsx')
-rw-r--r-- | src/pages/Profile/Profile.tsx | 95 |
1 files changed, 95 insertions, 0 deletions
diff --git a/src/pages/Profile/Profile.tsx b/src/pages/Profile/Profile.tsx new file mode 100644 index 0000000..83acb30 --- /dev/null +++ b/src/pages/Profile/Profile.tsx @@ -0,0 +1,95 @@ +import React, { useState, useEffect } from 'react'; + +import { + Button, + makeStyles, +} from '@material-ui/core'; + +import Registration from './Registration'; +import { + Window, + ContentSection, + SmartList, +} from 'react-benzin'; +import { User, Solution, RenderPropTypes } from '../../types'; + +import SolutionCard from '../../components/SolutionCard/SolutionCard'; + +import { get } from '../../requests'; + + +const useStyles = makeStyles(theme => ({ + primary: { + padding: theme.spacing(4), + }, + cell: { + padding: theme.spacing(5), + }, +})); + + +interface PropTypes { + user: User; + setUser: (user: User) => void; +} + + +const Profile: React.FC<PropTypes> = ({ user, setUser }) => { + const classes = useStyles(); + + const [profileSolutions, setProfileSolutions] = useState<Solution[]>([]); + + const handleLogout = (): void => { + setUser({ username: 'anonymous', id: null }); + localStorage.clear(); + }; + + useEffect(() => { + get(`solutions/?author=${user.id}`).then(response => { + setProfileSolutions(response.data.reverse()); + }); + }, [user]); + + const removeSolution = (id: number): void => { + setProfileSolutions(profileSolutions.filter((solution => solution.id !== id))); + }; + + const renderItem: React.FC<RenderPropTypes> = ({ index, style }) => { + return ( + <div style={style} className={classes.cell}> + <SolutionCard data={profileSolutions[index]} removeThisCard={removeSolution} /> + </div> + ); + }; + + return ( + <> + <Window type="primary"> + <div className={classes.primary}> + { user.id? ( + <ContentSection sectionName={`Welcome back, ${user.username}!`}> + <p> Total amount of solutions: {profileSolutions.length} </p> + <p> You can always log out from your account! </p> + <Button variant="contained" color="secondary" onClick={handleLogout}> + Logout + </Button> + </ContentSection> + ): ( + <Registration setUser={setUser} /> + ) + } + </div> + </Window> + <Window type="secondary" name="History"> + <SmartList + itemSize={270} + itemCount={profileSolutions.length} + renderItem={renderItem} + /> + </Window> + </> + ) +}; + + +export default Profile; |