import React, { Fragment } from 'react'; import PropTypes from 'prop-types'; import { Icon, ItemContainer, HeaderItem, HeaderText, WhiteSpaceCheckbox, WhiteSpaceRadioButton, CheckBoxContainer, } from '../../styledComponents'; import { Props } from './interfaces'; import { ORDER_TYPE } from '../../constants'; import { getTheme } from '../../../utils/theme'; import Tooltip from '../../../Tooltip'; import Checkbox from '../../../Checkbox/index'; import iconSortedListDescDark from '../../../images/icon-sorted-desc-dark.svg'; import iconSortedListAscDark from '../../../images/icon-sorted-asc-dark.svg'; import iconSortDark from '../../../images/icon-sort-dark.svg'; import iconSortedListDesc from '../../../images/icon-sorted-desc.svg'; import iconSortedListAsc from '../../../images/icon-sorted-asc.svg'; import iconSort from '../../../images/icon-sort.svg'; const icons = { dark: { default: iconSortDark, asc: iconSortedListAscDark, desc: iconSortedListDescDark, }, blue: { default: iconSort, asc: iconSortedListAsc, desc: iconSortedListDesc, }, }; const ListViewHeader = (props: Props): JSX.Element => { const { theme, data, columns, orderBy, orderType, setOrder, selectedCount, selectAllRows, isSelectable, disableFullSelection, notSelectableItemsCount, disableMultipleSelection, shouldDisplayActionColumn, } = props; const selectSortIcon = (id) => { const updatedTheme = getTheme(theme, 'listView'); if (id === orderBy) { return orderType === ORDER_TYPE.DESCENDING ? icons[updatedTheme.header?.icon].desc : icons[updatedTheme.header?.icon].asc; } return icons[updatedTheme.header?.icon].default; }; return ( <> {isSelectable && !disableMultipleSelection && !disableFullSelection && ( selectAllRows()} theme={getTheme(theme, 'checkbox')} > 0} isDisabled={data && data.length === notSelectableItemsCount} /> )} {disableMultipleSelection && } {isSelectable && !disableMultipleSelection && disableFullSelection && ( )} {columns && columns.map((column) => { if (column.hidden) { return ( ); } return ( !column.disableSort && setOrder(column.propertyKey) } enableCursorPointer={!column.disableSort} > {!column.hideHeader && ( <> {column.name} {!column.disableSort && ( )} {column.tooltipText && ( )} )} ); })} {shouldDisplayActionColumn && ( )} ); }; ListViewHeader.propTypes = { columns: PropTypes.arrayOf( PropTypes.shape({ render: PropTypes.func, name: PropTypes.string.isRequired, propertyKey: PropTypes.string.isRequired, large: PropTypes.bool, narrow: PropTypes.bool, hidden: PropTypes.bool, minWidth: PropTypes.number, disableSort: PropTypes.bool, }) ).isRequired, orderBy: PropTypes.string, setOrder: PropTypes.func.isRequired, selectAllRows: PropTypes.func.isRequired, isSelectable: PropTypes.bool.isRequired, shouldDisplayActionColumn: PropTypes.bool.isRequired, }; ListViewHeader.defaultProps = { orderBy: null, }; export default ListViewHeader;