import React from 'react'; import PropTypes from 'prop-types'; import { debounce } from 'debounce'; import { Link } from 'react-router-dom'; import { Icon, FABButton, Menu, MenuItem, Card, CardActions, List } from 'react-mdl'; import Feature from './feature-list-item-component'; import { MenuItemWithIcon, DropdownButton, styles as commonStyles } from '../common'; import SearchField from '../common/search-field'; import { CREATE_FEATURE } from '../../permissions'; export default class FeatureListComponent extends React.Component { static propTypes = { features: PropTypes.array.isRequired, featureMetrics: PropTypes.object.isRequired, fetchFeatureToggles: PropTypes.func, fetchArchive: PropTypes.func, revive: PropTypes.func, updateSetting: PropTypes.func.isRequired, toggleFeature: PropTypes.func, settings: PropTypes.object, history: PropTypes.object.isRequired, hasPermission: PropTypes.func.isRequired, }; constructor(props) { super(); this.state = { filter: props.settings.filter, updateFilter: debounce(props.updateSetting.bind(this, 'filter'), 150), }; } componentDidMount() { if (this.props.fetchFeatureToggles) { this.props.fetchFeatureToggles(); } else { this.props.fetchArchive(); } } toggleMetrics() { this.props.updateSetting('showLastHour', !this.props.settings.showLastHour); } setFilter = v => { const value = typeof v === 'string' ? v : ''; this.setState({ filter: value }); this.state.updateFilter(value); }; setSort(v) { this.props.updateSetting('sort', typeof v === 'string' ? v.trim() : ''); } render() { const { features, toggleFeature, featureMetrics, settings, revive, hasPermission } = this.props; features.forEach(e => { e.reviveName = e.name; }); return (
{hasPermission(CREATE_FEATURE) ? ( ) : ( '' )}
this.toggleMetrics()} style={{ width: '168px' }}> this.setSort(e.target.getAttribute('data-target'))} style={{ width: '168px' }} > Name Type Enabled Stale Created Strategies Metrics
{features.length > 0 ? ( features.map((feature, i) => ( )) ) : (

Empty list of feature toggles

)}
); } }