From d1ae44a8158a00d642e6c79a80420f585eef2b05 Mon Sep 17 00:00:00 2001
From: eug-vs <eug-vs@keemail.me>
Date: Fri, 3 Jul 2020 21:00:56 +0300
Subject: feat: fetch feedbacks and display app rating

---
 src/pages/HomePage/HomePage.tsx | 68 ++++++++++++++++++++++++++++++++---------
 1 file changed, 53 insertions(+), 15 deletions(-)

(limited to 'src/pages/HomePage/HomePage.tsx')

diff --git a/src/pages/HomePage/HomePage.tsx b/src/pages/HomePage/HomePage.tsx
index c45c271..f3cadee 100644
--- a/src/pages/HomePage/HomePage.tsx
+++ b/src/pages/HomePage/HomePage.tsx
@@ -1,36 +1,69 @@
-import React, { useState } from 'react';
+import React, { useState, useEffect } from 'react';
 import { Typography, Divider, Grid, Button, Link } from '@material-ui/core/';
 import { makeStyles } from '@material-ui/core/styles';
 import TrendingUpIcon from '@material-ui/icons/TrendingUp';
+import { Rating } from '@material-ui/lab';
+import { Feedback } from 'which-types';
 
 import { useNavigate } from '../../hooks/useNavigate';
+import { useAuth } from '../../hooks/useAuth';
+import { get } from '../../requests';
 
 const useStyles = makeStyles(theme => ({
   logo: {
-    width: theme.spacing(32),
-    height: theme.spacing(32)
+    width: theme.spacing(20),
+    height: theme.spacing(20)
   },
-  leftColumn: {
-    display: 'flex',
-    justifyContent: 'center'
-  },
-  title: {
+  score: {
     fontWeight: 'bold'
+  },
+  signup: {
+    marginLeft: theme.spacing(2)
   }
 }));
 
 const HomePage: React.FC = () => {
+  const [feedbacks, setFeedbacks] = useState<Feedback[]>([]);
   const classes = useStyles();
   const { navigate } = useNavigate();
+  const { isAuthenticated } = useAuth();
+
+
+  const rating = feedbacks.length && feedbacks.reduce(
+    (acc: number, feedback: Feedback) => acc + feedback.score,
+    0
+  ) / feedbacks.length;
+
+  useEffect(() => {
+    get('/feedback').then(response => {
+      setFeedbacks(response.data);
+    });
+  }, []);
 
   const handleLetsGo = () => {
     navigate('feed');
   };
 
+  const handleSignUp = () => {
+    navigate('auth');
+  };
+
   return (
     <Grid container spacing={4}>
-      <Grid item xs={4} className={classes.leftColumn}>
-        <img src={process.env.PUBLIC_URL + '/which-logo-512.png'} alt="logo" className={classes.logo}/>
+      <Grid item xs={4}>
+        <Grid container direction="column" spacing={1} alignItems="center">
+          <Grid item>
+              <img src={process.env.PUBLIC_URL + '/which-logo-512.png'} alt="logo" className={classes.logo}/>
+          </Grid>
+          <Grid item>
+            <Rating value={rating} readOnly size="large" />
+          </Grid>
+          <Grid item>
+            <Typography variant="h5" className={classes.score}>
+              User score: {rating.toFixed(1)}
+            </Typography>
+          </Grid>
+        </Grid>
       </Grid>
       <Grid item xs={5}>
         <Grid container direction="column" spacing={6}>
@@ -41,8 +74,17 @@ const HomePage: React.FC = () => {
               <p>Have you ever found yourself stuck between two options, not being able to choose any? This is exactly the problem we are going to solve!</p>
               <p>Share your minor everyday uncertainties with the whole world and see what others think!</p>
               <Button variant="contained" color="primary" size="large" onClick={handleLetsGo}>
-                let's go! 
+                let's go!
               </Button>
+              {!isAuthenticated() && <Button
+                variant="outlined"
+                color="primary"
+                size="large"
+                className={classes.signup}
+                onClick={handleSignUp}
+              >
+                sign up
+              </Button>}
             </Typography>
           </Grid>
           <Grid item>
@@ -79,10 +121,6 @@ const HomePage: React.FC = () => {
               </Button>
             </Typography>
           </Grid>
-          <Grid item>
-            <Typography variant="h4"> Leave feedback </Typography>
-            <Divider />
-          </Grid>
         </Grid>
       </Grid>
     </Grid>
-- 
cgit v1.2.3

