From f4d8ee37400f25d4fec3638b1ba73e8661c30959 Mon Sep 17 00:00:00 2001
From: eug-vs <eug-vs@keemail.me>
Date: Sat, 21 Mar 2020 14:29:05 +0300
Subject: feat: add types.d.ts, migrate Scoreboard

---
 src/pages/Scoreboard/Scoreboard.tsx | 76 +++++++++++++++++++++++++++++++++++++
 1 file changed, 76 insertions(+)
 create mode 100644 src/pages/Scoreboard/Scoreboard.tsx

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

diff --git a/src/pages/Scoreboard/Scoreboard.tsx b/src/pages/Scoreboard/Scoreboard.tsx
new file mode 100644
index 0000000..c6826d2
--- /dev/null
+++ b/src/pages/Scoreboard/Scoreboard.tsx
@@ -0,0 +1,76 @@
+import React, { useEffect, useState } from 'react';
+
+import { makeStyles } from '@material-ui/core/styles';
+
+import { Window, SmartList } from 'react-benzin';
+import { Solution } from '../../types';
+
+import SolutionCard from '../../components/SolutionCard/SolutionCard';
+import Loading from '../../components/Loading/Loading';
+
+import { get } from '../../requests';
+
+
+const useStyles = makeStyles(theme => ({
+  cell: {
+    display: 'flex',
+    justifyContent: 'center',
+    padding: theme.spacing(4),
+
+    '& .MuiCard-root': {
+      width: '30%',
+    }
+  }
+}));
+
+
+interface RenderPropTypes {
+  index: number;
+  style: React.CSSProperties;
+}
+
+
+const Scoreboard: React.FC = () => {
+  const classes = useStyles();
+  const [solutions, setSolutions] = useState<Solution[]>([]);
+
+  const updateSolutions = () => {
+    get('scoreboard/').then(response => {
+        setSolutions(response.data);
+    });
+  };
+
+  const removeSolution = (id: number) => {
+    updateSolutions();
+  };
+
+  useEffect(() => {
+    setTimeout(updateSolutions, 300);
+  }, []);
+
+  const renderItem: React.FC<RenderPropTypes> = ({ index, style }) => {
+    return (
+      <div style={style} className={classes.cell}>
+        <SolutionCard data={solutions[index]} removeThisCard={removeSolution}/>
+      </div>
+    )
+  };
+
+  return (
+    <Window type="mono">
+      { solutions.length === 0 &&
+      <div className={classes.cell}>
+        <Loading/>
+      </div>
+      }
+      <SmartList
+        itemSize={300}
+        itemCount={solutions.length}
+        renderItem={renderItem}
+      />
+    </Window>
+  )
+};
+
+
+export default Scoreboard;
-- 
cgit v1.2.3

