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;