correct slice on final chart
This commit is contained in:
@@ -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;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user