Skip to content

Commit 3ed0051

Browse files
Copilotkarpikpl
andcommitted
Fix breakdown component reactivity to update with date range changes
Co-authored-by: karpikpl <[email protected]>
1 parent 97896b5 commit 3ed0051

File tree

1 file changed

+73
-62
lines changed

1 file changed

+73
-62
lines changed

app/components/BreakdownComponent.vue

Lines changed: 73 additions & 62 deletions
Original file line numberDiff line numberDiff line change
@@ -79,7 +79,7 @@
7979
</template>
8080

8181
<script lang="ts">
82-
import { defineComponent, ref, toRef } from 'vue';
82+
import { defineComponent, ref, toRef, watch } from 'vue';
8383
import type { Metrics } from '@/model/Metrics';
8484
import { Breakdown } from '@/model/Breakdown';
8585
import { Pie } from 'vue-chartjs'
@@ -161,76 +161,87 @@ export default defineComponent({
161161
'#7CFC00' // Lawn Green
162162
]);
163163
164-
const data = toRef(props, 'metrics').value;
164+
// Function to process breakdown data
165+
const processBreakdownData = (data: Metrics[]) => {
166+
// Reset the breakdown list
167+
breakdownList.value = [];
168+
169+
// Process the breakdown separately
170+
data.forEach((m: Metrics) => m.breakdown.forEach(breakdownData =>
171+
{
172+
const breakdownName = breakdownData[props.breakdownKey as keyof typeof breakdownData] as string;
173+
let breakdown = breakdownList.value.find(b => b.name === breakdownName);
165174
166-
// Process the breakdown separately
167-
data.forEach((m: Metrics) => m.breakdown.forEach(breakdownData =>
168-
{
169-
const breakdownName = breakdownData[props.breakdownKey as keyof typeof breakdownData] as string;
170-
let breakdown = breakdownList.value.find(b => b.name === breakdownName);
175+
if (!breakdown) {
176+
// Create a new breakdown object if it does not exist
177+
breakdown = new Breakdown({
178+
name: breakdownName,
179+
acceptedPrompts: breakdownData.acceptances_count,
180+
suggestedPrompts: breakdownData.suggestions_count,
181+
suggestedLinesOfCode: breakdownData.lines_suggested,
182+
acceptedLinesOfCode: breakdownData.lines_accepted,
183+
});
184+
breakdownList.value.push(breakdown);
185+
} else {
186+
// Update the existing breakdown object
187+
breakdown.acceptedPrompts += breakdownData.acceptances_count;
188+
breakdown.suggestedPrompts += breakdownData.suggestions_count;
189+
breakdown.suggestedLinesOfCode += breakdownData.lines_suggested;
190+
breakdown.acceptedLinesOfCode += breakdownData.lines_accepted;
191+
}
192+
// Recalculate the acceptance rates
193+
breakdown.acceptanceRateByCount = breakdown.suggestedPrompts !== 0 ? (breakdown.acceptedPrompts / breakdown.suggestedPrompts) * 100 : 0;
194+
breakdown.acceptanceRateByLines = breakdown.suggestedLinesOfCode !== 0 ? (breakdown.acceptedLinesOfCode / breakdown.suggestedLinesOfCode) * 100 : 0;
171195
172-
if (!breakdown) {
173-
// Create a new breakdown object if it does not exist
174-
breakdown = new Breakdown({
175-
name: breakdownName,
176-
acceptedPrompts: breakdownData.acceptances_count,
177-
suggestedPrompts: breakdownData.suggestions_count,
178-
suggestedLinesOfCode: breakdownData.lines_suggested,
179-
acceptedLinesOfCode: breakdownData.lines_accepted,
180-
});
181-
breakdownList.value.push(breakdown);
182-
} else {
183-
// Update the existing breakdown object
184-
breakdown.acceptedPrompts += breakdownData.acceptances_count;
185-
breakdown.suggestedPrompts += breakdownData.suggestions_count;
186-
breakdown.suggestedLinesOfCode += breakdownData.lines_suggested;
187-
breakdown.acceptedLinesOfCode += breakdownData.lines_accepted;
188-
}
189-
// Recalculate the acceptance rates
190-
breakdown.acceptanceRateByCount = breakdown.suggestedPrompts !== 0 ? (breakdown.acceptedPrompts / breakdown.suggestedPrompts) * 100 : 0;
191-
breakdown.acceptanceRateByLines = breakdown.suggestedLinesOfCode !== 0 ? (breakdown.acceptedLinesOfCode / breakdown.suggestedLinesOfCode) * 100 : 0;
196+
// Log each breakdown for debugging
197+
// console.log('Breakdown:', breakdown);
198+
}));
192199
193-
// Log each breakdown for debugging
194-
// console.log('Breakdown:', breakdown);
195-
}));
200+
//Sort breakdowns map by accepted prompts
201+
breakdownList.value.sort((a, b) => b.acceptedPrompts - a.acceptedPrompts);
196202
197-
//Sort breakdowns map by accepted prompts
198-
breakdownList.value.sort((a, b) => b.acceptedPrompts - a.acceptedPrompts);
203+
// Get the top 5 breakdowns by accepted prompts
204+
const top5BreakdownsAcceptedPrompts = breakdownList.value.slice(0, 5);
205+
206+
breakdownsChartDataTop5AcceptedPrompts.value = {
207+
labels: top5BreakdownsAcceptedPrompts.map(breakdown => breakdown.name),
208+
datasets: [
209+
{
210+
data: top5BreakdownsAcceptedPrompts.map(breakdown => breakdown.acceptedPrompts),
211+
backgroundColor: pieChartColors.value,
212+
},
213+
],
214+
};
199215
200-
// Get the top 5 breakdowns by accepted prompts
201-
const top5BreakdownsAcceptedPrompts = breakdownList.value.slice(0, 5);
202-
203-
breakdownsChartDataTop5AcceptedPrompts.value = {
204-
labels: top5BreakdownsAcceptedPrompts.map(breakdown => breakdown.name),
205-
datasets: [
206-
{
207-
data: top5BreakdownsAcceptedPrompts.map(breakdown => breakdown.acceptedPrompts),
208-
backgroundColor: pieChartColors.value,
209-
},
210-
],
211-
};
216+
breakdownsChartDataTop5AcceptedPromptsByLines.value = {
217+
labels: top5BreakdownsAcceptedPrompts.map(breakdown => breakdown.name),
218+
datasets: [
219+
{
220+
data: top5BreakdownsAcceptedPrompts.map(breakdown => breakdown.acceptanceRateByLines.toFixed(2)),
221+
backgroundColor: pieChartColors.value,
222+
},
223+
],
224+
};
212225
213-
breakdownsChartDataTop5AcceptedPromptsByLines.value = {
214-
labels: top5BreakdownsAcceptedPrompts.map(breakdown => breakdown.name),
215-
datasets: [
216-
{
217-
data: top5BreakdownsAcceptedPrompts.map(breakdown => breakdown.acceptanceRateByLines.toFixed(2)),
218-
backgroundColor: pieChartColors.value,
219-
},
220-
],
221-
};
226+
breakdownsChartDataTop5AcceptedPromptsByCounts.value = {
227+
labels: top5BreakdownsAcceptedPrompts.map(breakdown => breakdown.name),
228+
datasets: [
229+
{
230+
data: top5BreakdownsAcceptedPrompts.map(breakdown => breakdown.acceptanceRateByCount.toFixed(2)),
231+
backgroundColor: pieChartColors.value,
232+
},
233+
],
234+
};
222235
223-
breakdownsChartDataTop5AcceptedPromptsByCounts.value = {
224-
labels: top5BreakdownsAcceptedPrompts.map(breakdown => breakdown.name),
225-
datasets: [
226-
{
227-
data: top5BreakdownsAcceptedPrompts.map(breakdown => breakdown.acceptanceRateByCount.toFixed(2)),
228-
backgroundColor: pieChartColors.value,
229-
},
230-
],
236+
numberOfBreakdowns.value = breakdownList.value.length;
231237
};
232238
233-
numberOfBreakdowns.value = breakdownList.value.length;
239+
// Watch for changes in metrics prop and re-process data
240+
watch(() => props.metrics, (newMetrics) => {
241+
if (newMetrics && Array.isArray(newMetrics)) {
242+
processBreakdownData(newMetrics);
243+
}
244+
}, { immediate: true, deep: true });
234245
235246
return { chartOptions, breakdownList, numberOfBreakdowns,
236247
breakdownsChartData, breakdownsChartDataTop5AcceptedPrompts, breakdownsChartDataTop5AcceptedPromptsByLines, breakdownsChartDataTop5AcceptedPromptsByCounts };

0 commit comments

Comments
 (0)