# All files / utils useBandHover.ts

23.53% Statements 4/17
0% Branches 0/12
0% Functions 0/5
23.53% Lines 4/17

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
    1x
    1x

    1x

    1x

     import {BandIndexMap, LineData, NumericColumnData} from '../types'
    import {useLazyMemo} from './useLazyMemo'
    import {isDefined} from './isDefined'

    const buildColumnData = (
      lineData: LineData,
      groupColData: NumericColumnData,
      bandIndexMap: BandIndexMap
    ) => {
      const hoverableColumnData = {
        xs: [],
        ys: [],
        groupColData: [],
      }
      const {rowIndices} = bandIndexMap

      rowIndices.forEach(rowIndex => {
        if (isDefined(rowIndex)) {
          hoverableColumnData.xs = [
            ...hoverableColumnData.xs,
            ...lineData[rowIndex].xs,
          ]
          hoverableColumnData.ys = [
            ...hoverableColumnData.ys,
            ...lineData[rowIndex].ys,
          ]
          hoverableColumnData.groupColData = [
            ...hoverableColumnData.groupColData,
            ...groupColData.filter(index => index === rowIndex),
          ]
        }
      })
      return hoverableColumnData
    }

    export const useBandHoverColumns = (
      mouseX: number,
      mouseY: number,
      lineData: LineData,
      groupColData: NumericColumnData,
      bandIndexMap: BandIndexMap,
      width: number,
      height: number
    ) => {
      const isActive =
        mouseX !== undefined &&
        mouseX !== null &&
        mouseX >= 0 &&
        mouseX < width &&
        mouseY !== undefined &&
        mouseY !== null &&
        mouseY >= 0 &&
        mouseY < height

      const result = useLazyMemo(
        () => buildColumnData(lineData, groupColData, bandIndexMap),
        [lineData, groupColData, bandIndexMap, width, height],
        isActive
      )

      return !result
        ? {
            xs: [],
            ys: [],
            groupColData: [],
          }
        : result
    }