Lidarr/frontend/src/Components/Menu/FilterMenu.js

112 lines
2.8 KiB
JavaScript
Raw Normal View History

2017-09-04 02:20:56 +00:00
import PropTypes from 'prop-types';
2018-03-15 01:28:46 +00:00
import React, { Component } from 'react';
2017-09-04 02:20:56 +00:00
import { icons } from 'Helpers/Props';
2018-03-15 01:28:46 +00:00
import FilterMenuContent from './FilterMenuContent';
import Menu from './Menu';
import ToolbarMenuButton from './ToolbarMenuButton';
2017-09-04 02:20:56 +00:00
import styles from './FilterMenu.css';
2018-03-15 01:28:46 +00:00
class FilterMenu extends Component {
//
// Lifecycle
constructor(props, context) {
super(props, context);
this.state = {
isFilterModalOpen: false
};
}
//
// Listeners
onCustomFiltersPress = () => {
this.setState({ isFilterModalOpen: true });
2021-12-24 18:18:14 +00:00
};
2018-03-15 01:28:46 +00:00
onFiltersModalClose = () => {
this.setState({ isFilterModalOpen: false });
2021-12-24 18:18:14 +00:00
};
2018-03-15 01:28:46 +00:00
//
// Render
render(props) {
const {
className,
isDisabled,
selectedFilterKey,
filters,
customFilters,
buttonComponent: ButtonComponent,
filterModalConnectorComponent: FilterModalConnectorComponent,
filterModalConnectorComponentProps,
2018-03-15 01:28:46 +00:00
onFilterSelect,
...otherProps
} = this.props;
const showCustomFilters = !!FilterModalConnectorComponent;
return (
<div>
<Menu
className={className}
{...otherProps}
>
<ButtonComponent
iconName={icons.FILTER}
showIndicator={selectedFilterKey !== 'all'}
2018-03-15 01:28:46 +00:00
text="Filter"
isDisabled={isDisabled}
/>
<FilterMenuContent
selectedFilterKey={selectedFilterKey}
filters={filters}
customFilters={customFilters}
showCustomFilters={showCustomFilters}
onFilterSelect={onFilterSelect}
onCustomFiltersPress={this.onCustomFiltersPress}
/>
</Menu>
{
showCustomFilters &&
<FilterModalConnectorComponent
{...filterModalConnectorComponentProps}
2018-03-15 01:28:46 +00:00
isOpen={this.state.isFilterModalOpen}
selectedFilterKey={selectedFilterKey}
filters={filters}
customFilters={customFilters}
onFilterSelect={onFilterSelect}
onModalClose={this.onFiltersModalClose}
/>
}
</div>
);
}
2017-09-04 02:20:56 +00:00
}
FilterMenu.propTypes = {
className: PropTypes.string,
2018-03-15 01:28:46 +00:00
isDisabled: PropTypes.bool.isRequired,
selectedFilterKey: PropTypes.oneOfType([PropTypes.string, PropTypes.number]).isRequired,
2018-03-15 01:28:46 +00:00
filters: PropTypes.arrayOf(PropTypes.object).isRequired,
customFilters: PropTypes.arrayOf(PropTypes.object).isRequired,
2019-08-05 00:44:34 +00:00
buttonComponent: PropTypes.elementType.isRequired,
filterModalConnectorComponent: PropTypes.elementType,
filterModalConnectorComponentProps: PropTypes.object,
2018-03-15 01:28:46 +00:00
onFilterSelect: PropTypes.func.isRequired
2017-09-04 02:20:56 +00:00
};
FilterMenu.defaultProps = {
2017-11-26 20:09:45 +00:00
className: styles.filterMenu,
2018-03-15 01:28:46 +00:00
isDisabled: false,
buttonComponent: ToolbarMenuButton
2017-09-04 02:20:56 +00:00
};
export default FilterMenu;