mirror of
				https://github.com/Unleash/unleash.git
				synced 2025-10-27 11:02:16 +01:00 
			
		
		
		
	fix: style metrics view (#448)
This commit is contained in:
		
							parent
							
								
									57928d50c6
								
							
						
					
					
						commit
						48bae48ee0
					
				| @ -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' |  | ||||||
|     } |  | ||||||
| })); |  | ||||||
| @ -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; |  | ||||||
| @ -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', | ||||||
|     }, |     }, | ||||||
| })); | })); | ||||||
|  | |||||||
| @ -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> | ||||||
|  |         </> | ||||||
|     ); |     ); | ||||||
| }; | }; | ||||||
| 
 | 
 | ||||||
|  | |||||||
		Loading…
	
		Reference in New Issue
	
	Block a user