1
0
mirror of https://github.com/Unleash/unleash.git synced 2025-03-18 00:19:49 +01:00

fix: style metrics view (#448)

This commit is contained in:
Fredrik Strand Oseberg 2021-10-20 12:55:40 +02:00 committed by GitHub
parent 57928d50c6
commit 48bae48ee0
4 changed files with 67 additions and 167 deletions

View File

@ -1,100 +0,0 @@
import { makeStyles } from '@material-ui/core/styles';
export const useStyles = makeStyles(theme => ({
container: {
display: 'flex',
borderRadius: '10px',
backgroundColor: '#fff',
padding: '2rem 2rem 2rem 2rem',
marginBottom: '1rem',
flexDirection: 'column',
width: '50%',
position: 'relative'
},
environmentContainer: {
display: 'flex',
marginBottom: '1rem',
width: '100%',
position: 'relative'
},
environmentHeader: {
display: 'flex',
width: '100%',
fontSize: theme.fontSizes.subHeader,
fontWeight: 'bold'
},
applicationHeader: {
display: 'flex',
width: '100%',
fontSize: theme.fontSizes.subHeader,
fontWeight: 'bold'
},
applicationContainer: {
display: 'flex',
width: '100%',
position: 'relative',
marginBottom: '1rem'
},
[theme.breakpoints.down(1000)]: {
container: {
width: '100%'
}
},
headerContainer: {
display: 'flex',
width: '100%',
alignItems: 'center',
justifyContent: 'space-between'
},
title: {
fontSize: theme.fontSizes.subHeader,
fontWeight: 'normal',
margin: 0
},
bodyContainer: {
display: 'flex',
align: 'items',
marginTop: '1rem',
height: '100%'
},
trueCountContainer: {
marginBottom: '0.5rem',
display: 'flex',
alignItems: 'center'
},
trueCount: {
width: '10px',
height: '10px',
borderRadius: '50%',
marginRight: '0.75rem',
backgroundColor: theme.palette.primary.main
},
falseCount: {
width: '10px',
height: '10px',
borderRadius: '50%',
marginRight: '0.75rem',
backgroundColor: theme.palette.grey[300]
},
paragraph: {
fontSize: theme.fontSizes.smallBody
},
textContainer: {
marginRight: '1rem',
maxWidth: '150px'
},
primaryMetric: {
width: '100%'
},
icon: {
fill: theme.palette.grey[300],
height: '75px',
width: '75px'
},
chartContainer: {
width: '100%',
display: 'flex',
justifyContent: 'center',
alignItems: 'center'
}
}));

View File

@ -1,50 +0,0 @@
import useFeatureMetrics from '../../../../hooks/api/getters/useFeatureMetrics/useFeatureMetrics';
import { useParams } from 'react-router-dom';
import { IFeatureViewParams } from '../../../../interfaces/params';
import React from 'react';
import useFeature from '../../../../hooks/api/getters/useFeature/useFeature';
import FeatureEnvironmentMetrics from '../FeatureOverview/FeatureEnvironmentMetrics/FeatureEnvironmentMetrics';
import FeatureSeenApplications from '../FeatureSeenApplications/FeatureSeenApplications';
import { useStyles } from './EnvironmentMetricComponent.style';
const emptyMetric = (environment: string) => ({
yes: 0,
no: 0,
environment,
timestamp: ''
});
const EnvironmentMetricComponent: React.FC = () => {
const { projectId, featureId } = useParams<IFeatureViewParams>();
const { feature } = useFeature(projectId, featureId);
const { metrics } = useFeatureMetrics(projectId, featureId);
const styles = useStyles();
const featureMetrics = feature?.environments.map(env => {
const envMetric = metrics.lastHourUsage.find(
metric => metric.environment === env.name
);
return envMetric || emptyMetric(env.name);
});
const metricComponents = featureMetrics.map(metric => {
return (
<FeatureEnvironmentMetrics key={metric.environment} metric={metric} />
);
});
return (
<>
<div className={styles.environmentHeader}>Environments</div>
<div className={styles.environmentContainer}>
{metricComponents}
</div>
<div className={styles.applicationHeader}>Applications</div>
<div className={styles.applicationsContainer}>
<FeatureSeenApplications />
</div>
</>
)
;
};
export default EnvironmentMetricComponent;

View File

@ -1,9 +1,26 @@
import { makeStyles } from '@material-ui/core/styles'; import { makeStyles } from '@material-ui/core/styles';
export const useStyles = makeStyles(theme => ({ export const useStyles = makeStyles(theme => ({
container: { environmentContainer: {
borderRadius: '12.5px', display: 'flex',
backgroundColor: '#fff', marginBottom: '1rem',
padding: '2rem', flexWrap: 'wrap',
width: '100%',
position: 'relative',
justifyContent: 'center',
},
environmentMetrics: {
border: `1px solid ${theme.palette.grey[300]}`,
margin: '1rem',
width: '30%',
[theme.breakpoints.down(1000)]: {
width: '40%',
},
[theme.breakpoints.down(750)]: {
width: '100%',
},
},
secondaryContent: {
marginTop: '1rem',
}, },
})); }));

View File

@ -1,26 +1,59 @@
import { useParams } from 'react-router'; import { useParams } from 'react-router';
import useFeature from '../../../../hooks/api/getters/useFeature/useFeature'; import useFeature from '../../../../hooks/api/getters/useFeature/useFeature';
import MetricComponent from '../../view/metric-container';
import { useStyles } from './FeatureMetrics.styles'; import { useStyles } from './FeatureMetrics.styles';
import { IFeatureViewParams } from '../../../../interfaces/params'; import { IFeatureViewParams } from '../../../../interfaces/params';
import useUiConfig from '../../../../hooks/api/getters/useUiConfig/useUiConfig'; import useFeatureMetrics from '../../../../hooks/api/getters/useFeatureMetrics/useFeatureMetrics';
import ConditionallyRender from '../../../common/ConditionallyRender'; import FeatureEnvironmentMetrics from '../FeatureOverview/FeatureEnvironmentMetrics/FeatureEnvironmentMetrics';
import EnvironmentMetricComponent from '../EnvironmentMetricComponent/EnvironmentMetricComponent'; import FeatureSeenApplications from '../FeatureSeenApplications/FeatureSeenApplications';
import PageContent from '../../../common/PageContent';
const emptyMetric = (environment: string) => ({
yes: 0,
no: 0,
environment,
timestamp: '',
});
const FeatureMetrics = () => { const FeatureMetrics = () => {
const styles = useStyles();
const { projectId, featureId } = useParams<IFeatureViewParams>(); const { projectId, featureId } = useParams<IFeatureViewParams>();
const { feature } = useFeature(projectId, featureId); const { feature } = useFeature(projectId, featureId);
const { uiConfig } = useUiConfig(); const { metrics } = useFeatureMetrics(projectId, featureId);
const isEnterprise = uiConfig.flags.E; const styles = useStyles();
const featureMetrics = feature?.environments.map(env => {
const envMetric = metrics.lastHourUsage.find(
metric => metric.environment === env.name
);
return envMetric || emptyMetric(env.name);
});
const metricComponents = featureMetrics.map(metric => {
return (
<FeatureEnvironmentMetrics
key={metric.environment}
className={styles.environmentMetrics}
metric={metric}
/>
);
});
return ( return (
<div className={styles.container}> <>
<ConditionallyRender condition={isEnterprise} <PageContent headerContent="Environment metrics">
show={<EnvironmentMetricComponent />} <div className={styles.environmentContainer}>
elseShow={<MetricComponent featureToggle={feature} />} {metricComponents}
/>
</div> </div>
</PageContent>
<PageContent
headerContent="Applications"
className={styles.secondaryContent}
>
<div className={styles.applicationsContainer}>
<FeatureSeenApplications />
</div>
</PageContent>
</>
); );
}; };