diff --git a/packages/my-joy-beta/src/components/instances/firewall-rule.js b/packages/my-joy-beta/src/components/instances/firewall-rule.js new file mode 100644 index 00000000..1fd846ab --- /dev/null +++ b/packages/my-joy-beta/src/components/instances/firewall-rule.js @@ -0,0 +1,22 @@ +import React from 'react'; +import forceArray from 'force-array'; + +import { + Card, + CardMeta, + CardTitle, + CardLabel, + CardView +} from 'joyent-ui-toolkit'; + +export default ({ rule = '', global = false, enabled = false, first, last }) => ( + + + + {rule} + + + + + +); diff --git a/packages/my-joy-beta/src/components/instances/index.js b/packages/my-joy-beta/src/components/instances/index.js index 4bd5c1f4..d64b6a7f 100644 --- a/packages/my-joy-beta/src/components/instances/index.js +++ b/packages/my-joy-beta/src/components/instances/index.js @@ -1,3 +1,5 @@ export { default as Item } from './item'; export { default as List } from './list'; export { default as KeyValue } from './key-value'; +export { default as Network } from './network'; +export { default as FirewallRule } from './firewall-rule'; diff --git a/packages/my-joy-beta/src/components/instances/network.js b/packages/my-joy-beta/src/components/instances/network.js new file mode 100644 index 00000000..01f12e69 --- /dev/null +++ b/packages/my-joy-beta/src/components/instances/network.js @@ -0,0 +1,23 @@ +import React from 'react'; +import forceArray from 'force-array'; + +import { + Card, + CardMeta, + CardTitle, + CardLabel, + CardView +} from 'joyent-ui-toolkit'; + +export default ({ name, gateway, subnet, resolvers = [], first, last }) => ( + + + + {name} + {gateway} + {subnet} + {forceArray(resolvers).join('\u00B7')} + + + +); diff --git a/packages/my-joy-beta/src/containers/instances/firewall.js b/packages/my-joy-beta/src/containers/instances/firewall.js index 62f21ce8..f0a76f36 100644 --- a/packages/my-joy-beta/src/containers/instances/firewall.js +++ b/packages/my-joy-beta/src/containers/instances/firewall.js @@ -9,6 +9,8 @@ import get from 'lodash.get'; import { ViewContainer, Title, StatusLoader, Message } from 'joyent-ui-toolkit'; import GetFirewallRules from '@graphql/list-firewall-rules.gql'; +import { FirewallRule as InstanceFirewallRule } from '@components/instances'; + const Firewall = ({ firewallEnabled = false, @@ -16,13 +18,20 @@ const Firewall = ({ loading, error }) => { + const values = forceArray(firewallRules); const _title = Firewall; - const _loading = !(loading && !forceArray(firewallRules).length) ? null : ( + const _loading = !(loading && !values.length) ? null : ( ); - const _rules = !_loading && ; - const _enabled = !_loading && ; + const _firewall = !_loading && values.map((rule, i, all) => ( + + )); const _error = !(error && !_loading) ? null : ( ); }; diff --git a/packages/my-joy-beta/src/containers/instances/networks.js b/packages/my-joy-beta/src/containers/instances/networks.js index 21b7b281..c028d901 100644 --- a/packages/my-joy-beta/src/containers/instances/networks.js +++ b/packages/my-joy-beta/src/containers/instances/networks.js @@ -1,5 +1,4 @@ import React from 'react'; -import ReactJson from 'react-json-view'; import PropTypes from 'prop-types'; import forceArray from 'force-array'; import { compose, graphql } from 'react-apollo'; @@ -9,14 +8,24 @@ import get from 'lodash.get'; import { ViewContainer, Title, StatusLoader, Message } from 'joyent-ui-toolkit'; import GetNetworks from '@graphql/list-networks.gql'; +import { Network as InstanceNetwork } from '@components/instances'; + const Networks = ({ networks = [], loading, error }) => { + const values = forceArray(networks); const _title = Networks; - const _loading = !(loading && !forceArray(networks).length) ? null : ( + const _loading = !(loading && !values.length) ? null : ( ); - const _summary = !_loading && ; + const _networks = !_loading && values.map((network, i, all) => ( + + )); const _error = !(error && !_loading) ? null : ( { {_title} {_loading} {_error} - {_summary} + {_networks} ); }; diff --git a/packages/ui-toolkit/src/card/label.js b/packages/ui-toolkit/src/card/label.js index 61d26ead..b5ab23c3 100644 --- a/packages/ui-toolkit/src/card/label.js +++ b/packages/ui-toolkit/src/card/label.js @@ -2,6 +2,7 @@ import React from 'react'; import remcalc from 'remcalc'; import styled from 'styled-components'; import is, { isNot } from 'styled-is'; +import unitcalc from 'unitcalc'; const Dot = styled.span` width: ${remcalc(6)}; @@ -9,7 +10,7 @@ const Dot = styled.span` border-radius: ${remcalc(3)}; ${is('hasChildren')` - margin-right: ${remcalc(6)}; + margin-left: ${remcalc(6)}; `}; background-color: ${props => props.theme[props.color]}; @@ -18,6 +19,10 @@ const Dot = styled.span` flex: none; `; +const Icon = styled.span` + background-color: none; +`; + const Label = styled.label` line-height: 1; padding: 0 ${remcalc(18)}; @@ -28,24 +33,31 @@ const Label = styled.label` align-items: center; justify-content: center; - width: ${remcalc(100)}; + min-width: ${remcalc(100)}; + padding-left: 0; ${isNot('hasDot')` - width: ${remcalc(88)}; + min-width: ${remcalc(88)}; `}; ${isNot('hasChildren')` width: ${remcalc(6)}; + min-width: ${remcalc(6)}; `}; `; const Span = styled.span` align-self: auto; flex: 1 1 auto; + + ${is('hasDot')` + text-align: right; + `}; `; -export default ({ color, children, ...rest }) => { - const hasDot = Boolean(color); +export default ({ color, icon, children, width, ...rest }) => { + const hasIcon = Boolean(icon); + const hasDot = hasIcon || Boolean(color); const hasChildren = Array.isArray(children) ? children.length @@ -53,8 +65,9 @@ export default ({ color, children, ...rest }) => { return ( ); };