aboutsummaryrefslogtreecommitdiff
path: root/src/containers/ProfilePage/ProfilePage.tsx
diff options
context:
space:
mode:
authoreug-vs <eug-vs@keemail.me>2020-08-10 00:28:39 +0300
committereug-vs <eug-vs@keemail.me>2020-08-10 00:28:39 +0300
commit7ba15a22d1bd57e7c26ff2d5fccf5505aaf8619e (patch)
tree8a71d8dd4bf89f09f14aee2636f519572e95f891 /src/containers/ProfilePage/ProfilePage.tsx
parentdfa6f0a8d1415539e1ff6a3ca848627bbe87b470 (diff)
downloadwhich-ui-7ba15a22d1bd57e7c26ff2d5fccf5505aaf8619e.tar.gz
refactor: move pages -> containers
Diffstat (limited to 'src/containers/ProfilePage/ProfilePage.tsx')
-rw-r--r--src/containers/ProfilePage/ProfilePage.tsx55
1 files changed, 55 insertions, 0 deletions
diff --git a/src/containers/ProfilePage/ProfilePage.tsx b/src/containers/ProfilePage/ProfilePage.tsx
new file mode 100644
index 0000000..db27d25
--- /dev/null
+++ b/src/containers/ProfilePage/ProfilePage.tsx
@@ -0,0 +1,55 @@
+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 Feed from '../../components/Feed/Feed';
+import Loading from '../../components/Loading/Loading';
+import { useAuth } from '../../hooks/useAuth';
+import { useUser, useProfile } from '../../hooks/APIClient';
+
+
+const ProfilePage: React.FC = () => {
+ const history = useHistory();
+ const { username } = useParams();
+ const { user } = useAuth();
+
+ const { data: userInfo, mutate: setUserInfo } = useUser(username);
+ const { data: polls, 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}
+ />
+ {!polls.length && isValidating
+ ? <Loading />
+ : <Feed polls={polls} />
+ }
+ </Container>
+ );
+};
+
+export default ProfilePage;