Replace multiple identical mistakes with counter

This commit is contained in:
2021-10-11 10:25:34 +01:00
parent f13fdae54d
commit aa0734de99

View File

@@ -58,27 +58,31 @@ export default class IncorrectHistory extends Component {
.then((querySnapshot) => { .then((querySnapshot) => {
let incorrectAnswers = []; let incorrectAnswers = [];
querySnapshot.docs.map((doc, index, array) => { querySnapshot.docs.map((doc, index, array) => {
if (index === 0 || doc.data().term !== array[index - 1].data().term || doc.data().definition !== array[index - 1].data().definition) { if (index === 0 || doc.data().term !== array[array.length - 1].data().term || doc.data().definition !== array[array.length - 1].data().definition) {
incorrectAnswers.push({ incorrectAnswers.push({
term: doc.data().term, term: doc.data().term,
definition: doc.data().definition, definition: doc.data().definition,
answers: [{ switchedAnswers: {},
answer: doc.data().answer, notSwitchedAnswers: {},
switchLanguage: doc.data().switch_language, switchedCount: 0,
}], notSwitchedCount: 0,
count: doc.data().switch_language ? 0 : 1,
switchedCount: doc.data().switch_language ? 1 : 0,
}); });
} else { }
incorrectAnswers[incorrectAnswers.length - 1].answers.push({
answer: doc.data().answer, if (doc.data().switch_language) {
switchLanguage: doc.data().switch_language, if (Object.keys(incorrectAnswers[incorrectAnswers.length - 1].switchedAnswers).includes(doc.data().answer)) {
}); incorrectAnswers[incorrectAnswers.length - 1].switchedAnswers[doc.data().answer]++;
if (doc.data().switch_language) {
incorrectAnswers[incorrectAnswers.length - 1].switchedCount++;
} else { } else {
incorrectAnswers[incorrectAnswers.length - 1].count++; incorrectAnswers[incorrectAnswers.length - 1].switchedAnswers[doc.data().answer] = 1;
} }
incorrectAnswers[incorrectAnswers.length - 1].switchedCount++;
} else {
if (Object.keys(incorrectAnswers[incorrectAnswers.length - 1].notSwitchedAnswers).includes(doc.data().answer)) {
incorrectAnswers[incorrectAnswers.length - 1].notSwitchedAnswers[doc.data().answer]++;
} else {
incorrectAnswers[incorrectAnswers.length - 1].notSwitchedAnswers[doc.data().answer] = 1;
}
incorrectAnswers[incorrectAnswers.length - 1].notSwitchedCount++;
} }
return true; return true;
}); });
@@ -155,55 +159,65 @@ export default class IncorrectHistory extends Component {
? ?
<Collapsible transitionTime={300} trigger={<><b>{vocabItem.switchedCount} mistake{vocabItem.switchedCount !== 1 && "s"}</b><ArrowDropDownRoundedIcon /></>}> <Collapsible transitionTime={300} trigger={<><b>{vocabItem.switchedCount} mistake{vocabItem.switchedCount !== 1 && "s"}</b><ArrowDropDownRoundedIcon /></>}>
{ {
vocabItem.switchedCount > 0 &&
<div> <div>
{ {
vocabItem.answers.sort((a, b) => { Object.keys(vocabItem.switchedAnswers).sort((a, b) => {
if (a.answer < b.answer) { if (a < b) {
return -1; return -1;
} }
if (a.answer > b.answer) { if (a > b) {
return 1; return 1;
} }
return 0; return 0;
}).map((answerItem, index) => answerItem.switchLanguage && ( }).map((answer, index) =>
<p key={index}>{answerItem.answer === "" ? <i>skipped</i> : answerItem.answer}</p> <p key={index}>
)) {answer === "" ? <i>skipped</i> : answer}
{
vocabItem.switchedAnswers[answer] > 1 &&
<i>{` (x${vocabItem.switchedAnswers[answer]})`}</i>
}
</p>
)
} }
</div> </div>
} }
</Collapsible> </Collapsible>
: :
<b>{vocabItem.switchedCount} mistake{vocabItem.switchedCount !== 1 && "s"}</b> <b>0 mistakes</b>
} }
</div> </div>
<div> <div>
<h2>{vocabItem.definition}</h2> <h2>{vocabItem.definition}</h2>
{ {
vocabItem.count > 0 vocabItem.notSwitchedCount > 0
? ?
<Collapsible transitionTime={300} trigger={<><b>{vocabItem.count} mistake{vocabItem.count !== 1 && "s"}</b><ArrowDropDownRoundedIcon /></>}> <Collapsible transitionTime={300} trigger={<><b>{vocabItem.notSwitchedCount} mistake{vocabItem.notSwitchedCount !== 1 && "s"}</b><ArrowDropDownRoundedIcon /></>}>
{ {
vocabItem.count > 0 &&
<div> <div>
{ {
vocabItem.answers.sort((a, b) => { Object.keys(vocabItem.notSwitchedAnswers).sort((a, b) => {
if (a.answer < b.answer) { if (a < b) {
return -1; return -1;
} }
if (a.answer > b.answer) { if (a > b) {
return 1; return 1;
} }
return 0; return 0;
}).map((answerItem, index) => !answerItem.switchLanguage && ( }).map((answer, index) =>
<p key={index}>{answerItem.answer === "" ? <i>skipped</i> : answerItem.answer}</p> <p key={index}>
)) {answer === "" ? <i>skipped</i> : answer}
{
vocabItem.notSwitchedAnswers[answer] > 1 &&
<i>{` (x${vocabItem.notSwitchedAnswers[answer]})`}</i>
}
</p>
)
} }
</div> </div>
} }
</Collapsible> </Collapsible>
: :
<b>{vocabItem.switchedCount} mistake{vocabItem.switchedCount !== 1 && "s"}</b> <b>0 mistakes</b>
} }
</div> </div>
</React.Fragment> </React.Fragment>