correct slice on final chart

This commit is contained in:
Carl-Gerhard Lindesvärd
2024-06-18 09:25:25 +02:00
parent 626a6fd938
commit 5f6966b092

View File

@@ -521,76 +521,74 @@ export async function getChart(input: IChartInput) {
const limit = input.limit || 300; const limit = input.limit || 300;
const offset = input.offset || 0; const offset = input.offset || 0;
const final: FinalChart = { const final: FinalChart = {
series: series series: series.map((serie) => {
.slice(offset, limit ? offset + limit : series.length) const previousSerie = previousSeries?.find(
.map((serie) => { (item) => item.name === serie.name
const previousSerie = previousSeries?.find( );
(item) => item.name === serie.name const metrics = {
); sum: sum(serie.data.map((item) => item.count)),
const metrics = { average: round(average(serie.data.map((item) => item.count)), 2),
sum: sum(serie.data.map((item) => item.count)), min: min(serie.data.map((item) => item.count)),
average: round(average(serie.data.map((item) => item.count)), 2), max: max(serie.data.map((item) => item.count)),
min: min(serie.data.map((item) => item.count)), };
max: max(serie.data.map((item) => item.count)),
};
return { return {
id: slug(serie.name), id: slug(serie.name),
name: serie.name, name: serie.name,
event: { event: {
id: serie.event.id!, id: serie.event.id!,
name: serie.event.displayName ?? serie.event.name, name: serie.event.displayName ?? serie.event.name,
}, },
metrics: { metrics: {
...metrics, ...metrics,
...(input.previous ...(input.previous
? { ? {
previous: { previous: {
sum: getPreviousMetric( sum: getPreviousMetric(
metrics.sum, metrics.sum,
previousSerie previousSerie
? sum(previousSerie?.data.map((item) => item.count)) ? sum(previousSerie?.data.map((item) => item.count))
: null : null
), ),
average: getPreviousMetric( average: getPreviousMetric(
metrics.average, metrics.average,
previousSerie previousSerie
? round( ? round(
average( average(
previousSerie?.data.map((item) => item.count) previousSerie?.data.map((item) => item.count)
), ),
2 2
) )
: null : null
), ),
min: getPreviousMetric( min: getPreviousMetric(
metrics.sum, metrics.sum,
previousSerie previousSerie
? min(previousSerie?.data.map((item) => item.count)) ? min(previousSerie?.data.map((item) => item.count))
: null : null
), ),
max: getPreviousMetric( max: getPreviousMetric(
metrics.sum, metrics.sum,
previousSerie previousSerie
? max(previousSerie?.data.map((item) => item.count)) ? max(previousSerie?.data.map((item) => item.count))
: null : null
), ),
}, },
} }
: {}), : {}),
}, },
data: serie.data.map((item, index) => ({ data: serie.data.map((item, index) => ({
date: item.date, date: item.date,
count: item.count ?? 0, count: item.count ?? 0,
previous: previousSerie?.data[index] previous: previousSerie?.data[index]
? getPreviousMetric( ? getPreviousMetric(
item.count ?? 0, item.count ?? 0,
previousSerie?.data[index]?.count ?? null previousSerie?.data[index]?.count ?? null
) )
: undefined, : undefined,
})), })),
}; };
}), }),
metrics: { metrics: {
sum: 0, sum: 0,
average: 0, average: 0,
@@ -599,6 +597,19 @@ export async function getChart(input: IChartInput) {
}, },
}; };
// Sort by sum
final.series = final.series
.sort((a, b) => {
if (input.chartType === 'linear') {
const sumA = a.data.reduce((acc, item) => acc + (item.count ?? 0), 0);
const sumB = b.data.reduce((acc, item) => acc + (item.count ?? 0), 0);
return sumB - sumA;
} else {
return b.metrics[input.metric] - a.metrics[input.metric];
}
})
.slice(offset, limit ? offset + limit : series.length);
final.metrics.sum = sum(final.series.map((item) => item.metrics.sum)); final.metrics.sum = sum(final.series.map((item) => item.metrics.sum));
final.metrics.average = round( final.metrics.average = round(
average(final.series.map((item) => item.metrics.average)), average(final.series.map((item) => item.metrics.average)),
@@ -634,17 +645,6 @@ export async function getChart(input: IChartInput) {
}; };
} }
// Sort by sum
final.series = final.series.sort((a, b) => {
if (input.chartType === 'linear') {
const sumA = a.data.reduce((acc, item) => acc + (item.count ?? 0), 0);
const sumB = b.data.reduce((acc, item) => acc + (item.count ?? 0), 0);
return sumB - sumA;
} else {
return b.metrics[input.metric] - a.metrics[input.metric];
}
});
return final; return final;
} }