import React from 'react'; import PropTypes from 'prop-types'; import { I18n } from '@lingui/react'; import { t } from '@lingui/macro'; import { Button, Checkbox, Dropdown, DropdownPosition, DropdownToggle, DropdownItem, Level, LevelItem, TextInput, Toolbar, ToolbarGroup, ToolbarItem, } from '@patternfly/react-core'; import { BarsIcon, EqualsIcon, SortAlphaDownIcon, SortAlphaUpIcon, SortNumericDownIcon, SortNumericUpIcon, TrashAltIcon, PlusIcon } from '@patternfly/react-icons'; import { Link } from 'react-router-dom'; import Tooltip from '../Tooltip'; class DataListToolbar extends React.Component { constructor (props) { super(props); const { sortedColumnKey } = this.props; this.state = { isSearchDropdownOpen: false, isSortDropdownOpen: false, searchKey: sortedColumnKey, searchValue: '', }; this.handleSearchInputChange = this.handleSearchInputChange.bind(this); this.onSortDropdownToggle = this.onSortDropdownToggle.bind(this); this.onSortDropdownSelect = this.onSortDropdownSelect.bind(this); this.onSearchDropdownToggle = this.onSearchDropdownToggle.bind(this); this.onSearchDropdownSelect = this.onSearchDropdownSelect.bind(this); this.onSearch = this.onSearch.bind(this); this.onSort = this.onSort.bind(this); } onSortDropdownToggle (isSortDropdownOpen) { this.setState({ isSortDropdownOpen }); } onSortDropdownSelect ({ target }) { const { columns, onSort, sortOrder } = this.props; const { innerText } = target; const [{ key: searchKey }] = columns.filter(({ name }) => name === innerText); this.setState({ isSortDropdownOpen: false }); onSort(searchKey, sortOrder); } onSearchDropdownToggle (isSearchDropdownOpen) { this.setState({ isSearchDropdownOpen }); } onSearchDropdownSelect ({ target }) { const { columns } = this.props; const { innerText } = target; const [{ key: searchKey }] = columns.filter(({ name }) => name === innerText); this.setState({ isSearchDropdownOpen: false, searchKey }); } onSearch () { const { searchValue } = this.state; const { onSearch } = this.props; onSearch(searchValue); } onSort () { const { onSort, sortedColumnKey, sortOrder } = this.props; const newSortOrder = sortOrder === 'ascending' ? 'descending' : 'ascending'; onSort(sortedColumnKey, newSortOrder); } handleSearchInputChange (searchValue) { this.setState({ searchValue }); } render () { const { up } = DropdownPosition; const { columns, isAllSelected, onSelectAll, sortedColumnKey, sortOrder, addUrl, showExpandCollapse, showDelete, showSelectAll } = this.props; const { // isActionDropdownOpen, isSearchDropdownOpen, isSortDropdownOpen, searchKey, searchValue, } = this.state; const [{ name: searchColumnName }] = columns.filter(({ key }) => key === searchKey); const [{ name: sortedColumnName, isNumeric }] = columns .filter(({ key }) => key === sortedColumnKey); const searchDropdownItems = columns .filter(({ key }) => key !== searchKey) .map(({ key, name }) => ( {name} )); const sortDropdownItems = columns .filter(({ key, isSortable }) => isSortable && key !== sortedColumnKey) .map(({ key, name }) => ( {name} )); let SortIcon; if (isNumeric) { SortIcon = sortOrder === 'ascending' ? SortNumericUpIcon : SortNumericDownIcon; } else { SortIcon = sortOrder === 'ascending' ? SortAlphaUpIcon : SortAlphaDownIcon; } return ( {({ i18n }) => (
{ showSelectAll && ( )}
{searchColumnName} )} dropdownItems={searchDropdownItems} />