mirror of
https://github.com/ansible/awx.git
synced 2026-05-14 12:57:40 -02:30
add unit test coverage for DataListToolbar.jsx
This commit is contained in:
@@ -29,6 +29,7 @@ describe('<DataListToolbar />', () => {
|
|||||||
<I18nProvider>
|
<I18nProvider>
|
||||||
<DataListToolbar
|
<DataListToolbar
|
||||||
isAllSelected={false}
|
isAllSelected={false}
|
||||||
|
showExpandCollapse={true}
|
||||||
sortedColumnKey="name"
|
sortedColumnKey="name"
|
||||||
sortOrder="ascending"
|
sortOrder="ascending"
|
||||||
columns={columns}
|
columns={columns}
|
||||||
|
|||||||
@@ -47,9 +47,10 @@ class DataListToolbar extends React.Component {
|
|||||||
this.handleSearchInputChange = this.handleSearchInputChange.bind(this);
|
this.handleSearchInputChange = this.handleSearchInputChange.bind(this);
|
||||||
this.onSortDropdownToggle = this.onSortDropdownToggle.bind(this);
|
this.onSortDropdownToggle = this.onSortDropdownToggle.bind(this);
|
||||||
this.onSortDropdownSelect = this.onSortDropdownSelect.bind(this);
|
this.onSortDropdownSelect = this.onSortDropdownSelect.bind(this);
|
||||||
this.onSearch = this.onSearch.bind(this);
|
|
||||||
this.onSearchDropdownToggle = this.onSearchDropdownToggle.bind(this);
|
this.onSearchDropdownToggle = this.onSearchDropdownToggle.bind(this);
|
||||||
this.onSearchDropdownSelect = this.onSearchDropdownSelect.bind(this);
|
this.onSearchDropdownSelect = this.onSearchDropdownSelect.bind(this);
|
||||||
|
this.onSearch = this.onSearch.bind(this);
|
||||||
|
this.onSort = this.onSort.bind(this);
|
||||||
}
|
}
|
||||||
|
|
||||||
handleSearchInputChange (searchValue) {
|
handleSearchInputChange (searchValue) {
|
||||||
@@ -62,12 +63,12 @@ class DataListToolbar extends React.Component {
|
|||||||
|
|
||||||
onSortDropdownSelect ({ target }) {
|
onSortDropdownSelect ({ target }) {
|
||||||
const { columns, onSort, sortOrder } = this.props;
|
const { columns, onSort, sortOrder } = this.props;
|
||||||
|
const { innerText } = target;
|
||||||
|
|
||||||
const [{ key }] = columns.filter(({ name }) => name === target.innerText);
|
const [{ key: searchKey }] = columns.filter(({ name }) => name === innerText);
|
||||||
|
|
||||||
this.setState({ isSortDropdownOpen: false });
|
this.setState({ isSortDropdownOpen: false });
|
||||||
|
onSort(searchKey, sortOrder);
|
||||||
onSort(key, sortOrder);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
onSearchDropdownToggle (isSearchDropdownOpen) {
|
onSearchDropdownToggle (isSearchDropdownOpen) {
|
||||||
@@ -76,11 +77,10 @@ class DataListToolbar extends React.Component {
|
|||||||
|
|
||||||
onSearchDropdownSelect ({ target }) {
|
onSearchDropdownSelect ({ target }) {
|
||||||
const { columns } = this.props;
|
const { columns } = this.props;
|
||||||
|
const { innerText } = target;
|
||||||
|
|
||||||
const targetName = target.innerText;
|
const [{ key: searchKey }] = columns.filter(({ name }) => name === innerText);
|
||||||
const [{ key }] = columns.filter(({ name }) => name === targetName);
|
this.setState({ isSearchDropdownOpen: false, searchKey });
|
||||||
|
|
||||||
this.setState({ isSearchDropdownOpen: false, searchKey: key });
|
|
||||||
}
|
}
|
||||||
|
|
||||||
onSearch () {
|
onSearch () {
|
||||||
@@ -90,13 +90,19 @@ class DataListToolbar extends React.Component {
|
|||||||
onSearch(searchValue);
|
onSearch(searchValue);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
onSort () {
|
||||||
|
const { onSort, sortedColumnKey, sortOrder } = this.props;
|
||||||
|
const newSortOrder = sortOrder === 'ascending' ? 'descending' : 'ascending';
|
||||||
|
|
||||||
|
onSort(sortedColumnKey, newSortOrder);
|
||||||
|
}
|
||||||
|
|
||||||
render () {
|
render () {
|
||||||
const { up } = DropdownPosition;
|
const { up } = DropdownPosition;
|
||||||
const {
|
const {
|
||||||
columns,
|
columns,
|
||||||
isAllSelected,
|
isAllSelected,
|
||||||
onSelectAll,
|
onSelectAll,
|
||||||
onSort,
|
|
||||||
sortedColumnKey,
|
sortedColumnKey,
|
||||||
sortOrder,
|
sortOrder,
|
||||||
addUrl,
|
addUrl,
|
||||||
@@ -110,29 +116,15 @@ class DataListToolbar extends React.Component {
|
|||||||
searchValue,
|
searchValue,
|
||||||
} = this.state;
|
} = this.state;
|
||||||
|
|
||||||
const [searchColumn] = columns
|
const [{ name: searchColumnName }] = columns.filter(({ key }) => key === searchKey);
|
||||||
.filter(({ key }) => key === searchKey);
|
const [{ name: sortedColumnName, isNumeric }] = columns
|
||||||
const searchColumnName = searchColumn.name;
|
|
||||||
|
|
||||||
const [sortedColumn] = columns
|
|
||||||
.filter(({ key }) => key === sortedColumnKey);
|
.filter(({ key }) => key === sortedColumnKey);
|
||||||
const sortedColumnName = sortedColumn.name;
|
|
||||||
const isSortNumeric = sortedColumn.isNumeric;
|
|
||||||
const displayedSortIcon = () => {
|
|
||||||
let icon;
|
|
||||||
if (sortOrder === 'ascending') {
|
|
||||||
icon = isSortNumeric ? (<SortNumericUpIcon />) : (<SortAlphaUpIcon />);
|
|
||||||
} else {
|
|
||||||
icon = isSortNumeric ? (<SortNumericDownIcon />) : (<SortAlphaDownIcon />);
|
|
||||||
}
|
|
||||||
return icon;
|
|
||||||
};
|
|
||||||
|
|
||||||
const searchDropdownItems = columns
|
const searchDropdownItems = columns
|
||||||
.filter(({ key }) => key !== searchKey)
|
.filter(({ key }) => key !== searchKey)
|
||||||
.map(({ key, name }) => (
|
.map(({ key, name }) => (
|
||||||
<DropdownItem key={key} component="button">
|
<DropdownItem key={key} component="button">
|
||||||
{ name }
|
{name}
|
||||||
</DropdownItem>
|
</DropdownItem>
|
||||||
));
|
));
|
||||||
|
|
||||||
@@ -140,17 +132,26 @@ class DataListToolbar extends React.Component {
|
|||||||
.filter(({ key, isSortable }) => isSortable && key !== sortedColumnKey)
|
.filter(({ key, isSortable }) => isSortable && key !== sortedColumnKey)
|
||||||
.map(({ key, name }) => (
|
.map(({ key, name }) => (
|
||||||
<DropdownItem key={key} component="button">
|
<DropdownItem key={key} component="button">
|
||||||
{ name }
|
{name}
|
||||||
</DropdownItem>
|
</DropdownItem>
|
||||||
));
|
));
|
||||||
|
|
||||||
|
let SortIcon;
|
||||||
|
if (isNumeric) {
|
||||||
|
SortIcon = sortOrder === 'ascending' ? SortNumericUpIcon : SortNumericDownIcon;
|
||||||
|
} else {
|
||||||
|
SortIcon = sortOrder === 'ascending' ? SortAlphaUpIcon : SortAlphaDownIcon;
|
||||||
|
}
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<I18n>
|
<I18n>
|
||||||
{({ i18n }) => (
|
{({ i18n }) => (
|
||||||
<div className="awx-toolbar">
|
<div className="awx-toolbar">
|
||||||
<Level>
|
<Level>
|
||||||
<LevelItem>
|
<LevelItem>
|
||||||
<Toolbar style={{ marginLeft: '20px' }}>
|
<Toolbar
|
||||||
|
style={{ marginLeft: '20px' }}
|
||||||
|
>
|
||||||
<ToolbarGroup>
|
<ToolbarGroup>
|
||||||
<ToolbarItem>
|
<ToolbarItem>
|
||||||
<Checkbox
|
<Checkbox
|
||||||
@@ -174,7 +175,7 @@ class DataListToolbar extends React.Component {
|
|||||||
<DropdownToggle
|
<DropdownToggle
|
||||||
onToggle={this.onSearchDropdownToggle}
|
onToggle={this.onSearchDropdownToggle}
|
||||||
>
|
>
|
||||||
{ searchColumnName }
|
{searchColumnName}
|
||||||
</DropdownToggle>
|
</DropdownToggle>
|
||||||
)}
|
)}
|
||||||
dropdownItems={searchDropdownItems}
|
dropdownItems={searchDropdownItems}
|
||||||
@@ -195,7 +196,9 @@ class DataListToolbar extends React.Component {
|
|||||||
</div>
|
</div>
|
||||||
</ToolbarItem>
|
</ToolbarItem>
|
||||||
</ToolbarGroup>
|
</ToolbarGroup>
|
||||||
<ToolbarGroup className="sortDropdownGroup">
|
<ToolbarGroup
|
||||||
|
className="sortDropdownGroup"
|
||||||
|
>
|
||||||
<ToolbarItem>
|
<ToolbarItem>
|
||||||
<Dropdown
|
<Dropdown
|
||||||
onToggle={this.onSortDropdownToggle}
|
onToggle={this.onSortDropdownToggle}
|
||||||
@@ -206,7 +209,7 @@ class DataListToolbar extends React.Component {
|
|||||||
<DropdownToggle
|
<DropdownToggle
|
||||||
onToggle={this.onSortDropdownToggle}
|
onToggle={this.onSortDropdownToggle}
|
||||||
>
|
>
|
||||||
{ sortedColumnName }
|
{sortedColumnName}
|
||||||
</DropdownToggle>
|
</DropdownToggle>
|
||||||
)}
|
)}
|
||||||
dropdownItems={sortDropdownItems}
|
dropdownItems={sortDropdownItems}
|
||||||
@@ -214,23 +217,29 @@ class DataListToolbar extends React.Component {
|
|||||||
</ToolbarItem>
|
</ToolbarItem>
|
||||||
<ToolbarItem>
|
<ToolbarItem>
|
||||||
<Button
|
<Button
|
||||||
onClick={() => onSort(sortedColumnKey, sortOrder === 'ascending' ? 'descending' : 'ascending')}
|
onClick={this.onSort}
|
||||||
variant="plain"
|
variant="plain"
|
||||||
aria-label={i18n._(t`Sort`)}
|
aria-label={i18n._(t`Sort`)}
|
||||||
>
|
>
|
||||||
{displayedSortIcon()}
|
<SortIcon/>
|
||||||
</Button>
|
</Button>
|
||||||
</ToolbarItem>
|
</ToolbarItem>
|
||||||
</ToolbarGroup>
|
</ToolbarGroup>
|
||||||
{ showExpandCollapse && (
|
{showExpandCollapse && (
|
||||||
<ToolbarGroup>
|
<ToolbarGroup>
|
||||||
<ToolbarItem>
|
<ToolbarItem>
|
||||||
<Button variant="plain" aria-label={i18n._(t`Expand`)}>
|
<Button
|
||||||
|
variant="plain"
|
||||||
|
aria-label={i18n._(t`Expand`)}
|
||||||
|
>
|
||||||
<BarsIcon />
|
<BarsIcon />
|
||||||
</Button>
|
</Button>
|
||||||
</ToolbarItem>
|
</ToolbarItem>
|
||||||
<ToolbarItem>
|
<ToolbarItem>
|
||||||
<Button variant="plain" aria-label={i18n._(t`Collapse`)}>
|
<Button
|
||||||
|
variant="plain"
|
||||||
|
aria-label={i18n._(t`Collapse`)}
|
||||||
|
>
|
||||||
<EqualsIcon />
|
<EqualsIcon />
|
||||||
</Button>
|
</Button>
|
||||||
</ToolbarItem>
|
</ToolbarItem>
|
||||||
@@ -239,14 +248,23 @@ class DataListToolbar extends React.Component {
|
|||||||
</Toolbar>
|
</Toolbar>
|
||||||
</LevelItem>
|
</LevelItem>
|
||||||
<LevelItem>
|
<LevelItem>
|
||||||
<Tooltip message={i18n._(t`Delete`)} position="top">
|
<Tooltip
|
||||||
<Button variant="plain" aria-label={i18n._(t`Delete`)}>
|
message={i18n._(t`Delete`)}
|
||||||
|
position="top"
|
||||||
|
>
|
||||||
|
<Button
|
||||||
|
variant="plain"
|
||||||
|
aria-label={i18n._(t`Delete`)}
|
||||||
|
>
|
||||||
<TrashAltIcon />
|
<TrashAltIcon />
|
||||||
</Button>
|
</Button>
|
||||||
</Tooltip>
|
</Tooltip>
|
||||||
{addUrl && (
|
{addUrl && (
|
||||||
<Link to={addUrl}>
|
<Link to={addUrl}>
|
||||||
<Button variant="primary" aria-label={i18n._(t`Add`)}>
|
<Button
|
||||||
|
variant="primary"
|
||||||
|
aria-label={i18n._(t`Add`)}
|
||||||
|
>
|
||||||
<PlusIcon />
|
<PlusIcon />
|
||||||
</Button>
|
</Button>
|
||||||
</Link>
|
</Link>
|
||||||
|
|||||||
Reference in New Issue
Block a user