export function getLegendValue()

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;
  }
}