/** * Copyright (c) OpenLens Authors. All rights reserved. * Licensed under MIT License. See LICENSE in root directory for more information. */ import styles from "./react-table.module.scss"; import React, { useCallback, useMemo } from "react"; import type { Row, UseTableOptions } from "react-table"; import { useFlexLayout, useSortBy, useTable } from "react-table"; import { Icon } from "../icon"; import { cssNames } from "../../utils"; export interface ReactTableProps extends UseTableOptions { headless?: boolean; } export function ReactTable({ columns, data, headless }: ReactTableProps) { const defaultColumn = useMemo( () => ({ minWidth: 20, width: 100, }), [], ); const { getTableProps, getTableBodyProps, headerGroups, rows, prepareRow, } = useTable( { columns, data, defaultColumn, }, useFlexLayout, useSortBy, ); const renderRow = useCallback( (row: Row) => { prepareRow(row); return (
{row.cells.map((cell, index) => (
{cell.render("Cell")}
))}
); }, [columns, prepareRow], ); return (
{!headless && (
{headerGroups.map(headerGroup => (
{headerGroup.headers.map(column => (
{column.render("Header")} {/* Sort direction indicator */} {column.isSorted ? column.isSortedDesc ? : : !column.disableSortBy && ( )}
))}
))}
)}
{rows.map(renderRow)}
); }