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();
if (data.duration !== null) {
return complete.push({
id: doc.id,
setTitle: data.set_title,
switchLanguage: data.switch_language,
progress: (data.progress / data.questions.length * 100).toFixed(2),
mark: (data.progress > 0 ? data.correct.length / data.progress * 100 : 0).toFixed(2),
mode: data.mode,
});
} else {
return incomplete.push({
id: doc.id,
setTitle: data.set_title,
switchLanguage: data.switch_language,
progress: (data.progress / data.questions.length * 100).toFixed(2),
mark: (data.progress > 0 ? data.correct.length / data.progress * 100 : 0).toFixed(2),
mode: data.mode,
});
}
});
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
Mode
{
this.state.progressHistoryIncomplete.map((progressItem) =>
{progressItem.setTitle}
{
progressItem.switchLanguage &&
}
{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.progress}%
{progressItem.mark}%
{
progressItem.mode === "questions"
?
:
}
)
}
}
>
:
You haven't done any tests yet.
}
)
}
}