diff --git a/components/MeritProfile.tsx b/components/MeritProfile.tsx
index d9c33ae..b1ebd8d 100644
--- a/components/MeritProfile.tsx
+++ b/components/MeritProfile.tsx
@@ -58,10 +58,12 @@ const GradeBar = ({index, grade, size, params}: GradeBarInterface) => {
const DashedMedian = () => {
return (
);
};
@@ -134,11 +136,13 @@ const MeritProfileBar = ({profile, grades}: MeritProfileBarInterface) => {
// find the majority grade
const majorityValue = getMajorityGrade(normalized);
const majorityGrade = gradesByValue[majorityValue];
+ console.log(majorityGrade, majorityValue, grades, normalized)
const proponentSizes = values
.filter((v) => v > majorityGrade.value)
.map((v) => normalized[v]);
const proponentWidth = proponentSizes.reduce((a, b) => a + b, 0);
+ console.log(proponentWidth, proponentSizes)
const opponentSizes = values
.filter((v) => v < majorityGrade.value)
@@ -161,7 +165,6 @@ const MeritProfileBar = ({profile, grades}: MeritProfileBarInterface) => {
return (
<>
-
{
>
{values
.filter((v) => v > majorityGrade.value)
+ .reverse()
.map((v) => {
const index = values.indexOf(v);
const size =
@@ -242,6 +246,7 @@ const MeritProfileBar = ({profile, grades}: MeritProfileBarInterface) => {
)}
{/*
*/}
+
>
);
};
diff --git a/pages/results/[pid]/[[...tid]].tsx b/pages/results/[pid]/[[...tid]].tsx
index 8fa22ef..381f034 100644
--- a/pages/results/[pid]/[[...tid]].tsx
+++ b/pages/results/[pid]/[[...tid]].tsx
@@ -71,6 +71,7 @@ export async function getServerSideProps({query, locale}) {
const values = grades.map((g) => g.value);
values.forEach((v) => (profile[v] = profile[v] || 0));
const majValue = getMajorityGrade(profile);
+ console.log(profile, majValue)
return {
...c,
meritProfile: payload.merit_profile[c.id],
diff --git a/services/majorityJudgment.ts b/services/majorityJudgment.ts
index 0bf06c5..dd59f81 100644
--- a/services/majorityJudgment.ts
+++ b/services/majorityJudgment.ts
@@ -2,28 +2,29 @@
* A few useful function for dealing with majority judgment
*/
-import { MeritProfileInterface } from './type';
+import {MeritProfileInterface} from './type';
/**
* Return the index corresponding to the majority grade
*/
export const getMajorityGrade = (profile: MeritProfileInterface): number => {
- const indices = Object.keys(profile);
+ const grades = Object.keys(profile).map(k => parseInt(k)).sort()
+
+ if (grades.length === 0) {
+ throw new Error('Merit profile is empty');
+ }
+
+ console.log("INDICES", grades);
const numVotes = Object.values(profile).reduce((a, b) => a + b, 0);
- let majorityGrade = indices[0];
+ let majorityGrade = grades[0];
let accBefore = 0;
- let isBefore = true;
- for (const value of indices) {
- if (isBefore) {
- accBefore += profile[value];
- }
- if (isBefore && accBefore > numVotes / 2) {
- majorityGrade = value;
- accBefore -= profile[value];
- isBefore = false;
+ for (const grade of grades) {
+ if (accBefore + profile[grade] > numVotes / 2 - 1e-5) {
+ return grade;
}
+ accBefore -= profile[grade];
}
- const value = indices.indexOf(majorityGrade);
- return value;
+
+ return grades[grades.length - 1];
};