From 0fbc8fa98e345c3740fb4e05db8fd13c102f10cd Mon Sep 17 00:00:00 2001 From: bmodee <bjomo323@student.liu.se> Date: Tue, 13 Apr 2021 09:31:41 +0200 Subject: [PATCH 1/6] add dashboard file and widget folder --- client/src/pages/admin/AdminPage.tsx | 5 ++--- client/src/pages/admin/dashboard/Dashboard.tsx | 16 ++++++++++++++++ .../admin/dashboard/widgets/CurrentUser.tsx | 16 ++++++++++++++++ 3 files changed, 34 insertions(+), 3 deletions(-) create mode 100644 client/src/pages/admin/dashboard/Dashboard.tsx create mode 100644 client/src/pages/admin/dashboard/widgets/CurrentUser.tsx diff --git a/client/src/pages/admin/AdminPage.tsx b/client/src/pages/admin/AdminPage.tsx index 921f721d..c4e43b6d 100644 --- a/client/src/pages/admin/AdminPage.tsx +++ b/client/src/pages/admin/AdminPage.tsx @@ -23,6 +23,7 @@ import { getRoles } from '../../actions/roles' import { logoutUser } from '../../actions/user' import { useAppDispatch, useAppSelector } from '../../hooks' import CompetitionManager from './competitions/CompetitionManager' +import Dashboard from './dashboard/Dashboard' import RegionManager from './regions/Regions' import { LeftDrawer } from './styled' import UserManager from './users/UserManager' @@ -138,9 +139,7 @@ const AdminView: React.FC = () => { <div className={classes.toolbar} /> <Switch> <Route exact path={[path, `${path}/startsida`]}> - <Typography variant="h1" noWrap> - Startsida - </Typography> + <Dashboard /> </Route> <Route path={`${path}/regioner`}> <RegionManager /> diff --git a/client/src/pages/admin/dashboard/Dashboard.tsx b/client/src/pages/admin/dashboard/Dashboard.tsx new file mode 100644 index 00000000..a8cd1ff5 --- /dev/null +++ b/client/src/pages/admin/dashboard/Dashboard.tsx @@ -0,0 +1,16 @@ +import Box from '@material-ui/core/Box' +import React from 'react' +import CurrentUser from './widgets/CurrentUser' +// import * from '@material-ui/core' + +const Dashboard: React.FC = () => { + return ( + <div className="widget-container"> + <Box display="flex" flexDirection="row" p={1} m={1} bgcolor="text.disabled"> + <CurrentUser /> + </Box> + </div> + ) +} + +export default Dashboard diff --git a/client/src/pages/admin/dashboard/widgets/CurrentUser.tsx b/client/src/pages/admin/dashboard/widgets/CurrentUser.tsx new file mode 100644 index 00000000..f81be4eb --- /dev/null +++ b/client/src/pages/admin/dashboard/widgets/CurrentUser.tsx @@ -0,0 +1,16 @@ +import { Box } from '@material-ui/core' +import React from 'react' + +// import * from '@material-ui/core' + +const CurrentUser: React.FC = () => { + return ( + <div> + <Box color="text.primary" bgcolor="secondary.main" fontFamily="h3.fontFamily" width="200%" height="200%"> + Current User Widget + </Box> + </div> + ) +} + +export default CurrentUser -- GitLab From a4529393f5140f500334424d418efa5aa23fcd98 Mon Sep 17 00:00:00 2001 From: bmodee <bjomo323@student.liu.se> Date: Tue, 13 Apr 2021 11:10:11 +0200 Subject: [PATCH 2/6] add styling and dashboard grid --- client/src/pages/admin/AdminPage.tsx | 4 +- .../src/pages/admin/dashboard/Dashboard.tsx | 53 ++++++++++++++++--- .../admin/dashboard/widgets/CurrentUser.tsx | 4 +- 3 files changed, 52 insertions(+), 9 deletions(-) diff --git a/client/src/pages/admin/AdminPage.tsx b/client/src/pages/admin/AdminPage.tsx index c4e43b6d..a0dbe2bd 100644 --- a/client/src/pages/admin/AdminPage.tsx +++ b/client/src/pages/admin/AdminPage.tsx @@ -46,7 +46,9 @@ const useStyles = makeStyles((theme: Theme) => content: { flexGrow: 1, backgroundColor: theme.palette.background.default, - paddingLeft: theme.spacing(31), + paddingTop: theme.spacing(2), + paddingLeft: theme.spacing(35), + paddingRight: theme.spacing(5), }, }) ) diff --git a/client/src/pages/admin/dashboard/Dashboard.tsx b/client/src/pages/admin/dashboard/Dashboard.tsx index a8cd1ff5..e3139d72 100644 --- a/client/src/pages/admin/dashboard/Dashboard.tsx +++ b/client/src/pages/admin/dashboard/Dashboard.tsx @@ -1,14 +1,55 @@ -import Box from '@material-ui/core/Box' +import Grid from '@material-ui/core/Grid' +import Paper from '@material-ui/core/Paper' +import { createStyles, makeStyles, Theme } from '@material-ui/core/styles' import React from 'react' import CurrentUser from './widgets/CurrentUser' -// import * from '@material-ui/core' + +const useStyles = makeStyles((theme: Theme) => + createStyles({ + root: { + flexGrow: 1, + }, + paper: { + padding: theme.spacing(2), + textAlign: 'center', + color: theme.palette.text.secondary, + }, + }) +) const Dashboard: React.FC = () => { + const classes = useStyles() + return ( - <div className="widget-container"> - <Box display="flex" flexDirection="row" p={1} m={1} bgcolor="text.disabled"> - <CurrentUser /> - </Box> + <div className={classes.root}> + <div> + <Grid container spacing={3}> + <Grid item xs={12}> + <Paper className={classes.paper}>Dashboard Header</Paper> + </Grid> + <Grid item xs={6}> + <Paper className={classes.paper}>Widget 1</Paper> + </Grid> + <Grid item xs={6}> + <Paper className={classes.paper}>Widget 2</Paper> + </Grid> + <Grid item xs={3}> + <Paper className={classes.paper}>Widget 3</Paper> + </Grid> + <Grid item xs={3}> + <Paper className={classes.paper}> + Widget 4 + <CurrentUser /> + </Paper> + </Grid> + <Grid item xs={3}> + <Paper className={classes.paper}>Widget 5</Paper> + </Grid> + <Grid item xs={3}> + <Paper className={classes.paper}>Widget 6</Paper> + </Grid> + </Grid> + </div> </div> ) } diff --git a/client/src/pages/admin/dashboard/widgets/CurrentUser.tsx b/client/src/pages/admin/dashboard/widgets/CurrentUser.tsx index f81be4eb..b197e7b0 100644 --- a/client/src/pages/admin/dashboard/widgets/CurrentUser.tsx +++ b/client/src/pages/admin/dashboard/widgets/CurrentUser.tsx @@ -6,8 +6,8 @@ import React from 'react' const CurrentUser: React.FC = () => { return ( <div> - <Box color="text.primary" bgcolor="secondary.main" fontFamily="h3.fontFamily" width="200%" height="200%"> - Current User Widget + <Box color="text.primary" bgcolor="secondary.main" fontFamily="h3.fontFamily" width="100%" height="100%"> + Current user info </Box> </div> ) -- GitLab From fe0eefb374f47b25bf1433eb578b2bffc60b26ce Mon Sep 17 00:00:00 2001 From: bmodee <bjomo323@student.liu.se> Date: Tue, 13 Apr 2021 12:05:10 +0200 Subject: [PATCH 3/6] add 4 widgets to dashboard --- client/package-lock.json | 115 ++++++++++++++++++ client/package.json | 3 + .../src/pages/admin/dashboard/Dashboard.tsx | 26 +++- .../admin/dashboard/widgets/CurrentUser.tsx | 10 +- .../dashboard/widgets/NumberOfRegions.tsx | 26 ++++ .../admin/dashboard/widgets/NumberOfRoles.tsx | 26 ++++ .../admin/dashboard/widgets/NumberOfUsers.tsx | 27 ++++ 7 files changed, 223 insertions(+), 10 deletions(-) create mode 100644 client/src/pages/admin/dashboard/widgets/NumberOfRegions.tsx create mode 100644 client/src/pages/admin/dashboard/widgets/NumberOfRoles.tsx create mode 100644 client/src/pages/admin/dashboard/widgets/NumberOfUsers.tsx diff --git a/client/package-lock.json b/client/package-lock.json index b08413fa..7e73859f 100644 --- a/client/package-lock.json +++ b/client/package-lock.json @@ -1125,6 +1125,49 @@ "resolved": "https://registry.npmjs.org/@csstools/normalize.css/-/normalize.css-10.1.0.tgz", "integrity": "sha512-ij4wRiunFfaJxjB0BdrYHIH8FxBJpOwNPhhAcunlmPdXudL1WQV1qoP9un6JsEBAgQH+7UXyyjh0g7jTxXK6tg==" }, + "@devexpress/dx-chart-core": { + "version": "2.7.5", + "resolved": "https://registry.npmjs.org/@devexpress/dx-chart-core/-/dx-chart-core-2.7.5.tgz", + "integrity": "sha512-ZSpBN7SjnOhBOcvmuYZ5U+XyUYKlsTrYXCYMfFH2qXwvqh0e0UbhzW1FPfDXdWqx0Y52MtPX0HJrBC4QqH7Bcg==", + "requires": { + "d3-array": "^2.4.0", + "d3-scale": "^3.2.0", + "d3-shape": "^1.3.7" + } + }, + "@devexpress/dx-core": { + "version": "2.7.5", + "resolved": "https://registry.npmjs.org/@devexpress/dx-core/-/dx-core-2.7.5.tgz", + "integrity": "sha512-VQQkz0uUqQ7YuVZeBEx1JFqpSSe5Bz9Qy2T0XAbilBQ8IItj74xjzaFMCNjuASAKXOJGtG0RUh+BOKrMGV7jlg==" + }, + "@devexpress/dx-react-chart": { + "version": "2.7.5", + "resolved": "https://registry.npmjs.org/@devexpress/dx-react-chart/-/dx-react-chart-2.7.5.tgz", + "integrity": "sha512-j3nPsHrMiCbgm6olZCykxHOxxJ2XXG0CVihMYGOoyenM74Ed+NIaLi1bk2VtxKZdEPB5UrWgU10rd9SLH45BsQ==", + "requires": { + "@devexpress/dx-chart-core": "2.7.5", + "d3-scale": "^3.2.0", + "d3-shape": "^1.3.7" + } + }, + "@devexpress/dx-react-chart-material-ui": { + "version": "2.7.5", + "resolved": "https://registry.npmjs.org/@devexpress/dx-react-chart-material-ui/-/dx-react-chart-material-ui-2.7.5.tgz", + "integrity": "sha512-uS450uSP1D6mZ2jgtueShqaATNRVqJEwqhgyRQUXL/gQyTrTCvM61TC5NLyEYCOW6RkiHK1BabWbhJlVATZbeg==", + "requires": { + "clsx": "^1.0.4", + "prop-types": "^15.7.2" + } + }, + "@devexpress/dx-react-core": { + "version": "2.7.5", + "resolved": "https://registry.npmjs.org/@devexpress/dx-react-core/-/dx-react-core-2.7.5.tgz", + "integrity": "sha512-YwJ4l8nnMs/vghqamo8OzirDnrbT1ZNIcMP5xJFJJQIyfYAXvGGDS4yLeYI4cwitBg/d2O4jMOReXDB8tUaDDQ==", + "requires": { + "@devexpress/dx-core": "2.7.5", + "prop-types": "^15.7.2" + } + }, "@emotion/hash": { "version": "0.8.0", "resolved": "https://registry.npmjs.org/@emotion/hash/-/hash-0.8.0.tgz", @@ -5416,6 +5459,73 @@ "type": "^1.0.1" } }, + "d3-array": { + "version": "2.12.1", + "resolved": "https://registry.npmjs.org/d3-array/-/d3-array-2.12.1.tgz", + "integrity": "sha512-B0ErZK/66mHtEsR1TkPEEkwdy+WDesimkM5gpZr5Dsg54BiTA5RXtYW5qTLIAcekaS9xfZrzBLF/OAkB3Qn1YQ==", + "requires": { + "internmap": "^1.0.0" + } + }, + "d3-color": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/d3-color/-/d3-color-2.0.0.tgz", + "integrity": "sha512-SPXi0TSKPD4g9tw0NMZFnR95XVgUZiBH+uUTqQuDu1OsE2zomHU7ho0FISciaPvosimixwHFl3WHLGabv6dDgQ==" + }, + "d3-format": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/d3-format/-/d3-format-2.0.0.tgz", + "integrity": "sha512-Ab3S6XuE/Q+flY96HXT0jOXcM4EAClYFnRGY5zsjRGNy6qCYrQsMffs7cV5Q9xejb35zxW5hf/guKw34kvIKsA==" + }, + "d3-interpolate": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/d3-interpolate/-/d3-interpolate-2.0.1.tgz", + "integrity": "sha512-c5UhwwTs/yybcmTpAVqwSFl6vrQ8JZJoT5F7xNFK9pymv5C0Ymcc9/LIJHtYIggg/yS9YHw8i8O8tgb9pupjeQ==", + "requires": { + "d3-color": "1 - 2" + } + }, + "d3-path": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/d3-path/-/d3-path-1.0.9.tgz", + "integrity": "sha512-VLaYcn81dtHVTjEHd8B+pbe9yHWpXKZUC87PzoFmsFrJqgFwDe/qxfp5MlfsfM1V5E/iVt0MmEbWQ7FVIXh/bg==" + }, + "d3-scale": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/d3-scale/-/d3-scale-3.2.4.tgz", + "integrity": "sha512-PG6gtpbPCFqKbvdBEswQcJcTzHC8VEd/XzezF5e68KlkT4/ggELw/nR1tv863jY6ufKTvDlzCMZvhe06codbbA==", + "requires": { + "d3-array": "^2.3.0", + "d3-format": "1 - 2", + "d3-interpolate": "1.2.0 - 2", + "d3-time": "1 - 2", + "d3-time-format": "2 - 3" + } + }, + "d3-shape": { + "version": "1.3.7", + "resolved": "https://registry.npmjs.org/d3-shape/-/d3-shape-1.3.7.tgz", + "integrity": "sha512-EUkvKjqPFUAZyOlhY5gzCxCeI0Aep04LwIRpsZ/mLFelJiUfnK56jo5JMDSE7yyP2kLSb6LtF+S5chMk7uqPqw==", + "requires": { + "d3-path": "1" + } + }, + "d3-time": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/d3-time/-/d3-time-2.1.1.tgz", + "integrity": "sha512-/eIQe/eR4kCQwq7yxi7z4c6qEXf2IYGcjoWB5OOQy4Tq9Uv39/947qlDcN2TLkiTzQWzvnsuYPB9TrWaNfipKQ==", + "requires": { + "d3-array": "2" + } + }, + "d3-time-format": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/d3-time-format/-/d3-time-format-3.0.0.tgz", + "integrity": "sha512-UXJh6EKsHBTjopVqZBhFysQcoXSv/5yLONZvkQ5Kk3qbwiUYkdX17Xa1PT6U1ZWXGGfB1ey5L8dKMlFq2DO0Ag==", + "requires": { + "d3-time": "1 - 2" + } + }, "damerau-levenshtein": { "version": "1.0.6", "resolved": "https://registry.npmjs.org/damerau-levenshtein/-/damerau-levenshtein-1.0.6.tgz", @@ -8492,6 +8602,11 @@ "side-channel": "^1.0.4" } }, + "internmap": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/internmap/-/internmap-1.0.1.tgz", + "integrity": "sha512-lDB5YccMydFBtasVtxnZ3MRBHuaoE8GKsppq+EchKL2U4nK/DmEpPHNH8MZe5HkMtpSiTSOZwfN0tzYjO/lJEw==" + }, "ip": { "version": "1.1.5", "resolved": "https://registry.npmjs.org/ip/-/ip-1.1.5.tgz", diff --git a/client/package.json b/client/package.json index f41350a6..2d393d3d 100644 --- a/client/package.json +++ b/client/package.json @@ -3,6 +3,9 @@ "version": "0.1.0", "private": true, "dependencies": { + "@devexpress/dx-react-chart": "^2.7.5", + "@devexpress/dx-react-chart-material-ui": "^2.7.5", + "@devexpress/dx-react-core": "^2.7.5", "@material-ui/core": "^4.11.3", "@material-ui/icons": "^4.11.2", "@material-ui/lab": "^4.0.0-alpha.57", diff --git a/client/src/pages/admin/dashboard/Dashboard.tsx b/client/src/pages/admin/dashboard/Dashboard.tsx index e3139d72..07426279 100644 --- a/client/src/pages/admin/dashboard/Dashboard.tsx +++ b/client/src/pages/admin/dashboard/Dashboard.tsx @@ -3,6 +3,9 @@ import Paper from '@material-ui/core/Paper' import { createStyles, makeStyles, Theme } from '@material-ui/core/styles' import React from 'react' import CurrentUser from './widgets/CurrentUser' +import NumberOfRegions from './widgets/NumberOfRegions' +import NumberOfRoles from './widgets/NumberOfRoles' +import NumberOfUsers from './widgets/NumberOfUsers' const useStyles = makeStyles((theme: Theme) => createStyles({ @@ -25,25 +28,36 @@ const Dashboard: React.FC = () => { <div> <Grid container spacing={3}> <Grid item xs={12}> - <Paper className={classes.paper}>Dashboard Header</Paper> + <Paper className={classes.paper}> + <h1>Dashboard Header</h1> + </Paper> </Grid> <Grid item xs={6}> - <Paper className={classes.paper}>Widget 1</Paper> + <Paper className={classes.paper}> + <h1>Du är inloggad som:</h1> + <CurrentUser /> + </Paper> </Grid> <Grid item xs={6}> <Paper className={classes.paper}>Widget 2</Paper> </Grid> <Grid item xs={3}> - <Paper className={classes.paper}>Widget 3</Paper> + <Paper className={classes.paper}> + <h1>Antal Användare:</h1> + <NumberOfUsers /> + </Paper> </Grid> <Grid item xs={3}> <Paper className={classes.paper}> - Widget 4 - <CurrentUser /> + <h1>Antal Regioner:</h1> + <NumberOfRegions /> </Paper> </Grid> <Grid item xs={3}> - <Paper className={classes.paper}>Widget 5</Paper> + <Paper className={classes.paper}> + <h1>Antal Roller:</h1> + <NumberOfRoles /> + </Paper> </Grid> <Grid item xs={3}> <Paper className={classes.paper}>Widget 6</Paper> diff --git a/client/src/pages/admin/dashboard/widgets/CurrentUser.tsx b/client/src/pages/admin/dashboard/widgets/CurrentUser.tsx index b197e7b0..1c61a808 100644 --- a/client/src/pages/admin/dashboard/widgets/CurrentUser.tsx +++ b/client/src/pages/admin/dashboard/widgets/CurrentUser.tsx @@ -1,14 +1,16 @@ -import { Box } from '@material-ui/core' import React from 'react' +import { useAppSelector } from '../../../../hooks' // import * from '@material-ui/core' const CurrentUser: React.FC = () => { + const currentUser = useAppSelector((state: { user: { userInfo: any } }) => state.user.userInfo) return ( <div> - <Box color="text.primary" bgcolor="secondary.main" fontFamily="h3.fontFamily" width="100%" height="100%"> - Current user info - </Box> + <div>Namn: {currentUser.name}</div> + <div>Email: {currentUser.email}</div> + <div>Region: {currentUser.city.name}</div> + <div>Roll: {currentUser.role.name}</div> </div> ) } diff --git a/client/src/pages/admin/dashboard/widgets/NumberOfRegions.tsx b/client/src/pages/admin/dashboard/widgets/NumberOfRegions.tsx new file mode 100644 index 00000000..f8757762 --- /dev/null +++ b/client/src/pages/admin/dashboard/widgets/NumberOfRegions.tsx @@ -0,0 +1,26 @@ +import { Box } from '@material-ui/core' +import React, { useEffect } from 'react' +import { getSearchUsers } from '../../../../actions/searchUser' +import { useAppDispatch, useAppSelector } from '../../../../hooks' + +// import * from '@material-ui/core' + +const NumberOfRegions: React.FC = () => { + const cities = useAppSelector((state) => state.cities.cities) + const dispatch = useAppDispatch() + + useEffect(() => { + dispatch(getSearchUsers()) + }, []) + return ( + <div> + <Box color="text.primary" bgcolor="" fontFamily="h3.fontFamily" width="100%" height="100%"> + <div> + <h2>{cities.length} </h2> + </div> + </Box> + </div> + ) +} + +export default NumberOfRegions diff --git a/client/src/pages/admin/dashboard/widgets/NumberOfRoles.tsx b/client/src/pages/admin/dashboard/widgets/NumberOfRoles.tsx new file mode 100644 index 00000000..b94dcc05 --- /dev/null +++ b/client/src/pages/admin/dashboard/widgets/NumberOfRoles.tsx @@ -0,0 +1,26 @@ +import { Box } from '@material-ui/core' +import React, { useEffect } from 'react' +import { getSearchUsers } from '../../../../actions/searchUser' +import { useAppDispatch, useAppSelector } from '../../../../hooks' + +// import * from '@material-ui/core' + +const NumberOfRoles: React.FC = () => { + const roles = useAppSelector((state) => state.roles.roles) + const dispatch = useAppDispatch() + + useEffect(() => { + dispatch(getSearchUsers()) + }, []) + return ( + <div> + <Box color="text.primary" bgcolor="" fontFamily="h3.fontFamily" width="100%" height="100%"> + <div> + <h2>{roles.length} </h2> + </div> + </Box> + </div> + ) +} + +export default NumberOfRoles diff --git a/client/src/pages/admin/dashboard/widgets/NumberOfUsers.tsx b/client/src/pages/admin/dashboard/widgets/NumberOfUsers.tsx new file mode 100644 index 00000000..2989c2fb --- /dev/null +++ b/client/src/pages/admin/dashboard/widgets/NumberOfUsers.tsx @@ -0,0 +1,27 @@ +import { Box } from '@material-ui/core' +import React, { useEffect } from 'react' +import { getSearchUsers } from '../../../../actions/searchUser' +import { useAppDispatch, useAppSelector } from '../../../../hooks' + +// import * from '@material-ui/core' + +const NumberOfUsers: React.FC = () => { + const users = useAppSelector((state) => state.searchUsers.users) + const usersTotal = useAppSelector((state) => state.searchUsers.total) + const dispatch = useAppDispatch() + + useEffect(() => { + dispatch(getSearchUsers()) + }, []) + return ( + <div> + <Box color="text.primary" bgcolor="" fontFamily="h3.fontFamily" width="100%" height="100%"> + <div> + <h2>{usersTotal}</h2> + </div> + </Box> + </div> + ) +} + +export default NumberOfUsers -- GitLab From 588849d8948531824a6dac7ab701402038b2bc2d Mon Sep 17 00:00:00 2001 From: bmodee <bjomo323@student.liu.se> Date: Tue, 13 Apr 2021 14:00:56 +0200 Subject: [PATCH 4/6] add styling and removes role widget --- .../src/pages/admin/dashboard/Dashboard.tsx | 16 ++---------- .../admin/dashboard/widgets/CurrentUser.tsx | 21 ++++++++++----- .../dashboard/widgets/NumberOfRegions.tsx | 13 +++++++--- .../admin/dashboard/widgets/NumberOfRoles.tsx | 26 ------------------- .../admin/dashboard/widgets/NumberOfUsers.tsx | 14 +++++++--- 5 files changed, 37 insertions(+), 53 deletions(-) delete mode 100644 client/src/pages/admin/dashboard/widgets/NumberOfRoles.tsx diff --git a/client/src/pages/admin/dashboard/Dashboard.tsx b/client/src/pages/admin/dashboard/Dashboard.tsx index 07426279..6d6c81b1 100644 --- a/client/src/pages/admin/dashboard/Dashboard.tsx +++ b/client/src/pages/admin/dashboard/Dashboard.tsx @@ -4,7 +4,6 @@ import { createStyles, makeStyles, Theme } from '@material-ui/core/styles' import React from 'react' import CurrentUser from './widgets/CurrentUser' import NumberOfRegions from './widgets/NumberOfRegions' -import NumberOfRoles from './widgets/NumberOfRoles' import NumberOfUsers from './widgets/NumberOfUsers' const useStyles = makeStyles((theme: Theme) => @@ -29,7 +28,7 @@ const Dashboard: React.FC = () => { <Grid container spacing={3}> <Grid item xs={12}> <Paper className={classes.paper}> - <h1>Dashboard Header</h1> + <h1>Välkommen!</h1> </Paper> </Grid> <Grid item xs={6}> @@ -38,9 +37,7 @@ const Dashboard: React.FC = () => { <CurrentUser /> </Paper> </Grid> - <Grid item xs={6}> - <Paper className={classes.paper}>Widget 2</Paper> - </Grid> + <Grid item xs={3}> <Paper className={classes.paper}> <h1>Antal Användare:</h1> @@ -53,15 +50,6 @@ const Dashboard: React.FC = () => { <NumberOfRegions /> </Paper> </Grid> - <Grid item xs={3}> - <Paper className={classes.paper}> - <h1>Antal Roller:</h1> - <NumberOfRoles /> - </Paper> - </Grid> - <Grid item xs={3}> - <Paper className={classes.paper}>Widget 6</Paper> - </Grid> </Grid> </div> </div> diff --git a/client/src/pages/admin/dashboard/widgets/CurrentUser.tsx b/client/src/pages/admin/dashboard/widgets/CurrentUser.tsx index 1c61a808..4acdf4ea 100644 --- a/client/src/pages/admin/dashboard/widgets/CurrentUser.tsx +++ b/client/src/pages/admin/dashboard/widgets/CurrentUser.tsx @@ -1,16 +1,25 @@ +import { Box } from '@material-ui/core' import React from 'react' import { useAppSelector } from '../../../../hooks' -// import * from '@material-ui/core' - const CurrentUser: React.FC = () => { const currentUser = useAppSelector((state: { user: { userInfo: any } }) => state.user.userInfo) return ( <div> - <div>Namn: {currentUser.name}</div> - <div>Email: {currentUser.email}</div> - <div>Region: {currentUser.city.name}</div> - <div>Roll: {currentUser.role.name}</div> + <Box display="flex" flexDirection="column" alignContent="flex-start"> + <div> + <h2>Namn: {currentUser.name}</h2> + </div> + <div> + <h2>Email: {currentUser.email}</h2> + </div> + <div> + <h2>Region: {currentUser.city.name}</h2> + </div> + <div> + <h2>Roll: {currentUser.role.name}</h2> + </div> + </Box> </div> ) } diff --git a/client/src/pages/admin/dashboard/widgets/NumberOfRegions.tsx b/client/src/pages/admin/dashboard/widgets/NumberOfRegions.tsx index f8757762..7120e527 100644 --- a/client/src/pages/admin/dashboard/widgets/NumberOfRegions.tsx +++ b/client/src/pages/admin/dashboard/widgets/NumberOfRegions.tsx @@ -3,12 +3,19 @@ import React, { useEffect } from 'react' import { getSearchUsers } from '../../../../actions/searchUser' import { useAppDispatch, useAppSelector } from '../../../../hooks' -// import * from '@material-ui/core' - const NumberOfRegions: React.FC = () => { const cities = useAppSelector((state) => state.cities.cities) const dispatch = useAppDispatch() + const handleCount = () => { + if (cities.length >= 1000000) { + ;<div>{cities.length / 1000000 + 'M'}</div> + } else if (cities.length >= 1000) { + ;<div>{cities.length / 1000 + 'K'}</div> + } + return <div>{cities.length}</div> + } + useEffect(() => { dispatch(getSearchUsers()) }, []) @@ -16,7 +23,7 @@ const NumberOfRegions: React.FC = () => { <div> <Box color="text.primary" bgcolor="" fontFamily="h3.fontFamily" width="100%" height="100%"> <div> - <h2>{cities.length} </h2> + <h2>{handleCount()}</h2> </div> </Box> </div> diff --git a/client/src/pages/admin/dashboard/widgets/NumberOfRoles.tsx b/client/src/pages/admin/dashboard/widgets/NumberOfRoles.tsx deleted file mode 100644 index b94dcc05..00000000 --- a/client/src/pages/admin/dashboard/widgets/NumberOfRoles.tsx +++ /dev/null @@ -1,26 +0,0 @@ -import { Box } from '@material-ui/core' -import React, { useEffect } from 'react' -import { getSearchUsers } from '../../../../actions/searchUser' -import { useAppDispatch, useAppSelector } from '../../../../hooks' - -// import * from '@material-ui/core' - -const NumberOfRoles: React.FC = () => { - const roles = useAppSelector((state) => state.roles.roles) - const dispatch = useAppDispatch() - - useEffect(() => { - dispatch(getSearchUsers()) - }, []) - return ( - <div> - <Box color="text.primary" bgcolor="" fontFamily="h3.fontFamily" width="100%" height="100%"> - <div> - <h2>{roles.length} </h2> - </div> - </Box> - </div> - ) -} - -export default NumberOfRoles diff --git a/client/src/pages/admin/dashboard/widgets/NumberOfUsers.tsx b/client/src/pages/admin/dashboard/widgets/NumberOfUsers.tsx index 2989c2fb..79f4d4fb 100644 --- a/client/src/pages/admin/dashboard/widgets/NumberOfUsers.tsx +++ b/client/src/pages/admin/dashboard/widgets/NumberOfUsers.tsx @@ -3,13 +3,19 @@ import React, { useEffect } from 'react' import { getSearchUsers } from '../../../../actions/searchUser' import { useAppDispatch, useAppSelector } from '../../../../hooks' -// import * from '@material-ui/core' - const NumberOfUsers: React.FC = () => { - const users = useAppSelector((state) => state.searchUsers.users) const usersTotal = useAppSelector((state) => state.searchUsers.total) const dispatch = useAppDispatch() + const handleCount = () => { + if (usersTotal >= 1000000) { + ;<div>{usersTotal / 1000000 + 'M'}</div> + } else if (usersTotal >= 1000) { + ;<div>{usersTotal / 1000 + 'K'}</div> + } + return <div>{usersTotal}</div> + } + useEffect(() => { dispatch(getSearchUsers()) }, []) @@ -17,7 +23,7 @@ const NumberOfUsers: React.FC = () => { <div> <Box color="text.primary" bgcolor="" fontFamily="h3.fontFamily" width="100%" height="100%"> <div> - <h2>{usersTotal}</h2> + <h2>{handleCount()}</h2> </div> </Box> </div> -- GitLab From e6af0c8672fac2e012b7cf34be73868483fbb454 Mon Sep 17 00:00:00 2001 From: bmodee <bjomo323@student.liu.se> Date: Tue, 13 Apr 2021 18:53:49 +0200 Subject: [PATCH 5/6] add overflow protection for widget, add new widget and improved styling somewhat --- .../src/pages/admin/dashboard/Dashboard.tsx | 19 ++++++----- .../admin/dashboard/widgets/CurrentUser.tsx | 2 +- .../widgets/NumberOfCompetitions.tsx | 33 +++++++++++++++++++ .../dashboard/widgets/NumberOfRegions.tsx | 14 ++++---- .../admin/dashboard/widgets/NumberOfUsers.tsx | 2 +- 5 files changed, 52 insertions(+), 18 deletions(-) create mode 100644 client/src/pages/admin/dashboard/widgets/NumberOfCompetitions.tsx diff --git a/client/src/pages/admin/dashboard/Dashboard.tsx b/client/src/pages/admin/dashboard/Dashboard.tsx index 6d6c81b1..e73b6533 100644 --- a/client/src/pages/admin/dashboard/Dashboard.tsx +++ b/client/src/pages/admin/dashboard/Dashboard.tsx @@ -3,6 +3,7 @@ import Paper from '@material-ui/core/Paper' import { createStyles, makeStyles, Theme } from '@material-ui/core/styles' import React from 'react' import CurrentUser from './widgets/CurrentUser' +import NumberOfCompetitions from './widgets/NumberOfCompetitions' import NumberOfRegions from './widgets/NumberOfRegions' import NumberOfUsers from './widgets/NumberOfUsers' @@ -26,30 +27,30 @@ const Dashboard: React.FC = () => { <div className={classes.root}> <div> <Grid container spacing={3}> - <Grid item xs={12}> + <Grid item xs={4}> <Paper className={classes.paper}> - <h1>Välkommen!</h1> - </Paper> - </Grid> - <Grid item xs={6}> - <Paper className={classes.paper}> - <h1>Du är inloggad som:</h1> <CurrentUser /> </Paper> </Grid> - <Grid item xs={3}> + <Grid item xs> <Paper className={classes.paper}> <h1>Antal Användare:</h1> <NumberOfUsers /> </Paper> </Grid> - <Grid item xs={3}> + <Grid item xs> <Paper className={classes.paper}> <h1>Antal Regioner:</h1> <NumberOfRegions /> </Paper> </Grid> + <Grid item xs> + <Paper className={classes.paper}> + <h1>Antal Tävlingar:</h1> + <NumberOfCompetitions /> + </Paper> + </Grid> </Grid> </div> </div> diff --git a/client/src/pages/admin/dashboard/widgets/CurrentUser.tsx b/client/src/pages/admin/dashboard/widgets/CurrentUser.tsx index 4acdf4ea..66384c97 100644 --- a/client/src/pages/admin/dashboard/widgets/CurrentUser.tsx +++ b/client/src/pages/admin/dashboard/widgets/CurrentUser.tsx @@ -8,7 +8,7 @@ const CurrentUser: React.FC = () => { <div> <Box display="flex" flexDirection="column" alignContent="flex-start"> <div> - <h2>Namn: {currentUser.name}</h2> + <h1>Välkommen, {currentUser.name}!</h1> </div> <div> <h2>Email: {currentUser.email}</h2> diff --git a/client/src/pages/admin/dashboard/widgets/NumberOfCompetitions.tsx b/client/src/pages/admin/dashboard/widgets/NumberOfCompetitions.tsx new file mode 100644 index 00000000..a6a73455 --- /dev/null +++ b/client/src/pages/admin/dashboard/widgets/NumberOfCompetitions.tsx @@ -0,0 +1,33 @@ +import { Box } from '@material-ui/core' +import React, { useEffect } from 'react' +import { getSearchUsers } from '../../../../actions/searchUser' +import { useAppDispatch, useAppSelector } from '../../../../hooks' + +const NumberOfCompetitions: React.FC = () => { + const cities = useAppSelector((state) => state.cities.cities) + const dispatch = useAppDispatch() + + const handleCount = () => { + if (cities.length >= 1000000) { + ;<div>{cities.length / 1000000 + 'M'}</div> + } else if (cities.length >= 1000) { + ;<div>{cities.length / 1000 + 'K'}</div> + } + return <div>{cities.length}</div> + } + + useEffect(() => { + dispatch(getSearchUsers()) + }, []) + return ( + <div> + <Box color="text.primary" bgcolor="" fontFamily="h3.fontFamily" width="100%" height="100%"> + <div> + <h1>{handleCount()}</h1> + </div> + </Box> + </div> + ) +} + +export default NumberOfCompetitions diff --git a/client/src/pages/admin/dashboard/widgets/NumberOfRegions.tsx b/client/src/pages/admin/dashboard/widgets/NumberOfRegions.tsx index 7120e527..d2bf7251 100644 --- a/client/src/pages/admin/dashboard/widgets/NumberOfRegions.tsx +++ b/client/src/pages/admin/dashboard/widgets/NumberOfRegions.tsx @@ -4,16 +4,16 @@ import { getSearchUsers } from '../../../../actions/searchUser' import { useAppDispatch, useAppSelector } from '../../../../hooks' const NumberOfRegions: React.FC = () => { - const cities = useAppSelector((state) => state.cities.cities) + const competitionTotal = useAppSelector((state) => state.competitions.total) const dispatch = useAppDispatch() const handleCount = () => { - if (cities.length >= 1000000) { - ;<div>{cities.length / 1000000 + 'M'}</div> - } else if (cities.length >= 1000) { - ;<div>{cities.length / 1000 + 'K'}</div> + if (competitionTotal >= 1000000) { + ;<div>{competitionTotal / 1000000 + 'M'}</div> + } else if (competitionTotal >= 1000) { + ;<div>{competitionTotal / 1000 + 'K'}</div> } - return <div>{cities.length}</div> + return <div>{competitionTotal}</div> } useEffect(() => { @@ -23,7 +23,7 @@ const NumberOfRegions: React.FC = () => { <div> <Box color="text.primary" bgcolor="" fontFamily="h3.fontFamily" width="100%" height="100%"> <div> - <h2>{handleCount()}</h2> + <h1>{handleCount()}</h1> </div> </Box> </div> diff --git a/client/src/pages/admin/dashboard/widgets/NumberOfUsers.tsx b/client/src/pages/admin/dashboard/widgets/NumberOfUsers.tsx index 79f4d4fb..1de1b5b9 100644 --- a/client/src/pages/admin/dashboard/widgets/NumberOfUsers.tsx +++ b/client/src/pages/admin/dashboard/widgets/NumberOfUsers.tsx @@ -23,7 +23,7 @@ const NumberOfUsers: React.FC = () => { <div> <Box color="text.primary" bgcolor="" fontFamily="h3.fontFamily" width="100%" height="100%"> <div> - <h2>{handleCount()}</h2> + <h1>{handleCount()}</h1> </div> </Box> </div> -- GitLab From 360ab724d985944d9e72b9bc39855cd2c06a1bad Mon Sep 17 00:00:00 2001 From: Albin Henriksson <albhe428@student.liu.se> Date: Wed, 14 Apr 2021 10:04:27 +0200 Subject: [PATCH 6/6] Fix tests --- .../src/pages/admin/dashboard/Dashboard.tsx | 18 +++++------- .../dashboard/components/CurrentUser.tsx | 29 +++++++++++++++++++ .../NumberOfCompetitions.tsx | 6 ++-- .../NumberOfRegions.tsx | 6 ++-- .../{widgets => components}/NumberOfUsers.tsx | 6 ++-- .../admin/dashboard/widgets/CurrentUser.tsx | 27 ----------------- 6 files changed, 46 insertions(+), 46 deletions(-) create mode 100644 client/src/pages/admin/dashboard/components/CurrentUser.tsx rename client/src/pages/admin/dashboard/{widgets => components}/NumberOfCompetitions.tsx (81%) rename client/src/pages/admin/dashboard/{widgets => components}/NumberOfRegions.tsx (81%) rename client/src/pages/admin/dashboard/{widgets => components}/NumberOfUsers.tsx (80%) delete mode 100644 client/src/pages/admin/dashboard/widgets/CurrentUser.tsx diff --git a/client/src/pages/admin/dashboard/Dashboard.tsx b/client/src/pages/admin/dashboard/Dashboard.tsx index e73b6533..a0f569b0 100644 --- a/client/src/pages/admin/dashboard/Dashboard.tsx +++ b/client/src/pages/admin/dashboard/Dashboard.tsx @@ -1,11 +1,10 @@ +import { createStyles, makeStyles, Paper, Theme, Typography } from '@material-ui/core' import Grid from '@material-ui/core/Grid' -import Paper from '@material-ui/core/Paper' -import { createStyles, makeStyles, Theme } from '@material-ui/core/styles' import React from 'react' -import CurrentUser from './widgets/CurrentUser' -import NumberOfCompetitions from './widgets/NumberOfCompetitions' -import NumberOfRegions from './widgets/NumberOfRegions' -import NumberOfUsers from './widgets/NumberOfUsers' +import CurrentUser from './components/CurrentUser' +import NumberOfCompetitions from './components/NumberOfCompetitions' +import NumberOfRegions from './components/NumberOfRegions' +import NumberOfUsers from './components/NumberOfUsers' const useStyles = makeStyles((theme: Theme) => createStyles({ @@ -22,7 +21,6 @@ const useStyles = makeStyles((theme: Theme) => const Dashboard: React.FC = () => { const classes = useStyles() - return ( <div className={classes.root}> <div> @@ -35,19 +33,19 @@ const Dashboard: React.FC = () => { <Grid item xs> <Paper className={classes.paper}> - <h1>Antal Användare:</h1> + <Typography variant="h4">Antal Användare:</Typography> <NumberOfUsers /> </Paper> </Grid> <Grid item xs> <Paper className={classes.paper}> - <h1>Antal Regioner:</h1> + <Typography variant="h4">Antal Regioner:</Typography> <NumberOfRegions /> </Paper> </Grid> <Grid item xs> <Paper className={classes.paper}> - <h1>Antal Tävlingar:</h1> + <Typography variant="h4">Antal Tävlingar:</Typography> <NumberOfCompetitions /> </Paper> </Grid> diff --git a/client/src/pages/admin/dashboard/components/CurrentUser.tsx b/client/src/pages/admin/dashboard/components/CurrentUser.tsx new file mode 100644 index 00000000..0dfdf557 --- /dev/null +++ b/client/src/pages/admin/dashboard/components/CurrentUser.tsx @@ -0,0 +1,29 @@ +import { Box, Typography } from '@material-ui/core' +import React from 'react' +import { useAppSelector } from '../../../../hooks' + +const CurrentUser: React.FC = () => { + const currentUser = useAppSelector((state: { user: { userInfo: any } }) => state.user.userInfo) + return ( + <div> + <Box display="flex" flexDirection="column" alignContent="flex-start"> + <div> + <Typography variant="h2"> + Välkommen{currentUser && currentUser.name ? `, ${currentUser.name}` : ''}! + </Typography> + </div> + <div> + <Typography variant="h6">Email: {currentUser && currentUser.email}</Typography> + </div> + <div> + <Typography variant="h6">Region: {currentUser && currentUser.city && currentUser.city.name}</Typography> + </div> + <div> + <Typography variant="h6">Roll: {currentUser && currentUser.role && currentUser.role.name}</Typography> + </div> + </Box> + </div> + ) +} + +export default CurrentUser diff --git a/client/src/pages/admin/dashboard/widgets/NumberOfCompetitions.tsx b/client/src/pages/admin/dashboard/components/NumberOfCompetitions.tsx similarity index 81% rename from client/src/pages/admin/dashboard/widgets/NumberOfCompetitions.tsx rename to client/src/pages/admin/dashboard/components/NumberOfCompetitions.tsx index a6a73455..da5d015f 100644 --- a/client/src/pages/admin/dashboard/widgets/NumberOfCompetitions.tsx +++ b/client/src/pages/admin/dashboard/components/NumberOfCompetitions.tsx @@ -1,4 +1,4 @@ -import { Box } from '@material-ui/core' +import { Box, Typography } from '@material-ui/core' import React, { useEffect } from 'react' import { getSearchUsers } from '../../../../actions/searchUser' import { useAppDispatch, useAppSelector } from '../../../../hooks' @@ -21,9 +21,9 @@ const NumberOfCompetitions: React.FC = () => { }, []) return ( <div> - <Box color="text.primary" bgcolor="" fontFamily="h3.fontFamily" width="100%" height="100%"> + <Box width="100%" height="100%"> <div> - <h1>{handleCount()}</h1> + <Typography variant="h4">{handleCount()}</Typography> </div> </Box> </div> diff --git a/client/src/pages/admin/dashboard/widgets/NumberOfRegions.tsx b/client/src/pages/admin/dashboard/components/NumberOfRegions.tsx similarity index 81% rename from client/src/pages/admin/dashboard/widgets/NumberOfRegions.tsx rename to client/src/pages/admin/dashboard/components/NumberOfRegions.tsx index d2bf7251..a48b41a6 100644 --- a/client/src/pages/admin/dashboard/widgets/NumberOfRegions.tsx +++ b/client/src/pages/admin/dashboard/components/NumberOfRegions.tsx @@ -1,4 +1,4 @@ -import { Box } from '@material-ui/core' +import { Box, Typography } from '@material-ui/core' import React, { useEffect } from 'react' import { getSearchUsers } from '../../../../actions/searchUser' import { useAppDispatch, useAppSelector } from '../../../../hooks' @@ -21,9 +21,9 @@ const NumberOfRegions: React.FC = () => { }, []) return ( <div> - <Box color="text.primary" bgcolor="" fontFamily="h3.fontFamily" width="100%" height="100%"> + <Box width="100%" height="100%"> <div> - <h1>{handleCount()}</h1> + <Typography variant="h4">{handleCount()}</Typography> </div> </Box> </div> diff --git a/client/src/pages/admin/dashboard/widgets/NumberOfUsers.tsx b/client/src/pages/admin/dashboard/components/NumberOfUsers.tsx similarity index 80% rename from client/src/pages/admin/dashboard/widgets/NumberOfUsers.tsx rename to client/src/pages/admin/dashboard/components/NumberOfUsers.tsx index 1de1b5b9..af0f9767 100644 --- a/client/src/pages/admin/dashboard/widgets/NumberOfUsers.tsx +++ b/client/src/pages/admin/dashboard/components/NumberOfUsers.tsx @@ -1,4 +1,4 @@ -import { Box } from '@material-ui/core' +import { Box, Typography } from '@material-ui/core' import React, { useEffect } from 'react' import { getSearchUsers } from '../../../../actions/searchUser' import { useAppDispatch, useAppSelector } from '../../../../hooks' @@ -21,9 +21,9 @@ const NumberOfUsers: React.FC = () => { }, []) return ( <div> - <Box color="text.primary" bgcolor="" fontFamily="h3.fontFamily" width="100%" height="100%"> + <Box width="100%" height="100%"> <div> - <h1>{handleCount()}</h1> + <Typography variant="h4">{handleCount()}</Typography> </div> </Box> </div> diff --git a/client/src/pages/admin/dashboard/widgets/CurrentUser.tsx b/client/src/pages/admin/dashboard/widgets/CurrentUser.tsx deleted file mode 100644 index 66384c97..00000000 --- a/client/src/pages/admin/dashboard/widgets/CurrentUser.tsx +++ /dev/null @@ -1,27 +0,0 @@ -import { Box } from '@material-ui/core' -import React from 'react' -import { useAppSelector } from '../../../../hooks' - -const CurrentUser: React.FC = () => { - const currentUser = useAppSelector((state: { user: { userInfo: any } }) => state.user.userInfo) - return ( - <div> - <Box display="flex" flexDirection="column" alignContent="flex-start"> - <div> - <h1>Välkommen, {currentUser.name}!</h1> - </div> - <div> - <h2>Email: {currentUser.email}</h2> - </div> - <div> - <h2>Region: {currentUser.city.name}</h2> - </div> - <div> - <h2>Roll: {currentUser.role.name}</h2> - </div> - </Box> - </div> - ) -} - -export default CurrentUser -- GitLab