in packages/charts/src/chart_types/xy_chart/state/utils/get_legend_values.ts [67:121]
export function getLegendValue(
series: DataSeries,
xDomain: XDomain,
type: LegendValue,
valueAccessor: (d: DataSeriesDatum) => number | null,
): number | null {
// See https://github.com/elastic/elastic-charts/issues/2050
if (xDomain.type === ScaleType.Ordinal) {
return null;
}
switch (type) {
case LegendValue.FirstNonNullValue:
return firstNonNull(series.data, valueAccessor);
case LegendValue.LastNonNullValue:
return lastNonNull(series.data, valueAccessor);
case LegendValue.FirstValue:
const first = series.data.find((d) => d.x === xDomain.dataDomain[0]);
return first ? valueAccessor(first) : null;
case LegendValue.CurrentAndLastValue: // the current value will be passed directly to the legend component
case LegendValue.LastValue:
for (let i = series.data.length - 1; i >= 0; i--) {
const value = series.data[i];
if (value && value.x === xDomain.dataDomain[1]) {
return valueAccessor(value);
}
}
return null;
case LegendValue.Average:
return average(series.data, valueAccessor);
case LegendValue.Median:
return median(series.data, valueAccessor);
case LegendValue.Min:
return min(series.data, valueAccessor);
case LegendValue.Max:
return max(series.data, valueAccessor);
case LegendValue.Total:
return sum(series.data, valueAccessor).sum;
case LegendValue.Count:
return countNonNull(series.data, valueAccessor);
case LegendValue.DistinctCount:
return distinctCount(series.data, valueAccessor);
case LegendValue.Variance:
return variance(series.data, valueAccessor);
case LegendValue.StdDeviation:
return stdDeviation(series.data, valueAccessor);
case LegendValue.Range:
return range(series.data, valueAccessor);
case LegendValue.Difference:
return difference(series.data, valueAccessor);
case LegendValue.DifferencePercent:
return differencePercent(series.data, valueAccessor);
default:
return null;
}
}