diff --git a/ui/.storybook/head.html b/ui/.storybook/head.html new file mode 100644 index 00000000..fe250b6b --- /dev/null +++ b/ui/.storybook/head.html @@ -0,0 +1 @@ + diff --git a/ui/src/components/mini-metric/index.js b/ui/src/components/mini-metric/index.js index 4427cd2d..1ea1ce0d 100644 --- a/ui/src/components/mini-metric/index.js +++ b/ui/src/components/mini-metric/index.js @@ -1,4 +1,14 @@ const React = require('react'); +const Styled = require('styled-components'); +const constants = require('../../shared/constants'); + +const { + colors +} = constants; + +const { + default: styled +} = Styled; const buildArray = require('build-array'); const Chart = require('chart.js'); @@ -6,6 +16,62 @@ const whisker = require('chartjs-chart-box-plot'); whisker(Chart); +const StyledDiv = styled.div` + height: 127px; + width: 158px; + background-color: ${colors.miniBackground}; + border: solid 1px ${colors.borderSecondary}; + + &::before { + position: absolute; + z-index: 1; + width: 9px; + height: 127px; + background-image: + linear-gradient(to right, rgba(0, 0, 0, 0.1), rgba(216, 216, 216, 0)); + content: ''; + } +`; + +const Devider = styled.div` + width: 158px; + height: 1px; + background-color: ${colors.seperator} +`; + +const TextMetric = styled.div` + height: 38px; + padding: 8px 12px; +`; + +const InnerTextBox = styled.div` + width: 136px; + height: 36px; + font-family: 'Libre Franklin', sans-serif; + font-size: 12px; + font-weight: normal; + font-style: normal; + font-stretch: normal; + line-height: 18px; + text-align: right; + color: ${colors.regular}; + + & p { + margin: 0; + } + + & h3 { + margin: 0; + font-size: 14px; + font-weight: 600; + line-height: 1.29; + color: ${colors.semibold}; + } +`; + +const StyledCanvas = styled.canvas` +`; + class MiniMetric extends React.Component { componentDidMount() { const { @@ -22,13 +88,16 @@ class MiniMetric extends React.Component { this._chart = new Chart(this._refs.component, { type: 'whisker', responsive: true, + maintainAspectRatio: true, options: { scales: { xAxes: [{ + display: false, barPercentage: 1.0, categoryPercentage: 1.0 }], yAxes: [{ + display: false, ticks: { min: min, max: max @@ -36,7 +105,7 @@ class MiniMetric extends React.Component { }] }, legend: { - display: true + display: false } }, data: { @@ -63,12 +132,25 @@ class MiniMetric extends React.Component { }; } render() { + const { + name, + } = this.props; + return ( - + + + +

{name}: 54%

+

(1280/3000 MB)

+
+
+ + +
); } } @@ -78,6 +160,7 @@ MiniMetric.propTypes = { labels: React.PropTypes.number, max: React.PropTypes.number, min: React.PropTypes.number, + name: React.PropTypes.string, }; module.exports = MiniMetric; diff --git a/ui/src/shared/constants/colors.js b/ui/src/shared/constants/colors.js index 879644c3..8026a1d9 100644 --- a/ui/src/shared/constants/colors.js +++ b/ui/src/shared/constants/colors.js @@ -1,3 +1,8 @@ +const fonts = { + semibold: '#464646', + regular: '#646464' +}; + const brandPrimary = { brandPrimary: '#3B46CC', brandPrimaryDark: '#1838C0', @@ -32,11 +37,18 @@ const notifications = { warningLight: '#FFFAED', }; +const metrics = { + miniBackground: '#F3F4F9', + seperator: '#D9DEF3' +}; + const colors = { ...brandPrimary, ...brandSecondary, ...brandInactive, - ...notifications + ...notifications, + ...metrics, + ...fonts }; module.exports = colors; diff --git a/ui/stories/index.js b/ui/stories/index.js index 55cda12f..2e37db61 100644 --- a/ui/stories/index.js +++ b/ui/stories/index.js @@ -306,7 +306,139 @@ storiesOf('Widget', module) )); +const colors = { + perc: 'rgba(54, 74, 205, 0.2)', + alt: 'rgba(245, 93, 93, 0.2)' +}; storiesOf('Metrics', module) .add('mini', () => ( - + ));