import React, { PropTypes } from 'react'; import { Grid, Cell, Icon, Switch } from 'react-mdl'; import { Link } from 'react-router'; import percentLib from 'percent'; import Progress from './progress'; import { connect } from 'react-redux'; import EditFeatureToggle from './form-edit-container.jsx'; import { fetchFeatureToggles, toggleFeature } from '../../store/feature-actions'; import { fetchFeatureMetrics, fetchSeenApps } from '../../store/feature-metrics-actions'; class EditFeatureToggleWrapper extends React.Component { static propTypes () { return { featureToggleName: PropTypes.string.isRequired, features: PropTypes.array.isRequired, fetchFeatureToggles: PropTypes.array.isRequired, }; } componentWillMount () { if (this.props.features.length === 0) { this.props.fetchFeatureToggles(); } this.props.fetchSeenApps(); this.props.fetchFeatureMetrics(); setInterval(() => { this.props.fetchSeenApps(); this.props.fetchFeatureMetrics(); }, 5000); } render () { const { toggleFeature, features, featureToggleName, metrics = {}, } = this.props; const { lastHour = { yes: 0, no: 0, isFallback: true }, lastMinute = { yes: 0, no: 0, isFallback: true }, seenApps = [], } = metrics; const lastHourPercent = 1 * percentLib.calc(lastHour.yes, lastHour.yes + lastHour.no, 0); const lastMinutePercent = 1 * percentLib.calc(lastMinute.yes, lastMinute.yes + lastMinute.no, 0); const featureToggle = features.find(toggle => toggle.name === featureToggleName); if (!featureToggle) { if (features.length === 0 ) { return Loading; } return Could not find {this.props.featureToggleName}; } return (

{featureToggle.name} {featureToggle.enabled ? 'is enabled' : 'is disabled'}


toggleFeature(featureToggle)} checked={featureToggle.enabled}> Toggle {featureToggle.name}

{ lastMinute.isFallback ? :
}

Last minute: Yes {lastMinute.yes}, No: {lastMinute.no}

{ lastHour.isFallback ? :
}

Last hour: Yes {lastHour.yes}, No: {lastHour.no}

{seenApps.length > 0 ? (
Seen in applications:
) :
Not used in a app in the last hour. This might be due to your client implementation is not reporting usage.
} {seenApps.length > 0 && seenApps.map((appName) => ( {appName} ))}

add instances count?

add history


Edit

); } } function getMetricsForToggle (state, toggleName) { if (!toggleName) { return; } const result = {}; if (state.featureMetrics.hasIn(['seenApps', toggleName])) { result.seenApps = state.featureMetrics.getIn(['seenApps', toggleName]); } if (state.featureMetrics.hasIn(['lastHour', toggleName])) { result.lastHour = state.featureMetrics.getIn(['lastHour', toggleName]); result.lastMinute = state.featureMetrics.getIn(['lastMinute', toggleName]); } return result; } export default connect((state, props) => ({ features: state.features.toJS(), metrics: getMetricsForToggle(state, props.featureToggleName), }), { fetchFeatureMetrics, fetchFeatureToggles, toggleFeature, fetchSeenApps, })(EditFeatureToggleWrapper);