{"version":3,"file":"CallTreeTable.cjs","sources":["../../../src/CallTree/CallTreeTable.tsx"],"sourcesContent":["import { css, cx } from '@emotion/css';\nimport { useEffect } from 'react';\nimport {\n  type Row,\n  type HeaderGroup,\n  type TablePropGetter,\n  type TableBodyPropGetter,\n  type TableProps,\n  type TableBodyProps,\n} from 'react-table';\n\nimport { type GrafanaTheme2 } from '@grafana/data';\nimport { Icon, useStyles2 } from '@grafana/ui';\n\nimport { type CallTreeNode } from './utils';\n\ntype CallTreeTableProps = {\n  width: number;\n  height: number;\n  compactModeThreshold: number;\n  isCompact: boolean;\n  setIsCompact: (compact: boolean) => void;\n  getFunctionColumnWidth: (availableWidth: number, compactMode: boolean) => number | undefined;\n  getTableProps: (propGetter?: TablePropGetter<CallTreeNode>) => TableProps;\n  getTableBodyProps: (propGetter?: TableBodyPropGetter<CallTreeNode>) => TableBodyProps;\n  headerGroups: Array<HeaderGroup<CallTreeNode>>;\n  rows: Array<Row<CallTreeNode>>;\n  prepareRow: (row: Row<CallTreeNode>) => void;\n  currentSearchMatchId?: string;\n  searchMatchRowRef: (node: HTMLTableRowElement | null) => void;\n  scrollContainerRef: { current: HTMLDivElement | null };\n  focusedNodeId?: string;\n  callersNodeLabel?: string;\n};\n\nexport function CallTreeTable({\n  width,\n  height,\n  compactModeThreshold,\n  isCompact,\n  setIsCompact,\n  getFunctionColumnWidth,\n  getTableProps,\n  getTableBodyProps,\n  headerGroups,\n  rows,\n  prepareRow,\n  currentSearchMatchId,\n  searchMatchRowRef,\n  scrollContainerRef,\n  focusedNodeId,\n  callersNodeLabel,\n}: CallTreeTableProps) {\n  const styles = useStyles2(getStyles);\n  const SCROLLBAR_WIDTH = 16;\n  const availableWidth = width - SCROLLBAR_WIDTH;\n  const shouldBeCompact = availableWidth > 0 && availableWidth < compactModeThreshold;\n\n  useEffect(() => {\n    if (availableWidth <= 0) {\n      return;\n    }\n    if (shouldBeCompact !== isCompact) {\n      setIsCompact(shouldBeCompact);\n    }\n  }, [availableWidth, shouldBeCompact, isCompact, setIsCompact]);\n\n  const functionColumnWidth = getFunctionColumnWidth(availableWidth, isCompact);\n\n  if (width < 3 || height < 3) {\n    return null;\n  }\n\n  return (\n    <div style={{ width, height, display: 'flex', flexDirection: 'column' }}>\n      <table {...getTableProps()} className={styles.table} style={{ flexShrink: 0 }}>\n        <thead className={styles.thead}>\n          {headerGroups.map((headerGroup) => {\n            const { key, ...headerGroupProps } = headerGroup.getHeaderGroupProps();\n            return (\n              <tr key={key} {...headerGroupProps}>\n                {headerGroup.headers.map((column) => {\n                  const { key: headerKey, ...headerProps } = column.getHeaderProps(column.getSortByToggleProps());\n                  const columnWidth = column.id === 'label' ? functionColumnWidth : column.width;\n                  return (\n                    <th\n                      key={headerKey}\n                      {...headerProps}\n                      className={styles.th}\n                      style={{\n                        ...(columnWidth !== undefined && { width: columnWidth }),\n                        textAlign: column.id === 'self' || column.id === 'total' ? 'right' : undefined,\n                        ...(column.minWidth !== undefined && { minWidth: column.minWidth }),\n                      }}\n                    >\n                      {column.render('Header')}\n                      {column.isSorted && (\n                        <Icon\n                          name={column.isSortedDesc ? 'arrow-down' : 'arrow-up'}\n                          size=\"lg\"\n                          className={styles.sortIcon}\n                        />\n                      )}\n                    </th>\n                  );\n                })}\n              </tr>\n            );\n          })}\n        </thead>\n      </table>\n      <div\n        ref={scrollContainerRef}\n        style={{ flex: 1, overflowY: 'scroll', overflowX: 'auto' }}\n        className={styles.scrollContainer}\n      >\n        <table {...getTableProps()} className={styles.table}>\n          <tbody {...getTableBodyProps()} className={styles.tbody}>\n            {rows.map((row, rowIndex) => {\n              prepareRow(row);\n              const { key, ...rowProps } = row.getRowProps();\n              const isFocusedRow = row.original.id === focusedNodeId;\n              const isCallersTargetRow = callersNodeLabel && row.original.label === callersNodeLabel;\n              const isSearchMatchRow = currentSearchMatchId && row.original.id === currentSearchMatchId;\n\n              return (\n                <tr\n                  key={key}\n                  {...rowProps}\n                  ref={isSearchMatchRow ? searchMatchRowRef : null}\n                  className={cx(\n                    styles.tr,\n                    (isFocusedRow ||\n                      (focusedNodeId?.startsWith('label:') && focusedNodeId.substring(6) === row.original.label)) &&\n                      styles.focusedRow,\n                    isCallersTargetRow && styles.callersTargetRow,\n                    isSearchMatchRow && styles.searchMatchRow\n                  )}\n                >\n                  {row.cells.map((cell) => {\n                    const { key: cellKey, ...cellProps } = cell.getCellProps();\n                    const isValueColumn = cell.column.id === 'self' || cell.column.id === 'total';\n                    const isActionsColumn = cell.column.id === 'actions';\n                    const columnWidth = cell.column.id === 'label' ? functionColumnWidth : cell.column.width;\n                    return (\n                      <td\n                        key={cellKey}\n                        {...cellProps}\n                        className={cx(\n                          styles.td,\n                          isActionsColumn && styles.actionsColumnCell,\n                          isValueColumn && styles.valueColumnCell\n                        )}\n                        style={{\n                          ...(columnWidth !== undefined && { width: columnWidth }),\n                          ...(cell.column.minWidth !== undefined && { minWidth: cell.column.minWidth }),\n                        }}\n                      >\n                        {cell.render('Cell', { rowIndex })}\n                      </td>\n                    );\n                  })}\n                </tr>\n              );\n            })}\n          </tbody>\n        </table>\n      </div>\n    </div>\n  );\n}\n\nfunction getStyles(theme: GrafanaTheme2) {\n  return {\n    scrollContainer: css({\n      '&::-webkit-scrollbar': {\n        width: '8px',\n      },\n      '&::-webkit-scrollbar-track': {\n        background: theme.colors.background.secondary,\n      },\n      '&::-webkit-scrollbar-thumb': {\n        background: theme.colors.text.disabled,\n        borderRadius: theme.shape.radius.default,\n      },\n      '&::-webkit-scrollbar-thumb:hover': {\n        background: theme.colors.text.secondary,\n      },\n    }),\n    table: css({\n      width: '100%',\n      tableLayout: 'fixed',\n      borderCollapse: 'collapse',\n      fontSize: theme.typography.fontSize,\n      color: theme.colors.text.primary,\n    }),\n    thead: css({\n      backgroundColor: theme.colors.background.secondary,\n    }),\n    th: css({\n      padding: '4px 6px',\n      height: '36px',\n      textAlign: 'left',\n      fontWeight: theme.typography.fontWeightMedium,\n      borderBottom: `1px solid ${theme.colors.border.weak}`,\n      cursor: 'pointer',\n      userSelect: 'none',\n      '&:hover': {\n        backgroundColor: theme.colors.emphasize(theme.colors.background.secondary, 0.03),\n      },\n    }),\n    tbody: css({\n      backgroundColor: theme.colors.background.primary,\n    }),\n    tr: css({\n      '&:hover': {\n        backgroundColor: theme.colors.emphasize(theme.colors.background.primary, 0.03),\n      },\n    }),\n    focusedRow: css({\n      backgroundColor: theme.colors.emphasize(theme.colors.background.primary, 0.08),\n      borderLeft: `3px solid ${theme.colors.primary.main}`,\n      fontWeight: theme.typography.fontWeightMedium,\n      '&:hover': {\n        backgroundColor: theme.colors.emphasize(theme.colors.background.primary, 0.1),\n      },\n    }),\n    callersTargetRow: css({\n      backgroundColor: theme.colors.emphasize(theme.colors.background.primary, 0.08),\n      borderLeft: `3px solid ${theme.colors.info.main}`,\n      fontWeight: theme.typography.fontWeightMedium,\n      '&:hover': {\n        backgroundColor: theme.colors.emphasize(theme.colors.background.primary, 0.1),\n      },\n    }),\n    searchMatchRow: css({\n      backgroundColor: theme.colors.warning.transparent,\n      borderLeft: `3px solid ${theme.colors.warning.main}`,\n      fontWeight: theme.typography.fontWeightMedium,\n      '&:hover': {\n        backgroundColor: theme.colors.emphasize(theme.colors.warning.transparent, 0.1),\n      },\n    }),\n    td: css({\n      padding: '0px 6px',\n      borderBottom: 'none',\n      height: '20px',\n      verticalAlign: 'middle',\n      overflow: 'hidden',\n    }),\n    sortIcon: css({\n      marginLeft: theme.spacing(0.5),\n    }),\n    actionsColumnCell: css({\n      backgroundColor: theme.colors.background.secondary,\n      '&:hover': {\n        backgroundColor: theme.colors.background.secondary,\n      },\n    }),\n    valueColumnCell: css({\n      overflow: 'visible',\n      textAlign: 'right',\n    }),\n  };\n}\n"],"names":["useStyles2","useEffect","jsxs","jsx","Icon","cx","css"],"mappings":"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"}