# All files staticLegend.ts

7.14% Statements 2/28
0% Branches 0/26
0% Functions 0/6
7.69% Lines 2/26

Press n or j to go to the next uncovered block, b, p or k for the previous block.

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70

    1x

    1x

     import {
      Formatter,
      LegendData,
      LineLayerSpec,
      LineData,
      StaticLegend,
    } from '../../types'

    const peek = (arr: number[]): number => {
      if (Array.isArray(arr) && arr.length >= 1) {
        return arr[arr.length - 1]
      }
      return NaN
    }

    export const convertLineSpec = (
      staticLegend: StaticLegend,
      spec: LineLayerSpec,
      getColumnFormatter: (colKey: string) => Formatter,
      valueColumnKey: string
    ): LegendData => {
      const {valueAxis} = staticLegend
      const valueFormatter = getColumnFormatter(valueColumnKey)
      const mappings = spec?.columnGroupMaps?.fill?.mappings
      const lineData: LineData = spec?.lineData

      const colors = Object.values(lineData).map(line => line.fill)

      const propertyName = valueAxis === 'x' ? 'xs' : 'ys'

      const values = Object.values(lineData).map(line => {
        const latestValue = peek(line[propertyName])
        if (latestValue === latestValue) {
          return valueFormatter(latestValue)
        }
        return ''
      })

      const {columnKeys} = spec.columnGroupMaps.fill
      if (!Array.isArray(columnKeys)) {
        return null
      }

      const valueColumn = {
        key: valueColumnKey,
        name: `Latest ${valueColumnKey}`,
        type: spec.table.getColumnType(valueColumnKey),
        colors,
        values,
      }

      const legendColumns = columnKeys.map(key => {
        // TODO: should be using formatter from config
        const column: string[] = mappings.map(fillColumn => fillColumn[key])

        return {
          key,
          name: key,
          type: spec.table.getColumnType(key),
          values: column,
          colors,
        }
      })

      const result = [valueColumn, ...legendColumns]

      console.log('result', result)
      return result
    }