{"version":3,"file":"RowsList.cjs","sources":["../../../../../src/components/Table/TableRT/RowsList.tsx"],"sourcesContent":["import { css, cx } from '@emotion/css';\nimport { CSSProperties, UIEventHandler, useCallback, useEffect, useMemo, useState } from 'react';\nimport * as React from 'react';\nimport { Cell, Row, TableState, HeaderGroup } from 'react-table';\nimport { VariableSizeList } from 'react-window';\nimport { Subscription, debounceTime } from 'rxjs';\n\nimport {\n  DataFrame,\n  DataHoverClearEvent,\n  DataHoverEvent,\n  Field,\n  FieldType,\n  TimeRange,\n  hasTimeField,\n  InterpolateFunction,\n} from '@grafana/data';\nimport { TableCellDisplayMode, TableCellHeight } from '@grafana/schema';\n\nimport { useTheme2 } from '../../../themes/ThemeContext';\nimport CustomScrollbar from '../../CustomScrollbar/CustomScrollbar';\nimport { usePanelContext } from '../../PanelChrome';\nimport { TableCell } from '../Cells/TableCell';\nimport {\n  CellColors,\n  GetActionsFunction,\n  TableFieldOptions,\n  TableFilterActionCallback,\n  TableInspectCellCallback,\n} from '../types';\nimport {\n  calculateAroundPointThreshold,\n  getCellColors,\n  isPointTimeValAroundTableTimeVal,\n  guessTextBoundingBox,\n} from '../utils';\n\nimport { ExpandedRow, getExpandedRowHeight } from './ExpandedRow';\nimport { TableStyles } from './styles';\n\ninterface RowsListProps {\n  data: DataFrame;\n  rows: Row[];\n  enableSharedCrosshair: boolean;\n  headerHeight: number;\n  rowHeight: number;\n  itemCount: number;\n  pageIndex: number;\n  listHeight: number;\n  width: number;\n  cellHeight?: TableCellHeight;\n  listRef: React.RefObject<VariableSizeList>;\n  tableState: TableState;\n  tableStyles: TableStyles;\n  nestedDataField?: Field;\n  prepareRow: (row: Row) => void;\n  onCellFilterAdded?: TableFilterActionCallback;\n  timeRange?: TimeRange;\n  footerPaginationEnabled: boolean;\n  initialRowIndex?: number;\n  headerGroups: HeaderGroup[];\n  longestField?: Field;\n  textWrapField?: Field;\n  getActions?: GetActionsFunction;\n  replaceVariables?: InterpolateFunction;\n  setInspectCell?: TableInspectCellCallback;\n}\n\nexport const RowsList = (props: RowsListProps) => {\n  const {\n    data,\n    rows,\n    headerHeight,\n    footerPaginationEnabled,\n    rowHeight,\n    itemCount,\n    pageIndex,\n    tableState,\n    prepareRow,\n    onCellFilterAdded,\n    width,\n    cellHeight = TableCellHeight.Sm,\n    timeRange,\n    tableStyles,\n    nestedDataField,\n    listHeight,\n    listRef,\n    enableSharedCrosshair = false,\n    initialRowIndex = undefined,\n    headerGroups,\n    longestField,\n    textWrapField,\n    getActions,\n    replaceVariables,\n    setInspectCell,\n  } = props;\n\n  const [rowHighlightIndex, setRowHighlightIndex] = useState<number | undefined>(initialRowIndex);\n  if (initialRowIndex === undefined && rowHighlightIndex !== undefined) {\n    setRowHighlightIndex(undefined);\n  }\n\n  const theme = useTheme2();\n  const panelContext = usePanelContext();\n\n  // Create off-screen canvas for measuring rows for virtualized rendering\n  // This line is like this because Jest doesn't have OffscreenCanvas mocked\n  // nor is it a part of the jest-canvas-mock package\n  let osContext = null;\n  if (window.OffscreenCanvas !== undefined) {\n    // The canvas size is defined arbitrarily\n    // As we never actually visualize rendered content\n    // from the offscreen canvas, only perform text measurements\n    osContext = new OffscreenCanvas(256, 1024).getContext('2d');\n  }\n\n  // Set font property using theme info\n  // This will make text measurement accurate\n  if (osContext !== undefined && osContext !== null) {\n    osContext.font = `${theme.typography.fontSize}px ${theme.typography.body.fontFamily}`;\n  }\n\n  const threshold = useMemo(() => {\n    const timeField = data.fields.find((f) => f.type === FieldType.time);\n\n    if (!timeField) {\n      return 0;\n    }\n\n    return calculateAroundPointThreshold(timeField);\n  }, [data]);\n\n  const onRowHover = useCallback(\n    (idx: number, frame: DataFrame) => {\n      if (!panelContext || !enableSharedCrosshair) {\n        return;\n      }\n\n      const timeField: Field = frame!.fields.find((f) => f.type === FieldType.time)!;\n\n      if (!timeField) {\n        return;\n      }\n\n      panelContext.eventBus.publish(\n        new DataHoverEvent({\n          point: {\n            time: timeField.values[idx],\n          },\n        })\n      );\n    },\n    [enableSharedCrosshair, panelContext]\n  );\n\n  const onRowLeave = useCallback(() => {\n    if (!panelContext || !enableSharedCrosshair) {\n      return;\n    }\n\n    panelContext.eventBus.publish(new DataHoverClearEvent());\n  }, [enableSharedCrosshair, panelContext]);\n\n  const onDataHoverEvent = useCallback(\n    (evt: DataHoverEvent) => {\n      if (evt.payload.point?.time && evt.payload.rowIndex !== undefined) {\n        const timeField = data.fields.find((f) => f.type === FieldType.time);\n        const time = timeField!.values[evt.payload.rowIndex];\n        const pointTime = evt.payload.point.time;\n\n        // If the time value of the hovered point is around the time value of the\n        // row with same index, highlight the row\n        if (isPointTimeValAroundTableTimeVal(pointTime, time, threshold)) {\n          setRowHighlightIndex(evt.payload.rowIndex);\n          return;\n        }\n\n        // If the time value of the hovered point is not around the time value of the\n        // row with same index, try to find a row with same time value\n        const matchedRowIndex = timeField!.values.findIndex((t) =>\n          isPointTimeValAroundTableTimeVal(pointTime, t, threshold)\n        );\n\n        if (matchedRowIndex !== -1) {\n          setRowHighlightIndex(matchedRowIndex);\n          return;\n        }\n\n        setRowHighlightIndex(undefined);\n      }\n    },\n    [data.fields, threshold]\n  );\n\n  useEffect(() => {\n    if (!panelContext || !enableSharedCrosshair || !hasTimeField(data) || footerPaginationEnabled) {\n      return;\n    }\n\n    const subs = new Subscription();\n\n    subs.add(\n      panelContext.eventBus\n        .getStream(DataHoverEvent)\n        .pipe(debounceTime(250))\n        .subscribe({\n          next: (evt) => {\n            if (panelContext.eventBus === evt.origin) {\n              return;\n            }\n\n            onDataHoverEvent(evt);\n          },\n        })\n    );\n\n    subs.add(\n      panelContext.eventBus\n        .getStream(DataHoverClearEvent)\n        .pipe(debounceTime(250))\n        .subscribe({\n          next: (evt) => {\n            if (panelContext.eventBus === evt.origin) {\n              return;\n            }\n\n            setRowHighlightIndex(undefined);\n          },\n        })\n    );\n\n    return () => {\n      subs.unsubscribe();\n    };\n  }, [data, enableSharedCrosshair, footerPaginationEnabled, onDataHoverEvent, panelContext]);\n\n  let scrollTop: number | undefined = undefined;\n  if (rowHighlightIndex !== undefined) {\n    const firstMatchedRowIndex = rows.findIndex((row) => row.index === rowHighlightIndex);\n\n    if (firstMatchedRowIndex !== -1) {\n      scrollTop = headerHeight + (firstMatchedRowIndex - 1) * rowHeight;\n    }\n  }\n\n  const rowIndexForPagination = useCallback(\n    (index: number) => {\n      return tableState.pageIndex * tableState.pageSize + index;\n    },\n    [tableState.pageIndex, tableState.pageSize]\n  );\n\n  let rowBg: Function | undefined = undefined;\n  let textWrapFinal: Field | undefined;\n  for (const field of data.fields) {\n    // eslint-disable-next-line @typescript-eslint/consistent-type-assertions\n    const fieldOptions = field.config.custom as TableFieldOptions;\n    const cellOptionsExist = fieldOptions !== undefined && fieldOptions.cellOptions !== undefined;\n\n    if (\n      cellOptionsExist &&\n      fieldOptions.cellOptions.type === TableCellDisplayMode.ColorBackground &&\n      fieldOptions.cellOptions.applyToRow\n    ) {\n      rowBg = (rowIndex: number): CellColors => {\n        const display = field.display!(field.values.get(rowIndex));\n        const colors = getCellColors(tableStyles.theme, fieldOptions.cellOptions, display);\n        return colors;\n      };\n    }\n\n    if (textWrapField !== undefined) {\n      textWrapFinal = textWrapField;\n    } else if (longestField !== undefined) {\n      textWrapFinal = longestField;\n    }\n  }\n\n  const RenderRow = useCallback(\n    ({ index, style, rowHighlightIndex }: { index: number; style: CSSProperties; rowHighlightIndex?: number }) => {\n      const indexForPagination = rowIndexForPagination(index);\n      const row = rows[indexForPagination];\n      let additionalProps: React.HTMLAttributes<HTMLDivElement> = {};\n      prepareRow(row);\n\n      const expandedRowStyle = tableState.expanded[row.id] ? css({ '&:hover': { background: 'inherit' } }) : {};\n      const rowExpanded = nestedDataField && tableState.expanded[row.id];\n\n      if (rowHighlightIndex !== undefined && row.index === rowHighlightIndex) {\n        style = { ...style, backgroundColor: theme.components.table.rowSelected };\n        additionalProps = {\n          'aria-selected': 'true',\n        };\n      }\n\n      // Color rows if enabled\n      if (rowBg) {\n        const { bgColor, textColor } = rowBg(row.index);\n        style.background = bgColor;\n        style.color = textColor;\n        style.borderLeft = `2px solid ${bgColor}`;\n      }\n\n      // If there's a text wrapping field we set the height of it here\n      if (textWrapFinal) {\n        const visibleFields = data.fields.filter((field) => !Boolean(field.config.custom?.hidden));\n        const seriesIndex = visibleFields.findIndex((field) => field.name === textWrapFinal.name);\n        const pxLineHeight = theme.typography.body.lineHeight * theme.typography.fontSize;\n        const bbox = guessTextBoundingBox(\n          textWrapFinal.values[row.index],\n          headerGroups[0].headers[seriesIndex],\n          osContext,\n          pxLineHeight,\n          tableStyles.rowHeight,\n          tableStyles.cellPadding\n        );\n        style.height = bbox.height;\n      }\n      const { key, ...rowProps } = row.getRowProps({ style, ...additionalProps });\n\n      return (\n        <div\n          key={key}\n          {...rowProps}\n          className={cx(tableStyles.row, expandedRowStyle)}\n          onMouseEnter={() => onRowHover(row.index, data)}\n          onMouseLeave={onRowLeave}\n        >\n          {/*add the nested data to the DOM first to prevent a 1px border CSS issue on the last cell of the row*/}\n          {rowExpanded && (\n            <ExpandedRow\n              nestedData={nestedDataField}\n              tableStyles={tableStyles}\n              // Using `row.index` ensures that we pick the correct row from the original data frame even when rows in\n              // the table are sorted, since `row.index` does not change when sorting.\n              rowIndex={row.index}\n              width={width}\n              cellHeight={cellHeight}\n            />\n          )}\n          {row.cells.map((cell: Cell, index: number) => (\n            <TableCell\n              key={index}\n              tableStyles={tableStyles}\n              cell={cell}\n              onCellFilterAdded={onCellFilterAdded}\n              columnIndex={index}\n              columnCount={row.cells.length}\n              timeRange={timeRange}\n              frame={data}\n              rowStyled={rowBg !== undefined}\n              rowExpanded={rowExpanded}\n              textWrapped={textWrapFinal !== undefined}\n              // VariableSizeList overrides calculated in buildCellContainerStyle height of the cell,\n              // so we need to subtract 1 to respect the row border\n              height={Number(style.height) - 1}\n              getActions={getActions}\n              replaceVariables={replaceVariables}\n              setInspectCell={setInspectCell}\n            />\n          ))}\n        </div>\n      );\n    },\n    [\n      rowIndexForPagination,\n      rows,\n      prepareRow,\n      tableState.expanded,\n      nestedDataField,\n      rowBg,\n      textWrapFinal,\n      tableStyles,\n      onRowLeave,\n      width,\n      cellHeight,\n      theme.components.table.rowSelected,\n      theme.typography.body.lineHeight,\n      theme.typography.fontSize,\n      data,\n      headerGroups,\n      osContext,\n      onRowHover,\n      onCellFilterAdded,\n      timeRange,\n      getActions,\n      replaceVariables,\n      setInspectCell,\n    ]\n  );\n\n  const getItemSize = (index: number): number => {\n    const indexForPagination = rowIndexForPagination(index);\n    const row = rows[indexForPagination];\n\n    if (tableState.expanded[row.id] && nestedDataField) {\n      return getExpandedRowHeight(nestedDataField, row.index, tableStyles);\n    }\n\n    if (textWrapFinal) {\n      const visibleFields = data.fields.filter((field) => !Boolean(field.config.custom?.hidden));\n      const seriesIndex = visibleFields.findIndex((field) => field.name === textWrapFinal.name);\n      const pxLineHeight = theme.typography.fontSize * theme.typography.body.lineHeight;\n      return guessTextBoundingBox(\n        textWrapFinal.values[row.index],\n        headerGroups[0].headers[seriesIndex],\n        osContext,\n        pxLineHeight,\n        tableStyles.rowHeight,\n        tableStyles.cellPadding\n      ).height;\n    }\n\n    return tableStyles.rowHeight;\n  };\n\n  const handleScroll: UIEventHandler = (event) => {\n    const { scrollTop } = event.currentTarget;\n\n    if (listRef.current !== null) {\n      listRef.current.scrollTo(scrollTop);\n    }\n  };\n\n  // It's a hack for text wrapping.\n  // VariableSizeList component didn't know that we manually set row height.\n  // So we need to reset the list when the rows high changes.\n  useEffect(() => {\n    if (listRef.current) {\n      listRef.current.resetAfterIndex(0);\n    }\n  }, [rows, listRef]);\n\n  return (\n    <CustomScrollbar onScroll={handleScroll} hideHorizontalTrack={true} scrollTop={scrollTop}>\n      <VariableSizeList\n        key={`${rowHeight}${pageIndex}`}\n        height={listHeight}\n        itemCount={itemCount}\n        itemSize={getItemSize}\n        width={'100%'}\n        ref={listRef}\n        style={{ overflow: undefined }}\n      >\n        {({ index, style }) => RenderRow({ index, style, rowHighlightIndex })}\n      </VariableSizeList>\n    </CustomScrollbar>\n  );\n};\n"],"names":["data","TableCellHeight","useState","useTheme2","usePanelContext","useMemo","FieldType","calculateAroundPointThreshold","useCallback","DataHoverEvent","DataHoverClearEvent","isPointTimeValAroundTableTimeVal","useEffect","hasTimeField","Subscription","debounceTime","TableCellDisplayMode","getCellColors","rowHighlightIndex","css","guessTextBoundingBox","jsxs","cx","jsx","ExpandedRow","index","TableCell","getExpandedRowHeight","scrollTop","CustomScrollbar","VariableSizeList"],"mappings":"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"}