import { Checkbox, TableCell, TableHead, TableRow, TableSortLabel } from "@material-ui/core"; import PropTypes from "prop-types"; import React from "react"; const HeaderSortable = (props) => { const { classes, order, orderBy, onSortRequest, columnData, multiSelect, onSelectAll, selectCount, rowCount, } = props; const sortHandler = (property) => (event) => { if (!onSortRequest) return; onSortRequest(event, property); }; const selectAllHandler = (event) => { if (!onSelectAll) return; onSelectAll(event); }; const getOrder = (value) => value === "desc" ? "sorted descending" : "sorted ascending"; const ColumnLabel = (column) => { if (column.no_sort) { return column.label } if (column.id) { return ( {column.label} {orderBy === column.id && ( {getOrder(order)} )} ); } return column.label; }; if (multiSelect) { const errors = []; if (onSelectAll === undefined) errors.push("onSelectAll required"); if (selectCount === undefined) errors.push("selectCount required"); if (rowCount === undefined) errors.push("rowCount required"); if (errors.length > 0) { throw new Error(errors.join(". ")); } } return ( {multiSelect && ( 0 && selectCount < rowCount} checked={rowCount > 0 && selectCount === rowCount} onChange={selectAllHandler} inputProps={{ "aria-label": "select all desserts" }} /> )} {columnData.map((column, index) => ( {ColumnLabel(column)} ))} ); }; HeaderSortable.propTypes = { classes: PropTypes.object.isRequired, onSortRequest: PropTypes.func.isRequired, order: PropTypes.oneOf(["asc", "desc"]).isRequired, orderBy: PropTypes.string.isRequired, columnData: PropTypes.array.isRequired, multiSelect: PropTypes.bool, selectCount: PropTypes.number, totalRows: PropTypes.number, onSelectAll: PropTypes.func, }; export default HeaderSortable;