import * as React from "react"; import List from "@material-ui/core/List"; import ListItem from "@material-ui/core/ListItem"; import ListItemText from "@material-ui/core/ListItemText"; import Grid from "@material-ui/core/Grid"; import Typography from "@material-ui/core/Typography"; import Card from "@material-ui/core/Card"; import CardContent from "@material-ui/core/CardContent"; import { Redirect } from "react-router-dom"; import { IVocab } from "../models/vocab"; interface IProps { id: string; levelVocab: (id: string) => IVocab[]; }; interface IState { currentVocab: IVocab; lookedAt: number[]; toReview: boolean; }; export default class LevelPage extends React.Component { private uid = 0; // To prevent React from redrawing the vocabulary list and prematurely // cancelling the animation private uids: { [key: string]: string } = {}; constructor(props: any) { super(props); this.state = { currentVocab: this.props.levelVocab(this.props.id)[0], lookedAt: [0], toReview: false, }; } genUID = (vocab: IVocab): string => { const { grundform } = vocab.latin; if (grundform in this.uids) { return this.uids[grundform]; } else { this.uids[grundform] = "LEVELPAGE" + this.uid++; return this.uids[grundform]; } } renderVocabListItem = (vocab: IVocab): any => { // Check if the vocab was already looked at const lookedAt = this.state.lookedAt.find((el) => el === vocab.id) || vocab.id === 0; // TODO: Actually update the "Vocab View" when clicking return { // Prevent the user from using too much memory by always clicking on the elements // Show the clicked at vocab word this.setState({ currentVocab: vocab, lookedAt: this.state.lookedAt.concat(vocab.id), }); }}> {`${vocab.latin.grundform} ${lookedAt ? "✔" : ""}`} ; } toReview = () => { const { levelVocab, id } = this.props; // Only go to the review if all vocabulary item have been looked at if (levelVocab(id).length === this.state.lookedAt.length) { this.setState({ toReview: true, }); } } render() { const { currentVocab } = this.state; return
{this.props.levelVocab(this.props.id) .map(this.renderVocabListItem)} {/* TODO*/} Zur Übung { this.state.toReview ? ( ) : undefined } {currentVocab.latin.grundform} {currentVocab.german.join(", ")} { currentVocab.hint ? (
Tipp: {currentVocab.hint}
) : undefined } { currentVocab.mnemonic ? (
Eselsbrücke: {currentVocab.mnemonic}
) : undefined }
{/*TODO: Maybe "next" and "prev" buttons?*/}
; } };