import { Cell, Checkbox, Row, Table, TableHeader, } from '@mongodb-js/compass-components'; import React, { useCallback } from 'react'; type SelectItem = { id: string; selected: boolean; }; type SelectTableProps = { items: T[]; columns: ReadonlyArray< readonly [key: string & keyof T, label: string | JSX.Element] >; onChange: (newList: T[]) => void; disabled?: boolean; className?: string; }; export function SelectTable( props: SelectTableProps ): React.ReactElement { const { items, columns, disabled, onChange } = props; const selectAll = items.every((item) => item.selected); const selectNone = items.every((item) => !item.selected); const handleSelectAllChange = useCallback( (e: React.ChangeEvent) => { onChange( items.map((item) => ({ ...item, selected: !!e.target.checked })) ); }, [items, onChange] ); const handleSelectItemChange = useCallback( (e: React.ChangeEvent) => { onChange( items.map((item) => e.target.name === `select-${item.id}` ? { ...item, selected: !!e.target.checked } : item ) ); }, [items, onChange] ); return (
} />, ...columns.map((col) => ( )), ]} > {({ datum: item }) => ( {columns.map(([name]) => ( {item[name]} ))} )}
); }