import React from 'react'; import { compose, graphql } from 'react-apollo'; import { connect } from 'react-redux'; import { set } from 'react-redux-values'; import forceArray from 'force-array'; import { Margin } from 'styled-components-spacing'; import find from 'lodash.find'; import reverse from 'lodash.reverse'; import sortBy from 'lodash.sortby'; import get from 'lodash.get'; import { ViewContainer, StatusLoader, Message, MessageTitle, MessageDescription, H3 } from 'joyent-ui-toolkit'; import { Network, Empty } from 'joyent-ui-resource-widgets'; import Description from '@components/instances/description'; import GetNetworks from '@graphql/list-instance-networks.gql'; export const Networks = ({ networks = [], loading = false, error = null, setMachinesExpanded, setInfoExpanded }) => ( Use predefined or customized fabric networks which can be public-facing or private. All fabrics are isolated from other customers giving you complete control over the network environment. Read more on fabrics.

Networks attached to this instance

{loading ? : null} {!loading && error && !networks.length ? ( Ooops! An error occurred while loading your networks ) : null} {!loading && networks.map(({ id, infoExpanded, machinesExpanded, ...network }) => ( setInfoExpanded(id, !infoExpanded)} onMachinesClick={() => setMachinesExpanded(id, !machinesExpanded)} selected readOnly /> ))} {!loading && !error && !networks.length ? ( You have no networks attached to this instance ) : null}
); export default compose( graphql(GetNetworks, { options: ({ match }) => ({ variables: { id: get(match, 'params.instance') } }), props: ({ data }) => { const { loading, error, variables } = data; const { id } = variables; const machines = get(data, 'machine', []); const instance = find(forceArray(machines), ['id', id]); const values = get(instance, 'networks', []); const networks = reverse(sortBy(values, 'public')); return { networks, instance, loading, error }; } }), connect( ({ values }, { networks }) => ({ networks: networks.map(({ id, ...network }) => ({ ...network, infoExpanded: get(values, `networks-${id}-info-expanded`, false), machinesExpanded: get( values, `networks-${id}-machines-expanded`, false ), id })) }), dispatch => ({ setMachinesExpanded: (id, expanded) => { return dispatch( set({ name: `networks-${id}-machines-expanded`, value: expanded }) ); }, setInfoExpanded: (id, expanded) => { return dispatch( set({ name: `networks-${id}-info-expanded`, value: expanded }) ); } }) ) )(Networks);