diff --git a/src/GroupStats.js b/src/GroupStats.js index 71004c0..e1d62f2 100644 --- a/src/GroupStats.js +++ b/src/GroupStats.js @@ -348,8 +348,53 @@ export default withRouter(class GroupStats extends Component { this.state.filteredIncorrectAnswers .filter((vocabItem) => vocabItem.answers && vocabItem.answers.length > 0) .map((vocabItem, index) => { - const sortedAnswers = vocabItem.answers + let [switchedAnswersDict, notSwitchedAnswersDict] = [{}, {}]; + + vocabItem.answers + .map((answerItem) => { + if (answerItem.switchLanguage) { + if (switchedAnswersDict.hasOwnProperty(answerItem.answer)) { + switchedAnswersDict[answerItem.answer].count++; + return false; + } else { + switchedAnswersDict[answerItem.answer] = { + ...answerItem, + count: 1, + }; + return true; + } + } else { + if (notSwitchedAnswersDict.hasOwnProperty(answerItem.answer)) { + notSwitchedAnswersDict[answerItem.answer].count++; + return false; + } else { + notSwitchedAnswersDict[answerItem.answer] = { + ...answerItem, + count: 1, + }; + return true; + } + } + }); + + const switchedAnswers = Object.keys(switchedAnswersDict) + .map((answerItem) => switchedAnswersDict[answerItem]) + .sort((a,b) => { + const countDifference = b.count - a.count; + if (countDifference !== 0) return countDifference; + if (a.answer < b.answer) { + return -1; + } + if (a.answer > b.answer) { + return 1; + } + return 0; + }); + const notSwitchedAnswers = Object.keys(notSwitchedAnswersDict) + .map((answerItem) => notSwitchedAnswersDict[answerItem]) .sort((a, b) => { + const countDifference = b.count - a.count; + if (countDifference !== 0) return countDifference; if (a.answer < b.answer) { return -1; } @@ -371,10 +416,10 @@ export default withRouter(class GroupStats extends Component { vocabItem.switchedCount > 0 &&
{ - sortedAnswers - .map((answerItem, index) => answerItem.switchLanguage && ( -

{answerItem.answer === "" ? skipped : answerItem.answer}

- )) + switchedAnswers + .map((answerItem, index) => +

{answerItem.answer === "" ? skipped : answerItem.answer}{answerItem.count > 1 && (x{answerItem.count})}

+ ) }
} @@ -393,10 +438,10 @@ export default withRouter(class GroupStats extends Component { vocabItem.count > 0 &&
{ - sortedAnswers - .map((answerItem, index) => !answerItem.switchLanguage && ( -

{answerItem.answer === "" ? skipped : answerItem.answer}

- )) + notSwitchedAnswers + .map((answerItem, index) => +

{answerItem.answer === "" ? skipped : answerItem.answer}{answerItem.count > 1 && (x{answerItem.count})}

+ ) }
} diff --git a/src/MistakesHistory.js b/src/MistakesHistory.js index 9236be5..64c8bbd 100644 --- a/src/MistakesHistory.js +++ b/src/MistakesHistory.js @@ -381,8 +381,53 @@ export default class IncorrectHistory extends Component { this.state.filteredIncorrectAnswers .filter((vocabItem) => vocabItem.answers && vocabItem.answers.length > 0) .map((vocabItem, index) => { - const sortedAnswers = vocabItem.answers + let [switchedAnswersDict, notSwitchedAnswersDict] = [{}, {}]; + + vocabItem.answers + .map((answerItem) => { + if (answerItem.switchLanguage) { + if (switchedAnswersDict.hasOwnProperty(answerItem.answer)) { + switchedAnswersDict[answerItem.answer].count++; + return false; + } else { + switchedAnswersDict[answerItem.answer] = { + ...answerItem, + count: 1, + }; + return true; + } + } else { + if (notSwitchedAnswersDict.hasOwnProperty(answerItem.answer)) { + notSwitchedAnswersDict[answerItem.answer].count++; + return false; + } else { + notSwitchedAnswersDict[answerItem.answer] = { + ...answerItem, + count: 1, + }; + return true; + } + } + }); + + const switchedAnswers = Object.keys(switchedAnswersDict) + .map((answerItem) => switchedAnswersDict[answerItem]) .sort((a, b) => { + const countDifference = b.count - a.count; + if (countDifference !== 0) return countDifference; + if (a.answer < b.answer) { + return -1; + } + if (a.answer > b.answer) { + return 1; + } + return 0; + }); + const notSwitchedAnswers = Object.keys(notSwitchedAnswersDict) + .map((answerItem) => notSwitchedAnswersDict[answerItem]) + .sort((a, b) => { + const countDifference = b.count - a.count; + if (countDifference !== 0) return countDifference; if (a.answer < b.answer) { return -1; } @@ -404,10 +449,10 @@ export default class IncorrectHistory extends Component { vocabItem.switchedCount > 0 &&
{ - sortedAnswers - .map((answerItem, index) => answerItem.switchLanguage && ( -

{answerItem.answer === "" ? skipped : answerItem.answer}

- )) + switchedAnswers + .map((answerItem, index) => +

{answerItem.answer === "" ? skipped : answerItem.answer}{answerItem.count > 1 && (x{answerItem.count})}

+ ) }
} @@ -426,10 +471,10 @@ export default class IncorrectHistory extends Component { vocabItem.count > 0 &&
{ - sortedAnswers - .map((answerItem, index) => !answerItem.switchLanguage && ( -

{answerItem.answer === "" ? skipped : answerItem.answer}

- )) + notSwitchedAnswers + .map((answerItem, index) => +

{answerItem.answer === "" ? skipped : answerItem.answer}{answerItem.count > 1 && (x{answerItem.count})}

+ ) }
}