import * as React from "react"; import Grid from "@material-ui/core/Grid"; import Typography from "@material-ui/core/Typography"; import Button from "@material-ui/core/Button"; import Card from '@material-ui/core/Card'; import CardActions from '@material-ui/core/CardActions'; import CardContent from '@material-ui/core/CardContent'; import Paper from "@material-ui/core/Paper"; import Snackbar from "@material-ui/core/Snackbar"; import CircularProgress from "@material-ui/core/CircularProgress"; import { withRouter } from "react-router-dom"; import { ILevel } from "../models/level"; import { IUser } from "../models/user"; interface IProps { getLevels: () => Promise; history: any; user: IUser; setLevels: (levels: ILevel[]) => void; setLoading: (state: boolean) => void; loading: boolean; snackbar: boolean; setSnackbar: (state: boolean) => void; levels: ILevel[]; } const LevelListWithRouter = withRouter( class Dashboard extends React.Component { componentDidMount() { this.props.setLoading(true); // Fetch the levels this.props.getLevels().then(res => { this.props.setLevels(res); this.props.setLoading(false); }); } toLevel(id: number) { const maxLevel = Math.max(...this.props.user.levels); if (maxLevel + 1 >= id) { this.props.history.push(`/level/${id}`); } else { this.props.setSnackbar(true); } } render() { if (this.props.loading) { return
; } const small = window.matchMedia("(max-width: 700px)").matches; const cName = small ? "lesson-card-xs" : "lesson-card-lg"; let key = 0; const levelToCard = (level: ILevel) => { const suffix = level.level in this.props.user.levels ? " ✔" : ""; return {`Level ${level.level}${suffix}`} {level.name}
{level.description}
; }; return
{this.props.levels.map(levelToCard)} this.props.setSnackbar(false)} message={Du hast dieses Level noch nicht freigeschaltet!} />
; } } ); export default LevelListWithRouter;