1
0
mirror of https://github.com/Unleash/unleash.git synced 2024-10-18 20:09:08 +02:00
unleash.unleash/frontend/src/component/feature/list-container.jsx

80 lines
2.4 KiB
React
Raw Normal View History

2016-11-10 14:26:24 +01:00
import { connect } from 'react-redux';
import { toggleFeature, fetchFeatureToggles } from '../../store/feature-actions';
2016-11-10 14:26:24 +01:00
import { fetchFeatureMetrics } from '../../store/feature-metrics-actions';
2016-12-04 11:56:41 +01:00
import { updateSettingForGroup } from '../../store/settings/actions';
2016-11-10 14:26:24 +01:00
import FeatureListComponent from './list-component';
2016-12-04 11:56:41 +01:00
const mapStateToProps = (state) => {
const featureMetrics = state.featureMetrics.toJS();
const settings = state.settings.toJS().feature || {};
let features = state.features.toJS();
if (settings.filter) {
const regex = new RegExp(settings.filter, 'i');
2016-12-04 11:56:41 +01:00
features = features.filter(feature =>
(
2017-06-29 08:36:10 +02:00
regex.test(feature.name) ||
regex.test(feature.description) ||
feature.strategies.some(s => s && s.name && regex.test(s.name))
2016-12-04 11:56:41 +01:00
)
);
}
2017-02-14 11:05:34 +01:00
if (!settings.sort) {
settings.sort = 'name';
}
if (settings.sort === 'enabled') {
features = features.sort((a, b) => (
// eslint-disable-next-line
a.enabled === b.enabled ? 0 : a.enabled ? -1 : 1
));
} else if (settings.sort === 'created') {
features = features.sort((a, b) => (
new Date(a.createdAt) > new Date(b.createdAt) ? -1 : 1
));
} else if (settings.sort === 'name') {
features = features.sort((a, b) => {
if (a.name < b.name) { return -1; }
if (a.name > b.name) { return 1; }
return 0;
});
} else if (settings.sort === 'strategies') {
features = features.sort((a, b) => (
a.strategies.length > b.strategies.length ? -1 : 1
));
} else if (settings.sort === 'metrics') {
const target = settings.showLastHour ? featureMetrics.lastHour : featureMetrics.lastMinute;
2016-12-05 12:57:21 +01:00
2017-02-14 11:05:34 +01:00
features = features.sort((a, b) => {
if (!target[a.name]) { return 1; }
if (!target[b.name]) { return -1; }
if (target[a.name].yes > target[b.name].yes) {
return -1;
}
return 1;
});
2016-12-04 11:56:41 +01:00
}
return {
features,
featureMetrics,
settings,
};
};
2016-11-10 14:26:24 +01:00
const mapDispatchToProps = {
toggleFeature,
2016-11-10 14:26:24 +01:00
fetchFeatureToggles,
fetchFeatureMetrics,
2016-12-04 11:56:41 +01:00
updateSetting: updateSettingForGroup('feature'),
2016-11-10 14:26:24 +01:00
};
const FeatureListContainer = connect(
2017-06-29 08:36:10 +02:00
mapStateToProps,
mapDispatchToProps
2016-11-10 14:26:24 +01:00
)(FeatureListComponent);
export default FeatureListContainer;