Skip to content

Commit 6d13ecc

Browse files
authored
Merge pull request #87 from Sarah-Pushparaj/fix-breakdown-sorting
Fix: breakdown column header data sorting bug
2 parents d7fb317 + b477366 commit 6d13ecc

File tree

1 file changed

+20
-34
lines changed

1 file changed

+20
-34
lines changed

src/components/BreakdownComponent.vue

Lines changed: 20 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -48,13 +48,13 @@
4848
<h2>{{ breakdownDisplayNamePlural }} Breakdown </h2>
4949
<br>
5050

51-
<v-data-table :headers="headers" :items="Array.from(breakdowns)" class="elevation-2" style="padding-left: 100px; padding-right: 100px;">
51+
<v-data-table :headers="headers" :items="breakdownList" class="elevation-2" style="padding-left: 100px; padding-right: 100px;">
5252
<template v-slot:item="{item}">
5353
<tr>
54-
<td>{{ item[0] }}</td>
55-
<td>{{ item[1].acceptedPrompts }}</td>
56-
<td>{{ item[1].acceptedLinesOfCode }}</td>
57-
<td v-if="item[1].acceptanceRate !== undefined">{{ item[1].acceptanceRate.toFixed(2) }}%</td>
54+
<td>{{ item.name }}</td>
55+
<td>{{ item.acceptedPrompts }}</td>
56+
<td>{{ item.acceptedLinesOfCode }}</td>
57+
<td v-if="item.acceptanceRate !== undefined">{{ item.acceptanceRate.toFixed(2) }}%</td>
5858
</tr>
5959
</template>
6060
</v-data-table>
@@ -118,7 +118,7 @@ export default defineComponent({
118118
},
119119
headers() {
120120
return [
121-
{ title: `${this.breakdownDisplayName} Name`, key: 'breakdownName' },
121+
{ title: `${this.breakdownDisplayName} Name`, key: 'name' },
122122
{ title: 'Accepted Prompts', key: 'acceptedPrompts' },
123123
{ title: 'Accepted Lines of Code', key: 'acceptedLinesOfCode' },
124124
{ title: 'Acceptance Rate (%)', key: 'acceptanceRate' },
@@ -127,8 +127,8 @@ export default defineComponent({
127127
},
128128
setup(props) {
129129
130-
// Create an empty map to store the breakdowns.
131-
const breakdowns = ref(new Map<string, Breakdown>());
130+
// Create a reactive reference to store the breakdowns.
131+
const breakdownList = ref<Breakdown[]>([]);
132132
133133
// Number of breakdowns
134134
const numberOfBreakdowns = ref(0);
@@ -158,7 +158,7 @@ export default defineComponent({
158158
data.forEach((m: Metrics) => m.breakdown.forEach(breakdownData =>
159159
{
160160
const breakdownName = breakdownData[props.breakdownKey as keyof typeof breakdownData] as string;
161-
let breakdown = breakdowns.value.get(breakdownName);
161+
let breakdown = breakdownList.value.find(b => b.name === breakdownName);
162162
163163
if (!breakdown) {
164164
// Create a new breakdown object if it does not exist
@@ -168,7 +168,7 @@ export default defineComponent({
168168
suggestedLinesOfCode: breakdownData.lines_suggested,
169169
acceptedLinesOfCode: breakdownData.lines_accepted,
170170
});
171-
breakdowns.value.set(breakdownName, breakdown);
171+
breakdownList.value.push(breakdown);
172172
} else {
173173
// Update the existing breakdown object
174174
breakdown.acceptedPrompts += breakdownData.acceptances_count;
@@ -180,54 +180,40 @@ export default defineComponent({
180180
}));
181181
182182
//Sort breakdowns map by acceptance rate
183-
breakdowns.value[Symbol.iterator] = function* () {
184-
yield* [...this.entries()].sort((a, b) => b[1].acceptanceRate - a[1].acceptanceRate);
185-
}
183+
breakdownList.value.sort((a, b) => b.acceptanceRate - a.acceptanceRate);
186184
187185
// Get the top 5 breakdowns by acceptance rate
188-
const top5BreakdownsAcceptanceRate = new Map([...breakdowns.value].slice(0, 5));
186+
const top5BreakdownsAcceptanceRate = breakdownList.value.slice(0, 5);
189187
190188
breakdownsChartDataTop5AcceptanceRate.value = {
191-
labels: Array.from(top5BreakdownsAcceptanceRate.values()).map(breakdown => breakdown.name),
189+
labels: top5BreakdownsAcceptanceRate.map(breakdown => breakdown.name),
192190
datasets: [
193191
{
194-
data: Array.from(top5BreakdownsAcceptanceRate.values()).map(breakdown => breakdown.acceptanceRate.toFixed(2)),
192+
data: top5BreakdownsAcceptanceRate.map(breakdown => breakdown.acceptanceRate.toFixed(2)),
195193
backgroundColor: pieChartColors.value,
196194
},
197195
],
198196
};
199197
200198
//Sort breakdowns map by accepted prompts
201-
breakdowns.value[Symbol.iterator] = function* () {
202-
yield* [...this.entries()].sort((a, b) => b[1].acceptedPrompts - a[1].acceptedPrompts);
203-
}
204-
205-
breakdownsChartData.value = {
206-
labels: Array.from(breakdowns.value.values()).map(breakdown => breakdown.name),
207-
datasets: [
208-
{
209-
data: Array.from(breakdowns.value.values()).map(breakdown => breakdown.acceptedPrompts),
210-
backgroundColor: pieChartColors.value,
211-
},
212-
],
213-
};
199+
breakdownList.value.sort((a, b) => b.acceptedPrompts - a.acceptedPrompts);
214200
215201
// Get the top 5 breakdowns by accepted prompts
216-
const top5BreakdownsAcceptedPrompts = new Map([...breakdowns.value].slice(0, 5));
202+
const top5BreakdownsAcceptedPrompts = breakdownList.value.slice(0, 5);
217203
218204
breakdownsChartDataTop5AcceptedPrompts.value = {
219-
labels: Array.from(top5BreakdownsAcceptedPrompts.values()).map(breakdown => breakdown.name),
205+
labels: top5BreakdownsAcceptedPrompts.map(breakdown => breakdown.name),
220206
datasets: [
221207
{
222-
data: Array.from(top5BreakdownsAcceptedPrompts.values()).map(breakdown => breakdown.acceptedPrompts),
208+
data: top5BreakdownsAcceptedPrompts.map(breakdown => breakdown.acceptedPrompts),
223209
backgroundColor: pieChartColors.value,
224210
},
225211
],
226212
};
227213
228-
numberOfBreakdowns.value = breakdowns.value.size;
214+
numberOfBreakdowns.value = breakdownList.value.length;
229215
230-
return { chartOptions, breakdowns, numberOfBreakdowns,
216+
return { chartOptions, breakdownList, numberOfBreakdowns,
231217
breakdownsChartData, breakdownsChartDataTop5AcceptedPrompts, breakdownsChartDataTop5AcceptanceRate };
232218
},
233219

0 commit comments

Comments
 (0)