From 7ba15a22d1bd57e7c26ff2d5fccf5505aaf8619e Mon Sep 17 00:00:00 2001
From: eug-vs <eug-vs@keemail.me>
Date: Mon, 10 Aug 2020 00:28:39 +0300
Subject: refactor: move pages -> containers

---
 src/containers/ProfilePage/ProfilePage.tsx | 55 ++++++++++++++++++++++++++++++
 1 file changed, 55 insertions(+)
 create mode 100644 src/containers/ProfilePage/ProfilePage.tsx

(limited to 'src/containers/ProfilePage/ProfilePage.tsx')

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;
-- 
cgit v1.2.3

