diff options
author | eug-vs <eug-vs@keemail.me> | 2020-08-10 11:19:53 +0300 |
---|---|---|
committer | eug-vs <eug-vs@keemail.me> | 2020-08-10 11:19:53 +0300 |
commit | f97989967ee0b88a8c64f226a4b28a79eeef5fd2 (patch) | |
tree | 9311246c260705c3c89fded54fb0bb688c98beec /src/containers/Profile/Profile.tsx | |
parent | cab8de5c6b246e1aa1376fa2b8666f09b44b6469 (diff) | |
download | which-ui-f97989967ee0b88a8c64f226a4b28a79eeef5fd2.tar.gz |
refactor: remove "Page" from container names
Diffstat (limited to 'src/containers/Profile/Profile.tsx')
-rw-r--r-- | src/containers/Profile/Profile.tsx | 56 |
1 files changed, 56 insertions, 0 deletions
diff --git a/src/containers/Profile/Profile.tsx b/src/containers/Profile/Profile.tsx new file mode 100644 index 0000000..af52e5e --- /dev/null +++ b/src/containers/Profile/Profile.tsx @@ -0,0 +1,56 @@ +import React, { useEffect, useCallback } from 'react'; +import { useHistory, useParams } from 'react-router-dom'; +import { Poll } from 'which-types'; +import { Container } from '@material-ui/core'; + +import ProfileInfo from './ProfileInfo'; +import PollsList from '../../components/PollsList/PollsList'; +import Loading from '../../components/Loading/Loading'; +import { useAuth } from '../../hooks/useAuth'; +import { useUser, useProfile } from '../../hooks/APIClient'; + + +const Profile: React.FC = () => { + const history = useHistory(); + const { username } = useParams(); + const { user } = useAuth(); + + const { data: userInfo, mutate: setUserInfo } = useUser(username); + const { data: polls, mutate: mutatePolls, isValidating } = useProfile(userInfo?._id); + + useEffect(() => { + if (!username) { + if (user) history.push(`/profile/${user.username}`); + else history.push('/login'); + } + }, [username, history, user]); + + + const totalVotes = useCallback( + polls.reduce( + (total: number, current: Poll) => { + const { left, right } = current.contents; + return total + left.votes + right.votes; + }, 0 + ), + [polls] + ); + + return ( + <Container maxWidth="sm" disableGutters> + <ProfileInfo + userInfo={userInfo} + setUserInfo={setUserInfo} + savedPolls={polls.length} + totalVotes={totalVotes} + /> + { + isValidating && !polls + ? <Loading /> + : <PollsList polls={polls} mutate={mutatePolls} /> + } + </Container> + ); +}; + +export default Profile; |