{"version":3,"file":"InteractiveTable.cjs","sources":["../../../../src/components/InteractiveTable/InteractiveTable.tsx"],"sourcesContent":["import { css, cx } from '@emotion/css';\nimport { uniqueId } from 'lodash';\nimport { Fragment, ReactNode, useCallback, useEffect, useMemo } from 'react';\nimport {\n  HeaderGroup,\n  PluginHook,\n  Row,\n  SortingRule,\n  TableOptions,\n  useExpanded,\n  usePagination,\n  useSortBy,\n  useTable,\n} from 'react-table';\n\nimport { GrafanaTheme2, IconName, isTruthy } from '@grafana/data';\nimport { t } from '@grafana/i18n';\n\nimport { useStyles2 } from '../../themes/ThemeContext';\nimport { Icon } from '../Icon/Icon';\nimport { Pagination } from '../Pagination/Pagination';\nimport { Tooltip } from '../Tooltip/Tooltip';\nimport { PopoverContent } from '../Tooltip/types';\n\nimport { Column } from './types';\nimport { EXPANDER_CELL_ID, getColumns } from './utils';\n\nconst getStyles = (theme: GrafanaTheme2) => {\n  const rowHoverBg = theme.colors.emphasize(theme.colors.background.primary, 0.03);\n\n  return {\n    container: css({\n      display: 'flex',\n      gap: theme.spacing(2),\n      flexDirection: 'column',\n      width: '100%',\n      overflowX: 'auto',\n    }),\n    cell: css({\n      padding: theme.spacing(1),\n      minWidth: theme.spacing(3),\n    }),\n    table: css({\n      borderRadius: theme.shape.radius.default,\n      width: '100%',\n    }),\n    disableGrow: css({\n      width: 0,\n    }),\n    header: css({\n      borderBottom: `1px solid ${theme.colors.border.weak}`,\n      minWidth: theme.spacing(3),\n      '&, & > button': {\n        position: 'relative',\n        whiteSpace: 'nowrap',\n        padding: theme.spacing(1),\n      },\n      '& > button': {\n        '&:after': {\n          content: '\"\\\\00a0\"',\n        },\n        width: '100%',\n        height: '100%',\n        background: 'none',\n        border: 'none',\n        paddingRight: theme.spacing(2.5),\n        textAlign: 'left',\n        fontWeight: theme.typography.fontWeightMedium,\n      },\n    }),\n    row: css({\n      label: 'row',\n      borderBottom: `1px solid ${theme.colors.border.weak}`,\n\n      '&:hover': {\n        backgroundColor: rowHoverBg,\n      },\n\n      '&:last-child': {\n        borderBottom: 0,\n      },\n    }),\n    expandedRow: css({\n      label: 'expanded-row-content',\n      borderBottom: 'none',\n    }),\n    expandedContentCell: css({\n      borderBottom: `1px solid ${theme.colors.border.weak}`,\n      position: 'relative',\n      padding: theme.spacing(2, 2, 2, 5),\n\n      '&:before': {\n        content: '\"\"',\n        position: 'absolute',\n        width: '1px',\n        top: 0,\n        left: '16px',\n        bottom: theme.spacing(2),\n        background: theme.colors.border.medium,\n      },\n    }),\n    expandedContentRow: css({\n      label: 'expanded-row-content',\n    }),\n    sortableHeader: css({\n      /* increases selector's specificity so that it always takes precedence over default styles  */\n      '&&': {\n        padding: 0,\n      },\n    }),\n  };\n};\n\nexport type InteractiveTableHeaderTooltip = {\n  content: PopoverContent;\n  iconName?: IconName;\n};\n\nexport type FetchDataArgs<Data> = { sortBy: Array<SortingRule<Data>> };\nexport type FetchDataFunc<Data> = ({ sortBy }: FetchDataArgs<Data>) => void;\n\ninterface BaseProps<TableData extends object> {\n  className?: string;\n  /**\n   * Table's columns definition. Must be memoized.\n   */\n  columns: Array<Column<TableData>>;\n  /**\n   * The data to display in the table. Must be memoized.\n   */\n  data: TableData[];\n  /**\n   * Must return a unique id for each row\n   */\n  getRowId: TableOptions<TableData>['getRowId'];\n  /**\n   * Optional tooltips for the table headers. The key must match the column id.\n   */\n  headerTooltips?: Record<string, InteractiveTableHeaderTooltip>;\n  /**\n   * Number of rows per page. A value of zero disables pagination. Defaults to 0.\n   * A React hooks error will be thrown if pageSize goes from greater than 0 to 0 or vice versa. If enabling pagination,\n   * make sure pageSize remains a non-zero value.\n   */\n  pageSize?: number;\n  /**\n   * A custom function to fetch data when the table is sorted. If not provided, the table will be sorted client-side.\n   * It's important for this function to have a stable identity, e.g. being wrapped into useCallback to prevent unnecessary\n   * re-renders of the table.\n   */\n  fetchData?: FetchDataFunc<TableData>;\n  /**\n   * Optional way to set how the table is sorted from the beginning. Must be memoized.\n   */\n  initialSortBy?: Array<SortingRule<TableData>>;\n  /**\n   * Disable the ability to remove sorting on columns (none -> asc -> desc -> asc)\n   */\n  disableSortRemove?: boolean;\n  /**\n   * Will automatically reset to the first page if the `data` prop is changed\n   */\n  autoResetPage?: boolean;\n}\n\ninterface WithExpandableRow<TableData extends object> extends BaseProps<TableData> {\n  /**\n   * Render function for the expanded row. if not provided, the tables rows will not be expandable.\n   */\n  renderExpandedRow: (row: TableData) => ReactNode;\n  /**\n   * Whether to show the \"Expand all\" button. Depends on renderExpandedRow to be provided. Defaults to false.\n   */\n  showExpandAll?: boolean;\n}\n\ninterface WithoutExpandableRow<TableData extends object> extends BaseProps<TableData> {\n  renderExpandedRow?: never;\n  showExpandAll?: never;\n}\n\ntype Props<TableData extends object> = WithExpandableRow<TableData> | WithoutExpandableRow<TableData>;\n\n/**\n * The InteractiveTable is used to display and select data efficiently. It allows for the display and modification of detailed information.\n *\n * https://developers.grafana.com/ui/latest/index.html?path=/docs/layout-interactivetable--docs\n *\n * @alpha\n */\nexport function InteractiveTable<TableData extends object>({\n  autoResetPage,\n  className,\n  columns,\n  data,\n  getRowId,\n  headerTooltips,\n  pageSize = 0,\n  renderExpandedRow,\n  showExpandAll = false,\n  fetchData,\n  initialSortBy = [],\n  disableSortRemove,\n}: Props<TableData>) {\n  const styles = useStyles2(getStyles);\n  const tableColumns = useMemo(() => {\n    return getColumns<TableData>(columns, showExpandAll);\n  }, [columns, showExpandAll]);\n  const id = useUniqueId();\n  const getRowHTMLID = useCallback(\n    (row: Row<TableData>) => {\n      return `${id}-${row.id}`.replace(/\\s/g, '');\n    },\n    [id]\n  );\n\n  const tableHooks: Array<PluginHook<TableData>> = [useSortBy, useExpanded];\n\n  const multiplePages = data.length > pageSize;\n  const paginationEnabled = pageSize > 0;\n\n  if (paginationEnabled) {\n    tableHooks.push(usePagination);\n  }\n\n  const tableInstance = useTable<TableData>(\n    {\n      columns: tableColumns,\n      data,\n      autoResetExpanded: false,\n      autoResetPage: !!autoResetPage, // If undefined, we want to treat this as false to prevent page reset by default\n      autoResetSortBy: false,\n      disableMultiSort: true,\n      // If fetchData is provided, we disable client-side sorting\n      manualSortBy: Boolean(fetchData),\n      disableSortRemove,\n      getRowId,\n      initialState: {\n        hiddenColumns: [\n          !renderExpandedRow && EXPANDER_CELL_ID,\n          ...tableColumns\n            .filter((col) => !(col.visible ? col.visible(data) : true))\n            .map((c) => c.id)\n            .filter(isTruthy),\n        ].filter(isTruthy),\n        sortBy: initialSortBy,\n      },\n    },\n    ...tableHooks\n  );\n\n  const { getTableProps, getTableBodyProps, headerGroups, prepareRow } = tableInstance;\n\n  const { sortBy } = tableInstance.state;\n  useEffect(() => {\n    if (fetchData) {\n      fetchData({ sortBy });\n    }\n  }, [sortBy, fetchData]);\n\n  useEffect(() => {\n    if (paginationEnabled) {\n      tableInstance.setPageSize(pageSize);\n    }\n  }, [paginationEnabled, pageSize, tableInstance.setPageSize, tableInstance]);\n\n  return (\n    <div className={styles.container}>\n      <table {...getTableProps()} className={cx(styles.table, className)}>\n        <thead>\n          {headerGroups.map((headerGroup) => {\n            const { key, ...headerRowProps } = headerGroup.getHeaderGroupProps();\n\n            return (\n              <tr key={key} {...headerRowProps}>\n                {headerGroup.headers.map((column) => {\n                  const { key, ...headerCellProps } = column.getHeaderProps();\n\n                  const headerTooltip = headerTooltips?.[column.id];\n\n                  return (\n                    <th\n                      key={key}\n                      className={cx(styles.header, {\n                        [styles.disableGrow]: column.width === 0,\n                        [styles.sortableHeader]: column.canSort,\n                      })}\n                      {...headerCellProps}\n                      {...(column.isSorted && { 'aria-sort': column.isSortedDesc ? 'descending' : 'ascending' })}\n                    >\n                      <ColumnHeader column={column} headerTooltip={headerTooltip} />\n                    </th>\n                  );\n                })}\n              </tr>\n            );\n          })}\n        </thead>\n\n        <tbody {...getTableBodyProps()}>\n          {(paginationEnabled ? tableInstance.page : tableInstance.rows).map((row) => {\n            prepareRow(row);\n\n            const { key, ...otherRowProps } = row.getRowProps();\n            const rowId = getRowHTMLID(row);\n            // @ts-expect-error react-table doesn't ship with useExpanded types, and we can't use declaration merging without affecting the table viz\n            const isExpanded = row.isExpanded;\n\n            return (\n              <Fragment key={key}>\n                <tr {...otherRowProps} className={cx(styles.row, isExpanded && styles.expandedRow)}>\n                  {row.cells.map((cell) => {\n                    const { key, ...otherCellProps } = cell.getCellProps();\n                    return (\n                      <td className={styles.cell} key={key} {...otherCellProps}>\n                        {cell.render('Cell', { __rowID: rowId })}\n                      </td>\n                    );\n                  })}\n                </tr>\n                {isExpanded && renderExpandedRow && (\n                  <tr {...otherRowProps} id={rowId} className={styles.expandedContentRow}>\n                    <td className={styles.expandedContentCell} colSpan={row.cells.length}>\n                      {renderExpandedRow(row.original)}\n                    </td>\n                  </tr>\n                )}\n              </Fragment>\n            );\n          })}\n        </tbody>\n      </table>\n      {paginationEnabled && multiplePages && (\n        <span>\n          <Pagination\n            currentPage={tableInstance.state.pageIndex + 1}\n            numberOfPages={tableInstance.pageOptions.length}\n            onNavigate={(toPage) => tableInstance.gotoPage(toPage - 1)}\n          />\n        </span>\n      )}\n    </div>\n  );\n}\n\nconst useUniqueId = () => {\n  return useMemo(() => uniqueId('InteractiveTable'), []);\n};\n\nconst getColumnHeaderStyles = (theme: GrafanaTheme2) => ({\n  sortIcon: css({\n    position: 'absolute',\n    top: theme.spacing(1),\n  }),\n  headerTooltipIcon: css({\n    marginLeft: theme.spacing(0.5),\n  }),\n});\n\nfunction ColumnHeader<T extends object>({\n  column: { canSort, render, isSorted, isSortedDesc, getSortByToggleProps, Header, id },\n  headerTooltip,\n}: {\n  column: HeaderGroup<T>;\n  headerTooltip?: InteractiveTableHeaderTooltip;\n}) {\n  const styles = useStyles2(getColumnHeaderStyles);\n  const { onClick } = getSortByToggleProps();\n\n  const children = (\n    <>\n      {render('Header')}\n      {headerTooltip && (\n        <Tooltip theme=\"info-alt\" content={headerTooltip.content} placement=\"top-end\">\n          <Icon\n            className={styles.headerTooltipIcon}\n            name={headerTooltip.iconName || 'info-circle'}\n            data-testid={'header-tooltip-icon'}\n          />\n        </Tooltip>\n      )}\n      {isSorted && (\n        <span aria-hidden=\"true\" className={styles.sortIcon}>\n          <Icon name={isSortedDesc ? 'angle-down' : 'angle-up'} />\n        </span>\n      )}\n    </>\n  );\n\n  if (canSort) {\n    return (\n      <button\n        aria-label={t('grafana-ui.interactive-table.aria-label-sort-column', 'Sort column {{columnName}}', {\n          columnName: typeof Header === 'string' ? Header : id,\n        })}\n        type=\"button\"\n        onClick={onClick}\n      >\n        {children}\n      </button>\n    );\n  }\n\n  return children;\n}\n"],"names":["css","data","useStyles2","useMemo","getColumns","useCallback","useSortBy","useExpanded","usePagination","useTable","EXPANDER_CELL_ID","isTruthy","useEffect","jsxs","cx","jsx","key","Fragment","Pagination","uniqueId","Tooltip","Icon","t"],"mappings":"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"}