You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
58 lines
1.5 KiB
58 lines
1.5 KiB
import React from 'react';
|
|
import { cx } from '@emotion/css';
|
|
|
|
import { useStyles2 } from '@grafana/ui';
|
|
|
|
import NestedRows from './NestedRows';
|
|
import getStyles from './styles';
|
|
import { ResourceRow, ResourceRowGroup } from './types';
|
|
|
|
interface NestedResourceTableProps {
|
|
rows: ResourceRowGroup;
|
|
selectedRows: ResourceRowGroup;
|
|
noHeader?: boolean;
|
|
requestNestedRows: (row: ResourceRow) => Promise<void>;
|
|
onRowSelectedChange: (row: ResourceRow, selected: boolean) => void;
|
|
}
|
|
|
|
const NestedResourceTable: React.FC<NestedResourceTableProps> = ({
|
|
rows,
|
|
selectedRows,
|
|
noHeader,
|
|
requestNestedRows,
|
|
onRowSelectedChange,
|
|
}) => {
|
|
const styles = useStyles2(getStyles);
|
|
|
|
return (
|
|
<>
|
|
<table className={styles.table}>
|
|
{!noHeader && (
|
|
<thead>
|
|
<tr className={cx(styles.row, styles.header)}>
|
|
<td className={styles.cell}>Scope</td>
|
|
<td className={styles.cell}>Type</td>
|
|
<td className={styles.cell}>Location</td>
|
|
</tr>
|
|
</thead>
|
|
)}
|
|
</table>
|
|
|
|
<div className={styles.tableScroller}>
|
|
<table className={styles.table}>
|
|
<tbody>
|
|
<NestedRows
|
|
rows={rows}
|
|
selectedRows={selectedRows}
|
|
level={0}
|
|
requestNestedRows={requestNestedRows}
|
|
onRowSelectedChange={onRowSelectedChange}
|
|
/>
|
|
</tbody>
|
|
</table>
|
|
</div>
|
|
</>
|
|
);
|
|
};
|
|
|
|
export default NestedResourceTable;
|
|
|