import React, { Component } from 'react'; import { HomeRounded as HomeRoundedIcon, QuestionAnswerRounded as QuestionAnswerRoundedIcon, PeopleRounded as PeopleRoundedIcon, SwapHorizRounded as SwapHorizRoundedIcon, DeleteRounded as DeleteRoundedIcon } from "@material-ui/icons"; import NavBar from "./NavBar"; import Button from "./Button"; import Footer from "./Footer"; import { Link } from 'react-router-dom'; import "./css/History.css"; export default class History extends Component { constructor(props) { super(props); this.state = { user: props.user, db: props.db, navbarItems: [ { type: "link", link: "/", icon: , hideTextMobile: true, } ], progressHistoryComplete: [], progressHistoryIncomplete: [], }; let isMounted = true; Object.defineProperty(this, "isMounted", { get: () => isMounted, set: (value) => isMounted = value, }); } setState = (state, callback = null) => { if (this.isMounted) super.setState(state, callback); } componentDidMount() { document.title = "History | Parandum"; this.state.db.collection("progress") .where("uid", "==", this.state.user.uid) .orderBy("start_time", "desc") .get() .then((querySnapshot) => { let complete = []; let incomplete = []; querySnapshot.docs.map((doc) => { const data = doc.data(); const pushData = { id: doc.id, setTitle: data.set_title, switchLanguage: data.switch_language, percentage: (data.progress / data.questions.length * 100).toFixed(2), mark: (data.progress > 0 ? data.correct.length / data.progress * 100 : 0).toFixed(2), mode: data.mode, correct: data.correct.length, progress: data.progress, }; if (data.duration !== null) { return complete.push(pushData); } else { return incomplete.push(pushData); } }); this.setState({ progressHistoryComplete: complete, progressHistoryIncomplete: incomplete, }); }).catch((error) => { console.log(`Couldn't retrieve progress history: ${error}`); }); } componentWillUnmount() { this.isMounted = false; } deleteProgress = (progressId) => { this.state.db.collection("progress") .doc(progressId) .delete() .then(() => { const progressIndex = this.state.progressHistoryIncomplete.map((obj) => obj.id).indexOf(progressId); let newState = { progressHistoryIncomplete: this.state.progressHistoryIncomplete, }; delete newState.progressHistoryIncomplete[progressIndex]; this.setState(newState); }); } render() { return (

History

{ this.state.progressHistoryComplete.length > 0 || this.state.progressHistoryIncomplete.length > 0 ? <> { this.state.progressHistoryIncomplete.length > 0 &&

Incomplete

Set

Progress

Mark

Grade

Mode

{ this.state.progressHistoryIncomplete.map((progressItem) =>
{progressItem.setTitle} { progressItem.switchLanguage && }

{progressItem.percentage}%

{progressItem.correct}/{progressItem.progress}

{progressItem.mark}%

{ progressItem.mode === "questions" ? : }

) }
} { this.state.progressHistoryComplete.length > 0 &&

Completed

Set

Progress

Mark

Mode

{ this.state.progressHistoryComplete.map((progressItem) =>
{progressItem.setTitle} { progressItem.switchLanguage && }

{progressItem.percentage}%

{progressItem.correct}/{progressItem.progress}

{progressItem.mark}%

{ progressItem.mode === "questions" ? : }
) }
} :

You haven't done any tests yet.

}
) } }