feat(templates): bootstrap
This commit is contained in:
parent
6736caaf45
commit
fc84358dff
|
@ -1,4 +1,9 @@
|
||||||
packages/*/**
|
|
||||||
prototypes/*/**
|
|
||||||
artifacts
|
artifacts
|
||||||
reports
|
reports
|
||||||
|
.nyc_output
|
||||||
|
coverage
|
||||||
|
dist
|
||||||
|
styleguide
|
||||||
|
build
|
||||||
|
lib/app
|
||||||
|
node_modules
|
|
@ -1,8 +1,10 @@
|
||||||
{
|
{
|
||||||
"extends": "joyent-portal",
|
"extends": "joyent-portal",
|
||||||
"rules": {
|
"rules": {
|
||||||
"jsx-a11y/href-no-hash": 0,
|
"no-console": 1,
|
||||||
"new-cap": 0,
|
"new-cap": 0,
|
||||||
"no-console": 0
|
"jsx-a11y/href-no-hash": 0,
|
||||||
|
"no-negated-condition": 1,
|
||||||
|
"camelcase": 1
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -9,24 +9,21 @@
|
||||||
"build:lib": "echo 0",
|
"build:lib": "echo 0",
|
||||||
"build:bundle": "echo 0",
|
"build:bundle": "echo 0",
|
||||||
"prepublish": "echo 0",
|
"prepublish": "echo 0",
|
||||||
"lint": "echo 0",
|
|
||||||
"lint:ci": "echo 0",
|
|
||||||
"test": "echo 0",
|
"test": "echo 0",
|
||||||
"test:ci": "echo 0"
|
"test:ci": "echo 0"
|
||||||
},
|
},
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"apr-main": "^4.0.3",
|
"apr-main": "^4.0.3",
|
||||||
"brule": "^3.1.0",
|
"cloudapi-gql": "^8.0.0",
|
||||||
"cloudapi-gql": "^7.1.4",
|
|
||||||
"execa": "^0.10.0",
|
"execa": "^0.10.0",
|
||||||
"h2o2": "^8.0.1",
|
"graphi": "^5.7.0",
|
||||||
"hapi": "^17.3.1",
|
"h2o2": "^8.1.2",
|
||||||
"hapi-triton-auth": "^2.0.1",
|
"hapi": "^17.4.0",
|
||||||
"hapi-webconsole-nav": "^1.2.0",
|
"hapi-triton-auth": "^3.0.0",
|
||||||
"inert": "^5.1.0",
|
"hapi-webconsole-nav": "^2.1.0",
|
||||||
"my-joy-images": "*",
|
"my-joy-images": "*",
|
||||||
"my-joy-instances": "*",
|
"my-joy-instances": "*",
|
||||||
"my-joy-navigation": "*",
|
"my-joy-navigation": "*",
|
||||||
"rollover": "^1.0.0"
|
"tsg-graphql": "^1.0.0"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,5 +1,8 @@
|
||||||
|
require('../.env.js');
|
||||||
|
|
||||||
const Main = require('apr-main');
|
const Main = require('apr-main');
|
||||||
const CloudApiGql = require('cloudapi-gql');
|
const CloudApiGql = require('cloudapi-gql');
|
||||||
|
const Graphi = require('graphi');
|
||||||
const Url = require('url');
|
const Url = require('url');
|
||||||
|
|
||||||
const Server = require('./server');
|
const Server = require('./server');
|
||||||
|
@ -28,6 +31,17 @@ Main(async () => {
|
||||||
});
|
});
|
||||||
|
|
||||||
await server.register([
|
await server.register([
|
||||||
|
{
|
||||||
|
plugin: Graphi,
|
||||||
|
options: {
|
||||||
|
graphqlPath: '/graphql',
|
||||||
|
graphiqlPath: '/graphiql',
|
||||||
|
authStrategy: 'sso'
|
||||||
|
},
|
||||||
|
routes: {
|
||||||
|
prefix: `/${PREFIX}`
|
||||||
|
}
|
||||||
|
},
|
||||||
{
|
{
|
||||||
plugin: CloudApiGql,
|
plugin: CloudApiGql,
|
||||||
options: {
|
options: {
|
||||||
|
|
|
@ -1,5 +1,8 @@
|
||||||
|
require('../.env.js');
|
||||||
|
|
||||||
const Main = require('apr-main');
|
const Main = require('apr-main');
|
||||||
const CloudApiGql = require('cloudapi-gql');
|
const CloudApiGql = require('cloudapi-gql');
|
||||||
|
const Graphi = require('graphi');
|
||||||
const Url = require('url');
|
const Url = require('url');
|
||||||
|
|
||||||
const Server = require('./server');
|
const Server = require('./server');
|
||||||
|
@ -28,6 +31,17 @@ Main(async () => {
|
||||||
});
|
});
|
||||||
|
|
||||||
await server.register([
|
await server.register([
|
||||||
|
{
|
||||||
|
plugin: Graphi,
|
||||||
|
options: {
|
||||||
|
graphqlPath: '/graphql',
|
||||||
|
graphiqlPath: '/graphiql',
|
||||||
|
authStrategy: 'sso'
|
||||||
|
},
|
||||||
|
routes: {
|
||||||
|
prefix: `/${PREFIX}`
|
||||||
|
}
|
||||||
|
},
|
||||||
{
|
{
|
||||||
plugin: CloudApiGql,
|
plugin: CloudApiGql,
|
||||||
options: {
|
options: {
|
||||||
|
|
|
@ -1,5 +1,8 @@
|
||||||
|
require('../.env.js');
|
||||||
|
|
||||||
const Main = require('apr-main');
|
const Main = require('apr-main');
|
||||||
const Nav = require('hapi-webconsole-nav');
|
const Nav = require('hapi-webconsole-nav');
|
||||||
|
const Graphi = require('graphi');
|
||||||
const Url = require('url');
|
const Url = require('url');
|
||||||
|
|
||||||
const Server = require('./server');
|
const Server = require('./server');
|
||||||
|
@ -33,6 +36,17 @@ Main(async () => {
|
||||||
});
|
});
|
||||||
|
|
||||||
await server.register([
|
await server.register([
|
||||||
|
{
|
||||||
|
plugin: Graphi,
|
||||||
|
options: {
|
||||||
|
graphqlPath: '/graphql',
|
||||||
|
graphiqlPath: '/graphiql',
|
||||||
|
authStrategy: 'sso'
|
||||||
|
},
|
||||||
|
routes: {
|
||||||
|
prefix: `/${PREFIX}`
|
||||||
|
}
|
||||||
|
},
|
||||||
{
|
{
|
||||||
plugin: Nav,
|
plugin: Nav,
|
||||||
options: {
|
options: {
|
||||||
|
|
|
@ -1,6 +1,7 @@
|
||||||
|
require('../.env.js');
|
||||||
|
|
||||||
const Hapi = require('hapi');
|
const Hapi = require('hapi');
|
||||||
const Sso = require('hapi-triton-auth');
|
const Sso = require('hapi-triton-auth');
|
||||||
const Url = require('url');
|
|
||||||
|
|
||||||
const {
|
const {
|
||||||
COOKIE_PASSWORD,
|
COOKIE_PASSWORD,
|
||||||
|
@ -8,12 +9,10 @@ const {
|
||||||
SDC_KEY_PATH,
|
SDC_KEY_PATH,
|
||||||
SDC_ACCOUNT,
|
SDC_ACCOUNT,
|
||||||
SDC_KEY_ID,
|
SDC_KEY_ID,
|
||||||
SDC_URL,
|
SDC_URL
|
||||||
DC_NAME
|
|
||||||
} = process.env;
|
} = process.env;
|
||||||
|
|
||||||
module.exports = async ({ PORT, BASE_URL }) => {
|
module.exports = async ({ PORT, BASE_URL }) => {
|
||||||
const dcName = DC_NAME || Url.parse(SDC_URL).host.split('.')[0];
|
|
||||||
const keyPath = SDC_KEY_PATH;
|
const keyPath = SDC_KEY_PATH;
|
||||||
const keyId = `/${SDC_ACCOUNT}/keys/${SDC_KEY_ID}`;
|
const keyId = `/${SDC_ACCOUNT}/keys/${SDC_KEY_ID}`;
|
||||||
const apiBaseUrl = SDC_URL;
|
const apiBaseUrl = SDC_URL;
|
||||||
|
@ -50,6 +49,7 @@ module.exports = async ({ PORT, BASE_URL }) => {
|
||||||
|
|
||||||
server.events.on('log', (event, tags) => {
|
server.events.on('log', (event, tags) => {
|
||||||
if (tags.error) {
|
if (tags.error) {
|
||||||
|
// eslint-disable-next-line no-console
|
||||||
console.log(event);
|
console.log(event);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
@ -58,6 +58,7 @@ module.exports = async ({ PORT, BASE_URL }) => {
|
||||||
const { tags } = event;
|
const { tags } = event;
|
||||||
if (tags.includes('error') && event.data && event.data.errors) {
|
if (tags.includes('error') && event.data && event.data.errors) {
|
||||||
event.data.errors.forEach(error => {
|
event.data.errors.forEach(error => {
|
||||||
|
// eslint-disable-next-line no-console
|
||||||
console.log(error);
|
console.log(error);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
|
@ -0,0 +1,74 @@
|
||||||
|
require('../.env.js');
|
||||||
|
|
||||||
|
const Main = require('apr-main');
|
||||||
|
const CloudApiGql = require('cloudapi-gql');
|
||||||
|
const Tsg = require('tsg-graphql');
|
||||||
|
const Graphi = require('graphi');
|
||||||
|
const Url = require('url');
|
||||||
|
|
||||||
|
const Server = require('./server');
|
||||||
|
|
||||||
|
const {
|
||||||
|
PORT = 4004,
|
||||||
|
BASE_URL = `http://0.0.0.0:${PORT}`,
|
||||||
|
PREFIX = 'service-groups',
|
||||||
|
DC_NAME,
|
||||||
|
TSG_URL = 'http://0.0.0.0:3000',
|
||||||
|
SDC_URL,
|
||||||
|
SDC_KEY_PATH,
|
||||||
|
SDC_ACCOUNT,
|
||||||
|
SDC_KEY_ID
|
||||||
|
} = process.env;
|
||||||
|
|
||||||
|
const dcName = DC_NAME || Url.parse(SDC_URL).host.split('.')[0];
|
||||||
|
const keyPath = SDC_KEY_PATH;
|
||||||
|
const keyId = `/${SDC_ACCOUNT}/keys/${SDC_KEY_ID}`;
|
||||||
|
|
||||||
|
Main(async () => {
|
||||||
|
const server = await Server({
|
||||||
|
PORT,
|
||||||
|
BASE_URL
|
||||||
|
});
|
||||||
|
|
||||||
|
await server.register([
|
||||||
|
{
|
||||||
|
plugin: Graphi,
|
||||||
|
options: {
|
||||||
|
graphqlPath: '/graphql',
|
||||||
|
graphiqlPath: '/graphiql',
|
||||||
|
authStrategy: 'sso'
|
||||||
|
},
|
||||||
|
routes: {
|
||||||
|
prefix: `/${PREFIX}`
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
plugin: Tsg,
|
||||||
|
options: {
|
||||||
|
authStrategy: 'sso',
|
||||||
|
keyPath,
|
||||||
|
keyId,
|
||||||
|
apiBaseUrl: TSG_URL,
|
||||||
|
dcName
|
||||||
|
},
|
||||||
|
routes: {
|
||||||
|
prefix: `/${PREFIX}`
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
plugin: CloudApiGql,
|
||||||
|
options: {
|
||||||
|
authStrategy: 'sso',
|
||||||
|
keyPath,
|
||||||
|
keyId,
|
||||||
|
apiBaseUrl: SDC_URL,
|
||||||
|
dcName
|
||||||
|
},
|
||||||
|
routes: {
|
||||||
|
prefix: `/${PREFIX}`
|
||||||
|
}
|
||||||
|
}
|
||||||
|
]);
|
||||||
|
|
||||||
|
await server.start();
|
||||||
|
});
|
|
@ -0,0 +1,74 @@
|
||||||
|
require('../.env.js');
|
||||||
|
|
||||||
|
const Main = require('apr-main');
|
||||||
|
const CloudApiGql = require('cloudapi-gql');
|
||||||
|
const Tsg = require('tsg-graphql');
|
||||||
|
const Graphi = require('graphi');
|
||||||
|
const Url = require('url');
|
||||||
|
|
||||||
|
const Server = require('./server');
|
||||||
|
|
||||||
|
const {
|
||||||
|
PORT = 4005,
|
||||||
|
BASE_URL = `http://0.0.0.0:${PORT}`,
|
||||||
|
PREFIX = 'templates',
|
||||||
|
DC_NAME,
|
||||||
|
TSG_URL = 'http://0.0.0.0:3000',
|
||||||
|
SDC_URL,
|
||||||
|
SDC_KEY_PATH,
|
||||||
|
SDC_ACCOUNT,
|
||||||
|
SDC_KEY_ID
|
||||||
|
} = process.env;
|
||||||
|
|
||||||
|
const dcName = DC_NAME || Url.parse(SDC_URL).host.split('.')[0];
|
||||||
|
const keyPath = SDC_KEY_PATH;
|
||||||
|
const keyId = `/${SDC_ACCOUNT}/keys/${SDC_KEY_ID}`;
|
||||||
|
|
||||||
|
Main(async () => {
|
||||||
|
const server = await Server({
|
||||||
|
PORT,
|
||||||
|
BASE_URL
|
||||||
|
});
|
||||||
|
|
||||||
|
await server.register([
|
||||||
|
{
|
||||||
|
plugin: Graphi,
|
||||||
|
options: {
|
||||||
|
graphqlPath: '/graphql',
|
||||||
|
graphiqlPath: '/graphiql',
|
||||||
|
authStrategy: 'sso'
|
||||||
|
},
|
||||||
|
routes: {
|
||||||
|
prefix: `/${PREFIX}`
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
plugin: Tsg,
|
||||||
|
options: {
|
||||||
|
authStrategy: 'sso',
|
||||||
|
keyPath,
|
||||||
|
keyId,
|
||||||
|
apiBaseUrl: TSG_URL,
|
||||||
|
dcName
|
||||||
|
},
|
||||||
|
routes: {
|
||||||
|
prefix: `/${PREFIX}`
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
plugin: CloudApiGql,
|
||||||
|
options: {
|
||||||
|
authStrategy: 'sso',
|
||||||
|
keyPath,
|
||||||
|
keyId,
|
||||||
|
apiBaseUrl: SDC_URL,
|
||||||
|
dcName
|
||||||
|
},
|
||||||
|
routes: {
|
||||||
|
prefix: `/${PREFIX}`
|
||||||
|
}
|
||||||
|
}
|
||||||
|
]);
|
||||||
|
|
||||||
|
await server.start();
|
||||||
|
});
|
|
@ -4,7 +4,16 @@ module.exports = {
|
||||||
'scope-enum': [
|
'scope-enum': [
|
||||||
2,
|
2,
|
||||||
'always',
|
'always',
|
||||||
['ui-toolkit', 'icons', 'instances', 'navigation', 'bundle', 'images']
|
[
|
||||||
|
'ui-toolkit',
|
||||||
|
'icons',
|
||||||
|
'instances',
|
||||||
|
'navigation',
|
||||||
|
'bundle',
|
||||||
|
'images',
|
||||||
|
'sg',
|
||||||
|
'templates'
|
||||||
|
]
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
|
@ -1,10 +0,0 @@
|
||||||
{
|
|
||||||
"extends": "joyent-portal",
|
|
||||||
"rules": {
|
|
||||||
"no-console": 0,
|
|
||||||
"new-cap": 0,
|
|
||||||
"camelcase": 1,
|
|
||||||
"jsx-a11y/href-no-hash": 0,
|
|
||||||
"no-negated-condition": 0
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -16,6 +16,7 @@ exports.register = async server => {
|
||||||
if (NODE_ENV === 'production') {
|
if (NODE_ENV === 'production') {
|
||||||
throw err;
|
throw err;
|
||||||
} else {
|
} else {
|
||||||
|
// eslint-disable-next-line no-console
|
||||||
console.error(err);
|
console.error(err);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -11,8 +11,6 @@
|
||||||
"build:lib": "echo 0",
|
"build:lib": "echo 0",
|
||||||
"build:bundle": "NAMESPACE=images NODE_ENV=production redrun -p build:frontend build:ssr",
|
"build:bundle": "NAMESPACE=images NODE_ENV=production redrun -p build:frontend build:ssr",
|
||||||
"prepublish": "NODE_ENV=production redrun build:bundle",
|
"prepublish": "NODE_ENV=production redrun build:bundle",
|
||||||
"lint": "redrun lint:ci -- --fix",
|
|
||||||
"lint:ci": "NODE_ENV=test eslint . --ext .js --ext .md",
|
|
||||||
"test": "echo 0",
|
"test": "echo 0",
|
||||||
"test:ci": "echo 0",
|
"test:ci": "echo 0",
|
||||||
"build:frontend": "joyent-react-scripts build",
|
"build:frontend": "joyent-react-scripts build",
|
||||||
|
@ -38,6 +36,7 @@
|
||||||
"inert": "^5.1.0",
|
"inert": "^5.1.0",
|
||||||
"joyent-logo-assets": "^1.1.0",
|
"joyent-logo-assets": "^1.1.0",
|
||||||
"joyent-react-styled-flexboxgrid": "^2.2.3",
|
"joyent-react-styled-flexboxgrid": "^2.2.3",
|
||||||
|
"joyent-ui-resource-widgets": "^1.0.0",
|
||||||
"joyent-ui-toolkit": "^6.0.0",
|
"joyent-ui-toolkit": "^6.0.0",
|
||||||
"lodash.assign": "^4.2.0",
|
"lodash.assign": "^4.2.0",
|
||||||
"lodash.find": "^4.6.0",
|
"lodash.find": "^4.6.0",
|
||||||
|
|
|
@ -6,7 +6,6 @@ import remcalc from 'remcalc';
|
||||||
import { Row, Col } from 'joyent-react-styled-flexboxgrid';
|
import { Row, Col } from 'joyent-react-styled-flexboxgrid';
|
||||||
|
|
||||||
import {
|
import {
|
||||||
Divider,
|
|
||||||
FormGroup,
|
FormGroup,
|
||||||
FormLabel,
|
FormLabel,
|
||||||
Input,
|
Input,
|
||||||
|
@ -22,15 +21,14 @@ export default ({ placeholderName, randomizing, onRandomize }) => (
|
||||||
<FlexItem flex>
|
<FlexItem flex>
|
||||||
<FormGroup name="name" fluid field={Field}>
|
<FormGroup name="name" fluid field={Field}>
|
||||||
<FormLabel>Image name</FormLabel>
|
<FormLabel>Image name</FormLabel>
|
||||||
<Margin top={0.5}>
|
<Margin top="0.5">
|
||||||
<Input placeholder={placeholderName} onBlur={null} required />
|
<Input placeholder={placeholderName} onBlur={null} required />
|
||||||
</Margin>
|
</Margin>
|
||||||
<FormMeta />
|
<FormMeta />
|
||||||
</FormGroup>
|
</FormGroup>
|
||||||
</FlexItem>
|
</FlexItem>
|
||||||
<FlexItem>
|
<FlexItem>
|
||||||
<Divider height={remcalc(13)} transparent />
|
<Margin left="1">
|
||||||
<Margin left={1}>
|
|
||||||
<Button
|
<Button
|
||||||
type="button"
|
type="button"
|
||||||
marginTop={remcalc(8)}
|
marginTop={remcalc(8)}
|
||||||
|
@ -46,10 +44,10 @@ export default ({ placeholderName, randomizing, onRandomize }) => (
|
||||||
</Margin>
|
</Margin>
|
||||||
</FlexItem>
|
</FlexItem>
|
||||||
</Flex>
|
</Flex>
|
||||||
<Margin top={3}>
|
<Margin top="3">
|
||||||
<FormGroup name="version" fluid field={Field}>
|
<FormGroup name="version" fluid field={Field}>
|
||||||
<FormLabel>Version</FormLabel>
|
<FormLabel>Version</FormLabel>
|
||||||
<Margin top={0.5}>
|
<Margin top="0.5">
|
||||||
<Input placeholder="Example: v1.0" onBlur={null} required />
|
<Input placeholder="Example: v1.0" onBlur={null} required />
|
||||||
</Margin>
|
</Margin>
|
||||||
<FormMeta />
|
<FormMeta />
|
||||||
|
@ -57,10 +55,10 @@ export default ({ placeholderName, randomizing, onRandomize }) => (
|
||||||
</Margin>
|
</Margin>
|
||||||
<Row>
|
<Row>
|
||||||
<Col xs={12} sm={8}>
|
<Col xs={12} sm={8}>
|
||||||
<Margin top={3}>
|
<Margin top="3">
|
||||||
<FormGroup name="description" fluid field={Field}>
|
<FormGroup name="description" fluid field={Field}>
|
||||||
<FormLabel>Description</FormLabel>
|
<FormLabel>Description</FormLabel>
|
||||||
<Margin top={0.5}>
|
<Margin top="0.5">
|
||||||
<Textarea
|
<Textarea
|
||||||
placeholder="Example: JarJarBinks, Anakin Skywalker, Obi Wan Kenobi, Qui-Gon Jinn, Han Solo, Wookies"
|
placeholder="Example: JarJarBinks, Anakin Skywalker, Obi Wan Kenobi, Qui-Gon Jinn, Han Solo, Wookies"
|
||||||
fluid
|
fluid
|
||||||
|
|
|
@ -16,14 +16,14 @@ const Container = styled.div`
|
||||||
export default ({ icon, children, collapsed = true, ...rest }) => (
|
export default ({ icon, children, collapsed = true, ...rest }) => (
|
||||||
<Container {...rest}>
|
<Container {...rest}>
|
||||||
<Flex>
|
<Flex>
|
||||||
<Margin right={1}>
|
<Margin right="1">
|
||||||
<Flex alignCenter full>
|
<Flex alignCenter full>
|
||||||
{icon}
|
{icon}
|
||||||
</Flex>
|
</Flex>
|
||||||
</Margin>
|
</Margin>
|
||||||
<Small noMargin>{children}</Small>
|
<Small noMargin>{children}</Small>
|
||||||
</Flex>
|
</Flex>
|
||||||
<Margin top={1} bottom={collapsed ? 7 : 3}>
|
<Margin top="1" bottom={collapsed ? 7 : 3}>
|
||||||
<Divider height={remcalc(1)} />
|
<Divider height={remcalc(1)} />
|
||||||
</Margin>
|
</Margin>
|
||||||
</Container>
|
</Container>
|
||||||
|
|
|
@ -6,7 +6,7 @@ import { P } from 'joyent-ui-toolkit';
|
||||||
export default ({ children }) => (
|
export default ({ children }) => (
|
||||||
<Row>
|
<Row>
|
||||||
<Col xs={12} sm={8}>
|
<Col xs={12} sm={8}>
|
||||||
<Margin bottom={3}>
|
<Margin bottom="3">
|
||||||
<P>{children}</P>
|
<P>{children}</P>
|
||||||
</Margin>
|
</Margin>
|
||||||
</Col>
|
</Col>
|
||||||
|
|
|
@ -19,7 +19,7 @@ export default ({ children }) => (
|
||||||
<FullWidthCard>
|
<FullWidthCard>
|
||||||
<Padding all={6}>
|
<Padding all={6}>
|
||||||
<Flex alignCenter justifyCenter column>
|
<Flex alignCenter justifyCenter column>
|
||||||
<Margin bottom={2}>
|
<Margin bottom="2">
|
||||||
<EmptyState />
|
<EmptyState />
|
||||||
</Margin>
|
</Margin>
|
||||||
<NoPackagesTitle>{children}</NoPackagesTitle>
|
<NoPackagesTitle>{children}</NoPackagesTitle>
|
||||||
|
|
|
@ -84,7 +84,7 @@ export const Image = ({
|
||||||
onRemove,
|
onRemove,
|
||||||
onCreateInstance
|
onCreateInstance
|
||||||
}) => (
|
}) => (
|
||||||
<Margin bottom={3}>
|
<Margin bottom="3">
|
||||||
<CardAnchor to={`/images/${id}`} component={Link}>
|
<CardAnchor to={`/images/${id}`} component={Link}>
|
||||||
<Card radius>
|
<Card radius>
|
||||||
{removing ? (
|
{removing ? (
|
||||||
|
@ -94,10 +94,10 @@ export const Image = ({
|
||||||
) : (
|
) : (
|
||||||
<Fragment>
|
<Fragment>
|
||||||
<CardHeader white radius>
|
<CardHeader white radius>
|
||||||
<Padding left={2} right={2}>
|
<Padding left="2" right="2">
|
||||||
<Flex full alignCenter>
|
<Flex full alignCenter>
|
||||||
<FlexItem>
|
<FlexItem>
|
||||||
<Margin right={2}>
|
<Margin right="2">
|
||||||
{React.createElement(OS[os], {
|
{React.createElement(OS[os], {
|
||||||
width: '24',
|
width: '24',
|
||||||
height: '24'
|
height: '24'
|
||||||
|
@ -113,7 +113,7 @@ export const Image = ({
|
||||||
</Padding>
|
</Padding>
|
||||||
</CardHeader>
|
</CardHeader>
|
||||||
<Flex justifyBetween>
|
<Flex justifyBetween>
|
||||||
<Content left={2} top={2} bottom={2}>
|
<Content left="2" top="2" bottom="2">
|
||||||
<Max justifyBetween>
|
<Max justifyBetween>
|
||||||
<Max alignCenter>
|
<Max alignCenter>
|
||||||
<Flex>{version}</Flex>
|
<Flex>{version}</Flex>
|
||||||
|
@ -130,7 +130,7 @@ export const Image = ({
|
||||||
</ActionsWrapper>
|
</ActionsWrapper>
|
||||||
</PopoverTarget>
|
</PopoverTarget>
|
||||||
<Popover noPadding placement="bottom">
|
<Popover noPadding placement="bottom">
|
||||||
<Padding horizontal={3} vertical={2}>
|
<Padding horizontal="3" vertical="2">
|
||||||
<PopoverItem disabled={false} onClick={onCreateInstance}>
|
<PopoverItem disabled={false} onClick={onCreateInstance}>
|
||||||
<ItemAnchor
|
<ItemAnchor
|
||||||
href={`${
|
href={`${
|
||||||
|
@ -144,7 +144,7 @@ export const Image = ({
|
||||||
</PopoverItem>
|
</PopoverItem>
|
||||||
</Padding>
|
</Padding>
|
||||||
<PopoverDivider />
|
<PopoverDivider />
|
||||||
<Padding horizontal={3} vertical={2}>
|
<Padding horizontal="3" vertical="2">
|
||||||
<PopoverItem disabled={removing} onClick={onRemove}>
|
<PopoverItem disabled={removing} onClick={onRemove}>
|
||||||
Remove
|
Remove
|
||||||
</PopoverItem>
|
</PopoverItem>
|
||||||
|
@ -165,7 +165,7 @@ export const Filters = ({ selected }) => (
|
||||||
<FormGroup name="image-type" value="all" field={Field} type="radio">
|
<FormGroup name="image-type" value="all" field={Field} type="radio">
|
||||||
<Radio>
|
<Radio>
|
||||||
<Flex alignCenter>
|
<Flex alignCenter>
|
||||||
<Margin horizontal={2}>
|
<Margin horizontal="2">
|
||||||
<FormLabel big normal={selected !== 'all'}>
|
<FormLabel big normal={selected !== 'all'}>
|
||||||
All
|
All
|
||||||
</FormLabel>
|
</FormLabel>
|
||||||
|
@ -181,7 +181,7 @@ export const Filters = ({ selected }) => (
|
||||||
>
|
>
|
||||||
<Radio noMargin>
|
<Radio noMargin>
|
||||||
<Flex alignCenter>
|
<Flex alignCenter>
|
||||||
<Margin horizontal={2}>
|
<Margin horizontal="2">
|
||||||
<FormLabel big normal={selected !== 'hardware-virtual-machine'}>
|
<FormLabel big normal={selected !== 'hardware-virtual-machine'}>
|
||||||
Virtual machines
|
Virtual machines
|
||||||
</FormLabel>
|
</FormLabel>
|
||||||
|
@ -197,7 +197,7 @@ export const Filters = ({ selected }) => (
|
||||||
>
|
>
|
||||||
<Radio noMargin>
|
<Radio noMargin>
|
||||||
<Flex alignCenter>
|
<Flex alignCenter>
|
||||||
<Margin horizontal={2}>
|
<Margin horizontal="2">
|
||||||
<FormLabel big normal={selected !== 'infrastructure-container'}>
|
<FormLabel big normal={selected !== 'infrastructure-container'}>
|
||||||
Infrastructure container
|
Infrastructure container
|
||||||
</FormLabel>
|
</FormLabel>
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
import React, { Fragment } from 'react';
|
import React, { Fragment } from 'react';
|
||||||
import { Row, Col } from 'joyent-react-styled-flexboxgrid';
|
import { Row, Col } from 'joyent-react-styled-flexboxgrid';
|
||||||
import { Margin, Padding } from 'styled-components-spacing';
|
import { Margin, Padding } from 'styled-components-spacing';
|
||||||
import styled, { withTheme } from 'styled-components';
|
import styled from 'styled-components';
|
||||||
import Flex, { FlexItem } from 'styled-flex-component';
|
import Flex, { FlexItem } from 'styled-flex-component';
|
||||||
import distanceInWordsToNow from 'date-fns/distance_in_words_to_now';
|
import distanceInWordsToNow from 'date-fns/distance_in_words_to_now';
|
||||||
import titleCase from 'title-case';
|
import titleCase from 'title-case';
|
||||||
|
@ -76,7 +76,7 @@ export const Meta = ({ name, version, type, published_at, state, os }) => (
|
||||||
<H2 bold>{name}</H2>
|
<H2 bold>{name}</H2>
|
||||||
</FlexItem>
|
</FlexItem>
|
||||||
</Flex>
|
</Flex>
|
||||||
<Margin top={2} bottom={3}>
|
<Margin top="2" bottom="3">
|
||||||
<Flex>
|
<Flex>
|
||||||
<Label>{version}</Label>
|
<Label>{version}</Label>
|
||||||
<VerticalDivider />
|
<VerticalDivider />
|
||||||
|
@ -104,7 +104,7 @@ export const Meta = ({ name, version, type, published_at, state, os }) => (
|
||||||
</Fragment>
|
</Fragment>
|
||||||
);
|
);
|
||||||
|
|
||||||
export default withTheme(({ theme = {}, onRemove, removing, ...image }) => (
|
export default ({ theme = {}, onRemove, removing, ...image }) => (
|
||||||
<Row>
|
<Row>
|
||||||
<Col xs={12} sm={12} md={9}>
|
<Col xs={12} sm={12} md={9}>
|
||||||
<Card>
|
<Card>
|
||||||
|
@ -136,7 +136,7 @@ export default withTheme(({ theme = {}, onRemove, removing, ...image }) => (
|
||||||
<Col xs={3}>
|
<Col xs={3}>
|
||||||
<SmallOnly>
|
<SmallOnly>
|
||||||
<Button type="button" small icon error right>
|
<Button type="button" small icon error right>
|
||||||
<DeleteIcon fill={theme.red} />
|
<DeleteIcon fill="red" />
|
||||||
</Button>
|
</Button>
|
||||||
</SmallOnly>
|
</SmallOnly>
|
||||||
<Medium>
|
<Medium>
|
||||||
|
@ -150,7 +150,7 @@ export default withTheme(({ theme = {}, onRemove, removing, ...image }) => (
|
||||||
right
|
right
|
||||||
>
|
>
|
||||||
<Margin right="1">
|
<Margin right="1">
|
||||||
<DeleteIcon fill={theme.red} />
|
<DeleteIcon fill="red" />
|
||||||
</Margin>
|
</Margin>
|
||||||
<span>Delete</span>
|
<span>Delete</span>
|
||||||
</Button>
|
</Button>
|
||||||
|
@ -163,15 +163,15 @@ export default withTheme(({ theme = {}, onRemove, removing, ...image }) => (
|
||||||
<Margin bottom="2">
|
<Margin bottom="2">
|
||||||
<P>{image.description}</P>
|
<P>{image.description}</P>
|
||||||
</Margin>
|
</Margin>
|
||||||
<Margin bottom={3}>
|
<Margin bottom="3">
|
||||||
<CopiableField text={(image.id || '').split('-')[0]} label="ID" />
|
<CopiableField text={(image.id || '').split('-')[0]} label="ID" />
|
||||||
</Margin>
|
</Margin>
|
||||||
<Margin bottom={3}>
|
<Margin bottom="3">
|
||||||
<CopiableField text={image.id} label="UUID" />
|
<CopiableField text={image.id} label="UUID" />
|
||||||
</Margin>
|
</Margin>
|
||||||
<Row>
|
<Row>
|
||||||
<Col xs={12} md={7}>
|
<Col xs={12} md={7}>
|
||||||
<Margin bottom={3}>
|
<Margin bottom="3">
|
||||||
<FormLabel>Operating system</FormLabel>
|
<FormLabel>Operating system</FormLabel>
|
||||||
<Input
|
<Input
|
||||||
monospace
|
monospace
|
||||||
|
@ -187,4 +187,4 @@ export default withTheme(({ theme = {}, onRemove, removing, ...image }) => (
|
||||||
</Card>
|
</Card>
|
||||||
</Col>
|
</Col>
|
||||||
</Row>
|
</Row>
|
||||||
));
|
);
|
||||||
|
|
|
@ -1,7 +1,8 @@
|
||||||
import React from 'react';
|
import React from 'react';
|
||||||
import { Margin } from 'styled-components-spacing';
|
import { Margin } from 'styled-components-spacing';
|
||||||
|
|
||||||
import { TagItem, KeyValue } from 'joyent-ui-toolkit';
|
import { TagItem } from 'joyent-ui-toolkit';
|
||||||
|
import { KeyValue } from 'joyent-ui-resource-widgets';
|
||||||
|
|
||||||
export const AddForm = props => (
|
export const AddForm = props => (
|
||||||
<KeyValue {...props} method="add" input="input" type="tag" expanded />
|
<KeyValue {...props} method="add" input="input" type="tag" expanded />
|
||||||
|
|
|
@ -17,7 +17,7 @@ export const Toolbar = ({
|
||||||
<Flex justifyBetween alignEnd>
|
<Flex justifyBetween alignEnd>
|
||||||
<FormGroup name="filter" field={Field}>
|
<FormGroup name="filter" field={Field}>
|
||||||
<FormLabel>{searchLabel}</FormLabel>
|
<FormLabel>{searchLabel}</FormLabel>
|
||||||
<Margin top={0.5}>
|
<Margin top="0.5">
|
||||||
<Input placeholder={searchPlaceholder} disabled={!searchable} />
|
<Input placeholder={searchPlaceholder} disabled={!searchable} />
|
||||||
</Margin>
|
</Margin>
|
||||||
</FormGroup>
|
</FormGroup>
|
||||||
|
|
|
@ -44,7 +44,7 @@ export default ({ match }) => {
|
||||||
.filter(Boolean)
|
.filter(Boolean)
|
||||||
.map(({ name, pathname }) => (
|
.map(({ name, pathname }) => (
|
||||||
<BreadcrumbItem key={name} to={pathname} component={Link}>
|
<BreadcrumbItem key={name} to={pathname} component={Link}>
|
||||||
<Margin horizontal={1} vertical={3}>
|
<Margin horizontal="1" vertical="3">
|
||||||
{name}
|
{name}
|
||||||
</Margin>
|
</Margin>
|
||||||
</BreadcrumbItem>
|
</BreadcrumbItem>
|
||||||
|
|
|
@ -67,12 +67,12 @@ const NameContainer = ({
|
||||||
onRandomize={handleRandomize}
|
onRandomize={handleRandomize}
|
||||||
/>
|
/>
|
||||||
) : name ? (
|
) : name ? (
|
||||||
<Margin top={3}>
|
<Margin top="3">
|
||||||
<H3 bold noMargin>
|
<H3 bold noMargin>
|
||||||
{name}
|
{name}
|
||||||
</H3>
|
</H3>
|
||||||
{version ? (
|
{version ? (
|
||||||
<Margin top={2}>
|
<Margin top="2">
|
||||||
<H4 bold noMargin>
|
<H4 bold noMargin>
|
||||||
{version}
|
{version}
|
||||||
</H4>
|
</H4>
|
||||||
|
@ -81,7 +81,7 @@ const NameContainer = ({
|
||||||
{description ? (
|
{description ? (
|
||||||
<Row>
|
<Row>
|
||||||
<Col xs={12} sm={8}>
|
<Col xs={12} sm={8}>
|
||||||
<Margin top={1}>
|
<Margin top="1">
|
||||||
<P>{description}</P>
|
<P>{description}</P>
|
||||||
</Margin>
|
</Margin>
|
||||||
</Col>
|
</Col>
|
||||||
|
@ -92,13 +92,13 @@ const NameContainer = ({
|
||||||
}
|
}
|
||||||
</ReduxForm>
|
</ReduxForm>
|
||||||
{expanded ? (
|
{expanded ? (
|
||||||
<Margin top={4} bottom={7}>
|
<Margin top="4" bottom="7">
|
||||||
<Button type="button" disabled={!name} onClick={handleNext}>
|
<Button type="button" disabled={!name} onClick={handleNext}>
|
||||||
Next
|
Next
|
||||||
</Button>
|
</Button>
|
||||||
</Margin>
|
</Margin>
|
||||||
) : proceeded ? (
|
) : proceeded ? (
|
||||||
<Margin top={4} bottom={7}>
|
<Margin top="4" bottom="7">
|
||||||
<Button type="button" onClick={handleEdit} secondary>
|
<Button type="button" onClick={handleEdit} secondary>
|
||||||
Edit
|
Edit
|
||||||
</Button>
|
</Button>
|
||||||
|
@ -166,6 +166,7 @@ export default compose(
|
||||||
dispatch(set({ name: 'create-image-name-randomizing', value: false }));
|
dispatch(set({ name: 'create-image-name-randomizing', value: false }));
|
||||||
|
|
||||||
if (err) {
|
if (err) {
|
||||||
|
// eslint-disable-next-line no-console
|
||||||
console.error(err);
|
console.error(err);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
|
@ -6,17 +6,10 @@ import { destroy, reset } from 'redux-form';
|
||||||
import ReduxForm from 'declarative-redux-form';
|
import ReduxForm from 'declarative-redux-form';
|
||||||
import { connect } from 'react-redux';
|
import { connect } from 'react-redux';
|
||||||
import get from 'lodash.get';
|
import get from 'lodash.get';
|
||||||
import remcalc from 'remcalc';
|
|
||||||
import Flex from 'styled-flex-component';
|
import Flex from 'styled-flex-component';
|
||||||
|
|
||||||
import {
|
import { TagsIcon, Button, H3, TagList } from 'joyent-ui-toolkit';
|
||||||
TagsIcon,
|
import { KeyValue } from 'joyent-ui-resource-widgets';
|
||||||
Button,
|
|
||||||
H3,
|
|
||||||
TagList,
|
|
||||||
Divider,
|
|
||||||
KeyValue
|
|
||||||
} from 'joyent-ui-toolkit';
|
|
||||||
|
|
||||||
import Title from '@components/create-image/title';
|
import Title from '@components/create-image/title';
|
||||||
import Description from '@components/description';
|
import Description from '@components/description';
|
||||||
|
@ -66,7 +59,7 @@ export const Tags = ({
|
||||||
) : null}
|
) : null}
|
||||||
{proceeded || expanded ? (
|
{proceeded || expanded ? (
|
||||||
<Fragment>
|
<Fragment>
|
||||||
<Margin bottom={5}>
|
<Margin bottom="5">
|
||||||
<H3>
|
<H3>
|
||||||
{tags.length} Tag{tags.length === 1 ? '' : 's'}
|
{tags.length} Tag{tags.length === 1 ? '' : 's'}
|
||||||
</H3>
|
</H3>
|
||||||
|
@ -102,12 +95,11 @@ export const Tags = ({
|
||||||
expanded
|
expanded
|
||||||
onCancel={() => handleChangeAddOpen(false)}
|
onCancel={() => handleChangeAddOpen(false)}
|
||||||
/>
|
/>
|
||||||
<Divider height={remcalc(18)} transparent />
|
|
||||||
</Fragment>
|
</Fragment>
|
||||||
) : null
|
) : null
|
||||||
}
|
}
|
||||||
</ReduxForm>
|
</ReduxForm>
|
||||||
<Margin top={1}>
|
<Margin top="1">
|
||||||
<Flex alignCenter>
|
<Flex alignCenter>
|
||||||
{expanded ? (
|
{expanded ? (
|
||||||
<Button
|
<Button
|
||||||
|
@ -118,11 +110,11 @@ export const Tags = ({
|
||||||
Add Tag
|
Add Tag
|
||||||
</Button>
|
</Button>
|
||||||
) : null}
|
) : null}
|
||||||
<Margin left={1}>{children}</Margin>
|
<Margin left="1">{children}</Margin>
|
||||||
</Flex>
|
</Flex>
|
||||||
</Margin>
|
</Margin>
|
||||||
{proceeded ? (
|
{proceeded ? (
|
||||||
<Margin top={1}>
|
<Margin top="1">
|
||||||
<Button type="button" onClick={handleEdit} secondary>
|
<Button type="button" onClick={handleEdit} secondary>
|
||||||
Edit
|
Edit
|
||||||
</Button>
|
</Button>
|
||||||
|
|
|
@ -1,5 +1,3 @@
|
||||||
/* eslint-disable camelcase */
|
|
||||||
|
|
||||||
import React from 'react';
|
import React from 'react';
|
||||||
import { Margin } from 'styled-components-spacing';
|
import { Margin } from 'styled-components-spacing';
|
||||||
import ReduxForm from 'declarative-redux-form';
|
import ReduxForm from 'declarative-redux-form';
|
||||||
|
@ -41,12 +39,12 @@ const Create = ({
|
||||||
}) => (
|
}) => (
|
||||||
<ViewContainer>
|
<ViewContainer>
|
||||||
{loading ? (
|
{loading ? (
|
||||||
<Margin top={4}>
|
<Margin top="4">
|
||||||
<StatusLoader />
|
<StatusLoader />
|
||||||
</Margin>
|
</Margin>
|
||||||
) : null}
|
) : null}
|
||||||
{loadingError ? (
|
{loadingError ? (
|
||||||
<Margin top={4}>
|
<Margin top="4">
|
||||||
<Message error>
|
<Message error>
|
||||||
<MessageTitle>Ooops!</MessageTitle>
|
<MessageTitle>Ooops!</MessageTitle>
|
||||||
<MessageDescription>{loadingError}</MessageDescription>
|
<MessageDescription>{loadingError}</MessageDescription>
|
||||||
|
@ -54,7 +52,7 @@ const Create = ({
|
||||||
</Margin>
|
</Margin>
|
||||||
) : null}
|
) : null}
|
||||||
{!loading && !loadingError ? (
|
{!loading && !loadingError ? (
|
||||||
<Margin top={4} bottom={5}>
|
<Margin top="4" bottom="5">
|
||||||
<H2>Create Image</H2>
|
<H2>Create Image</H2>
|
||||||
</Margin>
|
</Margin>
|
||||||
) : null}
|
) : null}
|
||||||
|
|
|
@ -2,7 +2,6 @@ import React, { Fragment } from 'react';
|
||||||
import { compose, graphql } from 'react-apollo';
|
import { compose, graphql } from 'react-apollo';
|
||||||
import ReduxForm from 'declarative-redux-form';
|
import ReduxForm from 'declarative-redux-form';
|
||||||
import { Margin } from 'styled-components-spacing';
|
import { Margin } from 'styled-components-spacing';
|
||||||
import remcalc from 'remcalc';
|
|
||||||
import { Row, Col } from 'joyent-react-styled-flexboxgrid';
|
import { Row, Col } from 'joyent-react-styled-flexboxgrid';
|
||||||
import { connect } from 'react-redux';
|
import { connect } from 'react-redux';
|
||||||
import get from 'lodash.get';
|
import get from 'lodash.get';
|
||||||
|
@ -41,22 +40,21 @@ export const List = ({
|
||||||
handleRemove
|
handleRemove
|
||||||
}) => (
|
}) => (
|
||||||
<ViewContainer main>
|
<ViewContainer main>
|
||||||
<Margin top={4}>
|
<Margin top="4">
|
||||||
<ReduxForm form={LIST_TOOLBAR_FORM}>
|
<ReduxForm form={LIST_TOOLBAR_FORM}>
|
||||||
{props => <ToolbarForm {...props} actionable={!loading} />}
|
{props => <ToolbarForm {...props} actionable={!loading} />}
|
||||||
</ReduxForm>
|
</ReduxForm>
|
||||||
</Margin>
|
</Margin>
|
||||||
<Margin vertical={4}>
|
<Margin vertical="4">
|
||||||
<Divider />
|
<Divider />
|
||||||
</Margin>
|
</Margin>
|
||||||
{loading && !images.length ? (
|
{loading && !images.length ? (
|
||||||
<Fragment>
|
<Fragment>
|
||||||
<Divider height={remcalc(30)} transparent />
|
|
||||||
<StatusLoader />
|
<StatusLoader />
|
||||||
</Fragment>
|
</Fragment>
|
||||||
) : null}
|
) : null}
|
||||||
{error && !images.length && !loading ? (
|
{error && !images.length && !loading ? (
|
||||||
<Margin bottom={5}>
|
<Margin bottom="5">
|
||||||
<Message error>
|
<Message error>
|
||||||
<MessageTitle>Ooops!</MessageTitle>
|
<MessageTitle>Ooops!</MessageTitle>
|
||||||
<MessageDescription>
|
<MessageDescription>
|
||||||
|
@ -66,7 +64,7 @@ export const List = ({
|
||||||
</Margin>
|
</Margin>
|
||||||
) : null}
|
) : null}
|
||||||
<Fragment>
|
<Fragment>
|
||||||
<Margin bottom={4}>
|
<Margin bottom="4">
|
||||||
<ReduxForm
|
<ReduxForm
|
||||||
form={LIST_TOGGLE_TYPE_FORM}
|
form={LIST_TOGGLE_TYPE_FORM}
|
||||||
initialValues={{ 'image-type': 'all' }}
|
initialValues={{ 'image-type': 'all' }}
|
||||||
|
|
|
@ -10,7 +10,7 @@ const SECTIONS = [
|
||||||
|
|
||||||
export default ({ match }) => {
|
export default ({ match }) => {
|
||||||
const imageId = get(match, 'params.image');
|
const imageId = get(match, 'params.image');
|
||||||
const sections = imageId !== '~create' ? SECTIONS : [];
|
const sections = imageId === '~create' ? [] : SECTIONS;
|
||||||
|
|
||||||
const links = sections.map(({ name, pathname }) => ({
|
const links = sections.map(({ name, pathname }) => ({
|
||||||
name,
|
name,
|
||||||
|
|
|
@ -30,7 +30,7 @@ export const Summary = ({
|
||||||
<ViewContainer main>
|
<ViewContainer main>
|
||||||
{loading && !image ? <StatusLoader /> : null}
|
{loading && !image ? <StatusLoader /> : null}
|
||||||
{error && !loading && !image ? (
|
{error && !loading && !image ? (
|
||||||
<Margin bottom={5}>
|
<Margin bottom="5">
|
||||||
<Message error>
|
<Message error>
|
||||||
<MessageTitle>Ooops!</MessageTitle>
|
<MessageTitle>Ooops!</MessageTitle>
|
||||||
<MessageDescription>
|
<MessageDescription>
|
||||||
|
@ -40,7 +40,7 @@ export const Summary = ({
|
||||||
</Margin>
|
</Margin>
|
||||||
) : null}
|
) : null}
|
||||||
{mutationError ? (
|
{mutationError ? (
|
||||||
<Margin bottom={5}>
|
<Margin bottom="5">
|
||||||
<Message error>
|
<Message error>
|
||||||
<MessageTitle>Ooops!</MessageTitle>
|
<MessageTitle>Ooops!</MessageTitle>
|
||||||
<MessageDescription>
|
<MessageDescription>
|
||||||
|
|
|
@ -14,11 +14,11 @@ import {
|
||||||
H3,
|
H3,
|
||||||
ViewContainer,
|
ViewContainer,
|
||||||
StatusLoader,
|
StatusLoader,
|
||||||
Divider,
|
|
||||||
Message,
|
Message,
|
||||||
MessageTitle,
|
MessageTitle,
|
||||||
MessageDescription,
|
MessageDescription,
|
||||||
TagList
|
TagList,
|
||||||
|
Divider
|
||||||
} from 'joyent-ui-toolkit';
|
} from 'joyent-ui-toolkit';
|
||||||
|
|
||||||
import { Forms } from '@root/constants';
|
import { Forms } from '@root/constants';
|
||||||
|
@ -63,7 +63,7 @@ export const Tags = ({
|
||||||
)}
|
)}
|
||||||
</ReduxForm>
|
</ReduxForm>
|
||||||
{error && !loading && !tags.length ? (
|
{error && !loading && !tags.length ? (
|
||||||
<Margin bottom={5}>
|
<Margin bottom="5">
|
||||||
<Message error>
|
<Message error>
|
||||||
<MessageTitle>Ooops!</MessageTitle>
|
<MessageTitle>Ooops!</MessageTitle>
|
||||||
<MessageDescription>
|
<MessageDescription>
|
||||||
|
@ -73,7 +73,7 @@ export const Tags = ({
|
||||||
</Margin>
|
</Margin>
|
||||||
) : null}
|
) : null}
|
||||||
{mutationError ? (
|
{mutationError ? (
|
||||||
<Margin bottom={5}>
|
<Margin bottom="5">
|
||||||
<Message error>
|
<Message error>
|
||||||
<MessageTitle>Ooops!</MessageTitle>
|
<MessageTitle>Ooops!</MessageTitle>
|
||||||
<MessageDescription>{mutationError}</MessageDescription>
|
<MessageDescription>{mutationError}</MessageDescription>
|
||||||
|
@ -88,7 +88,7 @@ export const Tags = ({
|
||||||
>
|
>
|
||||||
{props =>
|
{props =>
|
||||||
addOpen ? (
|
addOpen ? (
|
||||||
<Margin bottom={5}>
|
<Margin bottom="5">
|
||||||
<AddForm
|
<AddForm
|
||||||
{...props}
|
{...props}
|
||||||
onToggleExpanded={() => handleToggleAddOpen(!addOpen)}
|
onToggleExpanded={() => handleToggleAddOpen(!addOpen)}
|
||||||
|
@ -98,13 +98,13 @@ export const Tags = ({
|
||||||
) : null
|
) : null
|
||||||
}
|
}
|
||||||
</ReduxForm>
|
</ReduxForm>
|
||||||
{!loading ? (
|
{loading ? null : (
|
||||||
<Margin bottom={5}>
|
<Margin bottom="5">
|
||||||
<H3>
|
<H3>
|
||||||
{tags.length} tag{tags.length === 1 ? '' : 's'}
|
{tags.length} tag{tags.length === 1 ? '' : 's'}
|
||||||
</H3>
|
</H3>
|
||||||
</Margin>
|
</Margin>
|
||||||
) : null}
|
)}
|
||||||
{loading && !tags.length ? <StatusLoader /> : null}
|
{loading && !tags.length ? <StatusLoader /> : null}
|
||||||
<TagList>
|
<TagList>
|
||||||
{tags.map(({ id, name, value }) => (
|
{tags.map(({ id, name, value }) => (
|
||||||
|
|
|
@ -20,7 +20,7 @@ module.exports = ({
|
||||||
</head>
|
</head>
|
||||||
<body {...bodyAttrs}>
|
<body {...bodyAttrs}>
|
||||||
<div id="header" />
|
<div id="header" />
|
||||||
{!children ? <div id="root" /> : null}
|
{children ? null : <div id="root" />}
|
||||||
{children}
|
{children}
|
||||||
<script src="/navigation/static/main.js" />
|
<script src="/navigation/static/main.js" />
|
||||||
</body>
|
</body>
|
||||||
|
|
|
@ -17,7 +17,7 @@ import Breadcrumb from '@containers/breadcrumb';
|
||||||
export const Route = () => (
|
export const Route = () => (
|
||||||
<ViewContainer main>
|
<ViewContainer main>
|
||||||
<Divider height={remcalc(30)} transparent />
|
<Divider height={remcalc(30)} transparent />
|
||||||
<Margin bottom={5}>
|
<Margin bottom="5">
|
||||||
<Message error>
|
<Message error>
|
||||||
<MessageTitle>Ooops!</MessageTitle>
|
<MessageTitle>Ooops!</MessageTitle>
|
||||||
<MessageDescription>
|
<MessageDescription>
|
||||||
|
|
|
@ -16,7 +16,7 @@ const validateSchema = async (schema, value) => {
|
||||||
keys(schema),
|
keys(schema),
|
||||||
async (errors, name) => {
|
async (errors, name) => {
|
||||||
const msg = await validateField(schema[name], value[name]);
|
const msg = await validateField(schema[name], value[name]);
|
||||||
return !msg ? errors : assign(errors, { [name]: msg });
|
return msg ? assign(errors, { [name]: msg }) : errors;
|
||||||
},
|
},
|
||||||
{}
|
{}
|
||||||
);
|
);
|
||||||
|
@ -66,4 +66,4 @@ const Schemas = {
|
||||||
export const addTag = tag => validateSchema(Schemas.tag, tag);
|
export const addTag = tag => validateSchema(Schemas.tag, tag);
|
||||||
|
|
||||||
export const instanceName = ({ name }) =>
|
export const instanceName = ({ name }) =>
|
||||||
!name ? null : validateSchema(Schemas.instanceName, { name });
|
name ? validateSchema(Schemas.instanceName, { name }) : null;
|
||||||
|
|
|
@ -1,5 +0,0 @@
|
||||||
.nyc_output
|
|
||||||
coverage
|
|
||||||
dist
|
|
||||||
build
|
|
||||||
lib/app
|
|
|
@ -1,10 +0,0 @@
|
||||||
{
|
|
||||||
"extends": "joyent-portal",
|
|
||||||
"rules": {
|
|
||||||
"no-console": 0,
|
|
||||||
"new-cap": 0,
|
|
||||||
"camelcase": 1,
|
|
||||||
"jsx-a11y/href-no-hash": 0,
|
|
||||||
"no-negated-condition": 0
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -16,6 +16,7 @@ exports.register = async server => {
|
||||||
if (NODE_ENV === 'production') {
|
if (NODE_ENV === 'production') {
|
||||||
throw err;
|
throw err;
|
||||||
} else {
|
} else {
|
||||||
|
// eslint-disable-next-line no-console
|
||||||
console.error(err);
|
console.error(err);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -11,8 +11,6 @@
|
||||||
"build:lib": "echo 0",
|
"build:lib": "echo 0",
|
||||||
"build:bundle": "NAMESPACE=instances NODE_ENV=production redrun -p build:frontend build:ssr",
|
"build:bundle": "NAMESPACE=instances NODE_ENV=production redrun -p build:frontend build:ssr",
|
||||||
"prepublish": "NODE_ENV=production redrun build:bundle",
|
"prepublish": "NODE_ENV=production redrun build:bundle",
|
||||||
"lint": "redrun lint:ci -- --fix",
|
|
||||||
"lint:ci": "NODE_ENV=test eslint . --ext .js --ext .md",
|
|
||||||
"test": "DEFAULT_TIMEOUT_INTERVAL=100000 NODE_ENV=test joyent-react-scripts test --env=jsdom --testPathIgnorePatterns='.ui.js'",
|
"test": "DEFAULT_TIMEOUT_INTERVAL=100000 NODE_ENV=test joyent-react-scripts test --env=jsdom --testPathIgnorePatterns='.ui.js'",
|
||||||
"test:ci": "NODE_ENV=test joyent-react-scripts test --env=jsdom --testPathIgnorePatterns='.ui.js'",
|
"test:ci": "NODE_ENV=test joyent-react-scripts test --env=jsdom --testPathIgnorePatterns='.ui.js'",
|
||||||
"build:frontend": "joyent-react-scripts build",
|
"build:frontend": "joyent-react-scripts build",
|
||||||
|
@ -28,7 +26,6 @@
|
||||||
"boom": "^7.2.0",
|
"boom": "^7.2.0",
|
||||||
"bytes": "^3.0.0",
|
"bytes": "^3.0.0",
|
||||||
"clipboard-copy": "^2.0.0",
|
"clipboard-copy": "^2.0.0",
|
||||||
"constant-case": "^2.0.0",
|
|
||||||
"cross-fetch": "^2.1.0",
|
"cross-fetch": "^2.1.0",
|
||||||
"date-fns": "^1.29.0",
|
"date-fns": "^1.29.0",
|
||||||
"declarative-redux-form": "^2.0.8",
|
"declarative-redux-form": "^2.0.8",
|
||||||
|
@ -54,15 +51,13 @@
|
||||||
"lodash.isfunction": "^3.0.9",
|
"lodash.isfunction": "^3.0.9",
|
||||||
"lodash.isinteger": "^4.0.4",
|
"lodash.isinteger": "^4.0.4",
|
||||||
"lodash.isnan": "^3.0.2",
|
"lodash.isnan": "^3.0.2",
|
||||||
"lodash.omit": "^4.5.0",
|
|
||||||
"lodash.reduce": "^4.6.0",
|
"lodash.reduce": "^4.6.0",
|
||||||
"lodash.reverse": "^4.0.1",
|
"lodash.reverse": "^4.0.1",
|
||||||
"lodash.some": "^4.6.0",
|
"lodash.some": "^4.6.0",
|
||||||
"lodash.sortby": "^4.7.0",
|
"lodash.sortby": "^4.7.0",
|
||||||
"lodash.uniqby": "^4.7.0",
|
|
||||||
"lodash.values": "^4.3.0",
|
"lodash.values": "^4.3.0",
|
||||||
"param-case": "^2.1.1",
|
"param-case": "^2.1.1",
|
||||||
"query-string": "^6.0.0",
|
"query-string": "^6.1.0",
|
||||||
"react": "^16.3.1",
|
"react": "^16.3.1",
|
||||||
"react-apollo": "^2.1.2",
|
"react-apollo": "^2.1.2",
|
||||||
"react-dom": "^16.3.1",
|
"react-dom": "^16.3.1",
|
||||||
|
|
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
|
@ -315,7 +315,7 @@ exports[`renders <Summary /> without throwing 1`] = `
|
||||||
|
|
||||||
.c27:hover {
|
.c27:hover {
|
||||||
background-color: rgb(72,83,217);
|
background-color: rgb(72,83,217);
|
||||||
border: solid 0.0625rem rgb(45,56,132);
|
border-color: rgb(45,56,132);
|
||||||
}
|
}
|
||||||
|
|
||||||
.c27:active,
|
.c27:active,
|
||||||
|
@ -419,7 +419,7 @@ exports[`renders <Summary /> without throwing 1`] = `
|
||||||
|
|
||||||
.c33:hover {
|
.c33:hover {
|
||||||
background-color: rgb(72,83,217);
|
background-color: rgb(72,83,217);
|
||||||
border: solid 0.0625rem rgb(45,56,132);
|
border-color: rgb(45,56,132);
|
||||||
}
|
}
|
||||||
|
|
||||||
.c33:active,
|
.c33:active,
|
||||||
|
@ -515,7 +515,7 @@ exports[`renders <Summary /> without throwing 1`] = `
|
||||||
|
|
||||||
.c35:hover {
|
.c35:hover {
|
||||||
background-color: rgb(72,83,217);
|
background-color: rgb(72,83,217);
|
||||||
border: solid 0.0625rem rgb(45,56,132);
|
border-color: rgb(45,56,132);
|
||||||
}
|
}
|
||||||
|
|
||||||
.c35:active,
|
.c35:active,
|
||||||
|
@ -625,7 +625,7 @@ exports[`renders <Summary /> without throwing 1`] = `
|
||||||
|
|
||||||
.c40:hover {
|
.c40:hover {
|
||||||
background-color: rgb(72,83,217);
|
background-color: rgb(72,83,217);
|
||||||
border: solid 0.0625rem rgb(45,56,132);
|
border-color: rgb(45,56,132);
|
||||||
}
|
}
|
||||||
|
|
||||||
.c40:active,
|
.c40:active,
|
||||||
|
@ -767,7 +767,7 @@ exports[`renders <Summary /> without throwing 1`] = `
|
||||||
|
|
||||||
.c41:hover {
|
.c41:hover {
|
||||||
background-color: rgb(72,83,217);
|
background-color: rgb(72,83,217);
|
||||||
border: solid 0.0625rem rgb(45,56,132);
|
border-color: rgb(45,56,132);
|
||||||
}
|
}
|
||||||
|
|
||||||
.c41:active,
|
.c41:active,
|
||||||
|
@ -893,6 +893,7 @@ exports[`renders <Summary /> without throwing 1`] = `
|
||||||
.c43 {
|
.c43 {
|
||||||
height: 1px;
|
height: 1px;
|
||||||
background-color: rgb(216,216,216);
|
background-color: rgb(216,216,216);
|
||||||
|
height: 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
.c2 {
|
.c2 {
|
||||||
|
@ -2151,7 +2152,7 @@ exports[`renders <Summary instance /> without throwing 1`] = `
|
||||||
|
|
||||||
.c33:hover {
|
.c33:hover {
|
||||||
background-color: rgb(72,83,217);
|
background-color: rgb(72,83,217);
|
||||||
border: solid 0.0625rem rgb(45,56,132);
|
border-color: rgb(45,56,132);
|
||||||
}
|
}
|
||||||
|
|
||||||
.c33:active,
|
.c33:active,
|
||||||
|
@ -2247,7 +2248,7 @@ exports[`renders <Summary instance /> without throwing 1`] = `
|
||||||
|
|
||||||
.c27:hover {
|
.c27:hover {
|
||||||
background-color: rgb(72,83,217);
|
background-color: rgb(72,83,217);
|
||||||
border: solid 0.0625rem rgb(45,56,132);
|
border-color: rgb(45,56,132);
|
||||||
}
|
}
|
||||||
|
|
||||||
.c27:active,
|
.c27:active,
|
||||||
|
@ -2352,7 +2353,7 @@ exports[`renders <Summary instance /> without throwing 1`] = `
|
||||||
|
|
||||||
.c39:hover {
|
.c39:hover {
|
||||||
background-color: rgb(72,83,217);
|
background-color: rgb(72,83,217);
|
||||||
border: solid 0.0625rem rgb(45,56,132);
|
border-color: rgb(45,56,132);
|
||||||
}
|
}
|
||||||
|
|
||||||
.c39:active,
|
.c39:active,
|
||||||
|
@ -2472,7 +2473,7 @@ exports[`renders <Summary instance /> without throwing 1`] = `
|
||||||
|
|
||||||
.c40:hover {
|
.c40:hover {
|
||||||
background-color: rgb(72,83,217);
|
background-color: rgb(72,83,217);
|
||||||
border: solid 0.0625rem rgb(45,56,132);
|
border-color: rgb(45,56,132);
|
||||||
}
|
}
|
||||||
|
|
||||||
.c40:active,
|
.c40:active,
|
||||||
|
@ -2582,6 +2583,7 @@ exports[`renders <Summary instance /> without throwing 1`] = `
|
||||||
.c42 {
|
.c42 {
|
||||||
height: 1px;
|
height: 1px;
|
||||||
background-color: rgb(216,216,216);
|
background-color: rgb(216,216,216);
|
||||||
|
height: 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
.c2 {
|
.c2 {
|
||||||
|
@ -4078,7 +4080,7 @@ exports[`renders <Summary instance /> without throwing 2`] = `
|
||||||
|
|
||||||
.c33:hover {
|
.c33:hover {
|
||||||
background-color: rgb(72,83,217);
|
background-color: rgb(72,83,217);
|
||||||
border: solid 0.0625rem rgb(45,56,132);
|
border-color: rgb(45,56,132);
|
||||||
}
|
}
|
||||||
|
|
||||||
.c33:active,
|
.c33:active,
|
||||||
|
@ -4174,7 +4176,7 @@ exports[`renders <Summary instance /> without throwing 2`] = `
|
||||||
|
|
||||||
.c27:hover {
|
.c27:hover {
|
||||||
background-color: rgb(72,83,217);
|
background-color: rgb(72,83,217);
|
||||||
border: solid 0.0625rem rgb(45,56,132);
|
border-color: rgb(45,56,132);
|
||||||
}
|
}
|
||||||
|
|
||||||
.c27:active,
|
.c27:active,
|
||||||
|
@ -4279,7 +4281,7 @@ exports[`renders <Summary instance /> without throwing 2`] = `
|
||||||
|
|
||||||
.c39:hover {
|
.c39:hover {
|
||||||
background-color: rgb(72,83,217);
|
background-color: rgb(72,83,217);
|
||||||
border: solid 0.0625rem rgb(45,56,132);
|
border-color: rgb(45,56,132);
|
||||||
}
|
}
|
||||||
|
|
||||||
.c39:active,
|
.c39:active,
|
||||||
|
@ -4399,7 +4401,7 @@ exports[`renders <Summary instance /> without throwing 2`] = `
|
||||||
|
|
||||||
.c40:hover {
|
.c40:hover {
|
||||||
background-color: rgb(72,83,217);
|
background-color: rgb(72,83,217);
|
||||||
border: solid 0.0625rem rgb(45,56,132);
|
border-color: rgb(45,56,132);
|
||||||
}
|
}
|
||||||
|
|
||||||
.c40:active,
|
.c40:active,
|
||||||
|
@ -4509,6 +4511,7 @@ exports[`renders <Summary instance /> without throwing 2`] = `
|
||||||
.c42 {
|
.c42 {
|
||||||
height: 1px;
|
height: 1px;
|
||||||
background-color: rgb(216,216,216);
|
background-color: rgb(216,216,216);
|
||||||
|
height: 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
.c2 {
|
.c2 {
|
||||||
|
@ -6060,7 +6063,7 @@ exports[`renders <Summary starting stopping rebooting removing /> without throwi
|
||||||
|
|
||||||
.c27:hover {
|
.c27:hover {
|
||||||
background-color: rgb(72,83,217);
|
background-color: rgb(72,83,217);
|
||||||
border: solid 0.0625rem rgb(45,56,132);
|
border-color: rgb(45,56,132);
|
||||||
}
|
}
|
||||||
|
|
||||||
.c27:active,
|
.c27:active,
|
||||||
|
@ -6164,7 +6167,7 @@ exports[`renders <Summary starting stopping rebooting removing /> without throwi
|
||||||
|
|
||||||
.c36:hover {
|
.c36:hover {
|
||||||
background-color: rgb(72,83,217);
|
background-color: rgb(72,83,217);
|
||||||
border: solid 0.0625rem rgb(45,56,132);
|
border-color: rgb(45,56,132);
|
||||||
}
|
}
|
||||||
|
|
||||||
.c36:active,
|
.c36:active,
|
||||||
|
@ -6260,7 +6263,7 @@ exports[`renders <Summary starting stopping rebooting removing /> without throwi
|
||||||
|
|
||||||
.c38:hover {
|
.c38:hover {
|
||||||
background-color: rgb(72,83,217);
|
background-color: rgb(72,83,217);
|
||||||
border: solid 0.0625rem rgb(45,56,132);
|
border-color: rgb(45,56,132);
|
||||||
}
|
}
|
||||||
|
|
||||||
.c38:active,
|
.c38:active,
|
||||||
|
@ -6370,7 +6373,7 @@ exports[`renders <Summary starting stopping rebooting removing /> without throwi
|
||||||
|
|
||||||
.c43:hover {
|
.c43:hover {
|
||||||
background-color: rgb(72,83,217);
|
background-color: rgb(72,83,217);
|
||||||
border: solid 0.0625rem rgb(45,56,132);
|
border-color: rgb(45,56,132);
|
||||||
}
|
}
|
||||||
|
|
||||||
.c43:active,
|
.c43:active,
|
||||||
|
@ -6512,7 +6515,7 @@ exports[`renders <Summary starting stopping rebooting removing /> without throwi
|
||||||
|
|
||||||
.c44:hover {
|
.c44:hover {
|
||||||
background-color: rgb(72,83,217);
|
background-color: rgb(72,83,217);
|
||||||
border: solid 0.0625rem rgb(45,56,132);
|
border-color: rgb(45,56,132);
|
||||||
}
|
}
|
||||||
|
|
||||||
.c44:active,
|
.c44:active,
|
||||||
|
@ -6638,6 +6641,7 @@ exports[`renders <Summary starting stopping rebooting removing /> without throwi
|
||||||
.c46 {
|
.c46 {
|
||||||
height: 1px;
|
height: 1px;
|
||||||
background-color: rgb(216,216,216);
|
background-color: rgb(216,216,216);
|
||||||
|
height: 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
.c2 {
|
.c2 {
|
||||||
|
@ -7920,7 +7924,7 @@ exports[`renders <Summary state /> without throwing 1`] = `
|
||||||
|
|
||||||
.c33:hover {
|
.c33:hover {
|
||||||
background-color: rgb(72,83,217);
|
background-color: rgb(72,83,217);
|
||||||
border: solid 0.0625rem rgb(45,56,132);
|
border-color: rgb(45,56,132);
|
||||||
}
|
}
|
||||||
|
|
||||||
.c33:active,
|
.c33:active,
|
||||||
|
@ -8016,7 +8020,7 @@ exports[`renders <Summary state /> without throwing 1`] = `
|
||||||
|
|
||||||
.c27:hover {
|
.c27:hover {
|
||||||
background-color: rgb(72,83,217);
|
background-color: rgb(72,83,217);
|
||||||
border: solid 0.0625rem rgb(45,56,132);
|
border-color: rgb(45,56,132);
|
||||||
}
|
}
|
||||||
|
|
||||||
.c27:active,
|
.c27:active,
|
||||||
|
@ -8121,7 +8125,7 @@ exports[`renders <Summary state /> without throwing 1`] = `
|
||||||
|
|
||||||
.c39:hover {
|
.c39:hover {
|
||||||
background-color: rgb(72,83,217);
|
background-color: rgb(72,83,217);
|
||||||
border: solid 0.0625rem rgb(45,56,132);
|
border-color: rgb(45,56,132);
|
||||||
}
|
}
|
||||||
|
|
||||||
.c39:active,
|
.c39:active,
|
||||||
|
@ -8241,7 +8245,7 @@ exports[`renders <Summary state /> without throwing 1`] = `
|
||||||
|
|
||||||
.c40:hover {
|
.c40:hover {
|
||||||
background-color: rgb(72,83,217);
|
background-color: rgb(72,83,217);
|
||||||
border: solid 0.0625rem rgb(45,56,132);
|
border-color: rgb(45,56,132);
|
||||||
}
|
}
|
||||||
|
|
||||||
.c40:active,
|
.c40:active,
|
||||||
|
@ -8351,6 +8355,7 @@ exports[`renders <Summary state /> without throwing 1`] = `
|
||||||
.c42 {
|
.c42 {
|
||||||
height: 1px;
|
height: 1px;
|
||||||
background-color: rgb(216,216,216);
|
background-color: rgb(216,216,216);
|
||||||
|
height: 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
.c2 {
|
.c2 {
|
||||||
|
@ -9609,7 +9614,7 @@ exports[`renders <Summary state /> without throwing 2`] = `
|
||||||
|
|
||||||
.c33:hover {
|
.c33:hover {
|
||||||
background-color: rgb(72,83,217);
|
background-color: rgb(72,83,217);
|
||||||
border: solid 0.0625rem rgb(45,56,132);
|
border-color: rgb(45,56,132);
|
||||||
}
|
}
|
||||||
|
|
||||||
.c33:active,
|
.c33:active,
|
||||||
|
@ -9705,7 +9710,7 @@ exports[`renders <Summary state /> without throwing 2`] = `
|
||||||
|
|
||||||
.c27:hover {
|
.c27:hover {
|
||||||
background-color: rgb(72,83,217);
|
background-color: rgb(72,83,217);
|
||||||
border: solid 0.0625rem rgb(45,56,132);
|
border-color: rgb(45,56,132);
|
||||||
}
|
}
|
||||||
|
|
||||||
.c27:active,
|
.c27:active,
|
||||||
|
@ -9810,7 +9815,7 @@ exports[`renders <Summary state /> without throwing 2`] = `
|
||||||
|
|
||||||
.c39:hover {
|
.c39:hover {
|
||||||
background-color: rgb(72,83,217);
|
background-color: rgb(72,83,217);
|
||||||
border: solid 0.0625rem rgb(45,56,132);
|
border-color: rgb(45,56,132);
|
||||||
}
|
}
|
||||||
|
|
||||||
.c39:active,
|
.c39:active,
|
||||||
|
@ -9930,7 +9935,7 @@ exports[`renders <Summary state /> without throwing 2`] = `
|
||||||
|
|
||||||
.c40:hover {
|
.c40:hover {
|
||||||
background-color: rgb(72,83,217);
|
background-color: rgb(72,83,217);
|
||||||
border: solid 0.0625rem rgb(45,56,132);
|
border-color: rgb(45,56,132);
|
||||||
}
|
}
|
||||||
|
|
||||||
.c40:active,
|
.c40:active,
|
||||||
|
@ -10040,6 +10045,7 @@ exports[`renders <Summary state /> without throwing 2`] = `
|
||||||
.c42 {
|
.c42 {
|
||||||
height: 1px;
|
height: 1px;
|
||||||
background-color: rgb(216,216,216);
|
background-color: rgb(216,216,216);
|
||||||
|
height: 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
.c2 {
|
.c2 {
|
||||||
|
@ -11312,7 +11318,7 @@ exports[`renders <Summary state /> without throwing 3`] = `
|
||||||
|
|
||||||
.c27:hover {
|
.c27:hover {
|
||||||
background-color: rgb(72,83,217);
|
background-color: rgb(72,83,217);
|
||||||
border: solid 0.0625rem rgb(45,56,132);
|
border-color: rgb(45,56,132);
|
||||||
}
|
}
|
||||||
|
|
||||||
.c27:active,
|
.c27:active,
|
||||||
|
@ -11416,7 +11422,7 @@ exports[`renders <Summary state /> without throwing 3`] = `
|
||||||
|
|
||||||
.c33:hover {
|
.c33:hover {
|
||||||
background-color: rgb(72,83,217);
|
background-color: rgb(72,83,217);
|
||||||
border: solid 0.0625rem rgb(45,56,132);
|
border-color: rgb(45,56,132);
|
||||||
}
|
}
|
||||||
|
|
||||||
.c33:active,
|
.c33:active,
|
||||||
|
@ -11512,7 +11518,7 @@ exports[`renders <Summary state /> without throwing 3`] = `
|
||||||
|
|
||||||
.c35:hover {
|
.c35:hover {
|
||||||
background-color: rgb(72,83,217);
|
background-color: rgb(72,83,217);
|
||||||
border: solid 0.0625rem rgb(45,56,132);
|
border-color: rgb(45,56,132);
|
||||||
}
|
}
|
||||||
|
|
||||||
.c35:active,
|
.c35:active,
|
||||||
|
@ -11622,7 +11628,7 @@ exports[`renders <Summary state /> without throwing 3`] = `
|
||||||
|
|
||||||
.c40:hover {
|
.c40:hover {
|
||||||
background-color: rgb(72,83,217);
|
background-color: rgb(72,83,217);
|
||||||
border: solid 0.0625rem rgb(45,56,132);
|
border-color: rgb(45,56,132);
|
||||||
}
|
}
|
||||||
|
|
||||||
.c40:active,
|
.c40:active,
|
||||||
|
@ -11764,7 +11770,7 @@ exports[`renders <Summary state /> without throwing 3`] = `
|
||||||
|
|
||||||
.c41:hover {
|
.c41:hover {
|
||||||
background-color: rgb(72,83,217);
|
background-color: rgb(72,83,217);
|
||||||
border: solid 0.0625rem rgb(45,56,132);
|
border-color: rgb(45,56,132);
|
||||||
}
|
}
|
||||||
|
|
||||||
.c41:active,
|
.c41:active,
|
||||||
|
@ -11891,6 +11897,7 @@ exports[`renders <Summary state /> without throwing 3`] = `
|
||||||
.c43 {
|
.c43 {
|
||||||
height: 1px;
|
height: 1px;
|
||||||
background-color: rgb(216,216,216);
|
background-color: rgb(216,216,216);
|
||||||
|
height: 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
.c2 {
|
.c2 {
|
||||||
|
|
|
@ -127,7 +127,7 @@ exports[`renders <Toolbar /> without throwing 1`] = `
|
||||||
|
|
||||||
.c7:hover {
|
.c7:hover {
|
||||||
background-color: rgb(72,83,217);
|
background-color: rgb(72,83,217);
|
||||||
border: solid 0.0625rem rgb(45,56,132);
|
border-color: rgb(45,56,132);
|
||||||
}
|
}
|
||||||
|
|
||||||
.c7:active,
|
.c7:active,
|
||||||
|
@ -421,7 +421,7 @@ exports[`renders <Toolbar actionLabel /> without throwing 1`] = `
|
||||||
|
|
||||||
.c7:hover {
|
.c7:hover {
|
||||||
background-color: rgb(72,83,217);
|
background-color: rgb(72,83,217);
|
||||||
border: solid 0.0625rem rgb(45,56,132);
|
border-color: rgb(45,56,132);
|
||||||
}
|
}
|
||||||
|
|
||||||
.c7:active,
|
.c7:active,
|
||||||
|
@ -720,7 +720,7 @@ exports[`renders <Toolbar actionable /> without throwing 1`] = `
|
||||||
|
|
||||||
.c7:hover {
|
.c7:hover {
|
||||||
background-color: rgb(72,83,217);
|
background-color: rgb(72,83,217);
|
||||||
border: solid 0.0625rem rgb(45,56,132);
|
border-color: rgb(45,56,132);
|
||||||
}
|
}
|
||||||
|
|
||||||
.c7:active,
|
.c7:active,
|
||||||
|
@ -1031,7 +1031,7 @@ exports[`renders <Toolbar onActionClick /> without throwing 1`] = `
|
||||||
|
|
||||||
.c7:hover {
|
.c7:hover {
|
||||||
background-color: rgb(72,83,217);
|
background-color: rgb(72,83,217);
|
||||||
border: solid 0.0625rem rgb(45,56,132);
|
border-color: rgb(45,56,132);
|
||||||
}
|
}
|
||||||
|
|
||||||
.c7:active,
|
.c7:active,
|
||||||
|
@ -1325,7 +1325,7 @@ exports[`renders <Toolbar searchLabel /> without throwing 1`] = `
|
||||||
|
|
||||||
.c7:hover {
|
.c7:hover {
|
||||||
background-color: rgb(72,83,217);
|
background-color: rgb(72,83,217);
|
||||||
border: solid 0.0625rem rgb(45,56,132);
|
border-color: rgb(45,56,132);
|
||||||
}
|
}
|
||||||
|
|
||||||
.c7:active,
|
.c7:active,
|
||||||
|
@ -1619,7 +1619,7 @@ exports[`renders <Toolbar searchPlaceholder /> without throwing 1`] = `
|
||||||
|
|
||||||
.c7:hover {
|
.c7:hover {
|
||||||
background-color: rgb(72,83,217);
|
background-color: rgb(72,83,217);
|
||||||
border: solid 0.0625rem rgb(45,56,132);
|
border-color: rgb(45,56,132);
|
||||||
}
|
}
|
||||||
|
|
||||||
.c7:active,
|
.c7:active,
|
||||||
|
@ -1913,7 +1913,7 @@ exports[`renders <Toolbar searchable /> without throwing 1`] = `
|
||||||
|
|
||||||
.c7:hover {
|
.c7:hover {
|
||||||
background-color: rgb(72,83,217);
|
background-color: rgb(72,83,217);
|
||||||
border: solid 0.0625rem rgb(45,56,132);
|
border-color: rgb(45,56,132);
|
||||||
}
|
}
|
||||||
|
|
||||||
.c7:active,
|
.c7:active,
|
||||||
|
|
|
@ -1,6 +1,5 @@
|
||||||
import React from 'react';
|
import React from 'react';
|
||||||
import { Row, Col } from 'joyent-react-styled-flexboxgrid';
|
import { Row, Col } from 'joyent-react-styled-flexboxgrid';
|
||||||
import { withTheme } from 'styled-components';
|
|
||||||
import { Margin } from 'styled-components-spacing';
|
import { Margin } from 'styled-components-spacing';
|
||||||
import Flex from 'styled-flex-component';
|
import Flex from 'styled-flex-component';
|
||||||
|
|
||||||
|
@ -16,172 +15,159 @@ import {
|
||||||
|
|
||||||
const { SmallOnly, Medium } = QueryBreakpoints;
|
const { SmallOnly, Medium } = QueryBreakpoints;
|
||||||
|
|
||||||
export default withTheme(
|
export default ({
|
||||||
({
|
submitting = false,
|
||||||
submitting = false,
|
statuses = {},
|
||||||
statuses = {},
|
allowedActions = {},
|
||||||
allowedActions = {},
|
onStart,
|
||||||
onStart,
|
onStop,
|
||||||
onStop,
|
onReboot,
|
||||||
onReboot,
|
onRemove
|
||||||
onRemove,
|
}) => (
|
||||||
theme = {}
|
<StickyFooter fill="#FAFAFA" fixed bottom>
|
||||||
}) => (
|
<Row between="xs" middle="xs">
|
||||||
<StickyFooter fixed bottom fill="#FAFAFA">
|
<Col xs={7}>
|
||||||
<Row between="xs" middle="xs">
|
<Flex>
|
||||||
<Col xs={7}>
|
{onStart && [
|
||||||
<Flex>
|
<SmallOnly key="small-only">
|
||||||
{onStart && [
|
<Button
|
||||||
<SmallOnly key="small-only">
|
type="button"
|
||||||
|
onClick={onStart}
|
||||||
|
disabled={submitting || !allowedActions.start}
|
||||||
|
loading={submitting && statuses.starting}
|
||||||
|
secondary
|
||||||
|
small
|
||||||
|
icon
|
||||||
|
>
|
||||||
|
<StartIcon disabled={submitting || !allowedActions.start} />
|
||||||
|
</Button>
|
||||||
|
</SmallOnly>,
|
||||||
|
<Margin right="1">
|
||||||
|
<Medium key="medium">
|
||||||
<Button
|
<Button
|
||||||
type="button"
|
type="button"
|
||||||
onClick={onStart}
|
onClick={onStart}
|
||||||
disabled={submitting || !allowedActions.start}
|
disabled={submitting || !allowedActions.start}
|
||||||
loading={submitting && statuses.starting}
|
loading={submitting && statuses.starting}
|
||||||
secondary
|
secondary
|
||||||
small
|
|
||||||
icon
|
icon
|
||||||
>
|
>
|
||||||
<StartIcon disabled={submitting || !allowedActions.start} />
|
<Margin right="1">
|
||||||
|
<StartIcon disabled={submitting || !allowedActions.start} />
|
||||||
|
</Margin>
|
||||||
|
<span>Start</span>
|
||||||
</Button>
|
</Button>
|
||||||
</SmallOnly>,
|
</Medium>
|
||||||
<Margin right={1}>
|
</Margin>
|
||||||
<Medium key="medium">
|
]}
|
||||||
<Button
|
{onStop && [
|
||||||
type="button"
|
<SmallOnly key="small-only">
|
||||||
onClick={onStart}
|
<Button
|
||||||
disabled={submitting || !allowedActions.start}
|
type="button"
|
||||||
loading={submitting && statuses.starting}
|
onClick={onStop}
|
||||||
secondary
|
disabled={submitting || !allowedActions.stop}
|
||||||
icon
|
loading={submitting && statuses.stopping}
|
||||||
>
|
secondary
|
||||||
<Margin right={1}>
|
small
|
||||||
<StartIcon
|
icon
|
||||||
disabled={submitting || !allowedActions.start}
|
>
|
||||||
/>
|
<StopIcon disabled={submitting || !allowedActions.stop} />
|
||||||
</Margin>
|
</Button>
|
||||||
<span>Start</span>
|
</SmallOnly>,
|
||||||
</Button>
|
<Margin right="1">
|
||||||
</Medium>
|
<Medium key="medium">
|
||||||
</Margin>
|
|
||||||
]}
|
|
||||||
{onStop && [
|
|
||||||
<SmallOnly key="small-only">
|
|
||||||
<Button
|
<Button
|
||||||
type="button"
|
type="button"
|
||||||
onClick={onStop}
|
onClick={onStop}
|
||||||
disabled={submitting || !allowedActions.stop}
|
disabled={submitting || !allowedActions.stop}
|
||||||
loading={submitting && statuses.stopping}
|
loading={submitting && statuses.stopping}
|
||||||
secondary
|
secondary
|
||||||
small
|
|
||||||
icon
|
icon
|
||||||
>
|
>
|
||||||
<StopIcon disabled={submitting || !allowedActions.stop} />
|
<Margin right="1">
|
||||||
|
<StopIcon disabled={submitting || !allowedActions.stop} />
|
||||||
|
</Margin>
|
||||||
|
<span>Stop</span>
|
||||||
</Button>
|
</Button>
|
||||||
</SmallOnly>,
|
</Medium>
|
||||||
<Margin right={1}>
|
</Margin>
|
||||||
<Medium key="medium">
|
]}
|
||||||
<Button
|
{onReboot && [
|
||||||
type="button"
|
<SmallOnly key="small-only">
|
||||||
onClick={onStop}
|
<Button
|
||||||
disabled={submitting || !allowedActions.stop}
|
type="button"
|
||||||
loading={submitting && statuses.stopping}
|
onClick={onReboot}
|
||||||
secondary
|
disabled={submitting || !allowedActions.reboot}
|
||||||
icon
|
loading={submitting && statuses.rebooting}
|
||||||
>
|
secondary
|
||||||
<Margin right={1}>
|
small
|
||||||
<StopIcon disabled={submitting || !allowedActions.stop} />
|
icon
|
||||||
</Margin>
|
>
|
||||||
<span>Stop</span>
|
<ResetIcon disabled={submitting || !allowedActions.reboot} />
|
||||||
</Button>
|
</Button>
|
||||||
</Medium>
|
</SmallOnly>,
|
||||||
</Margin>
|
<Margin right="1">
|
||||||
]}
|
<Medium key="medium">
|
||||||
{onReboot && [
|
|
||||||
<SmallOnly key="small-only">
|
|
||||||
<Button
|
<Button
|
||||||
type="button"
|
type="button"
|
||||||
onClick={onReboot}
|
onClick={onReboot}
|
||||||
disabled={submitting || !allowedActions.reboot}
|
disabled={submitting || !allowedActions.reboot}
|
||||||
loading={submitting && statuses.rebooting}
|
loading={submitting && statuses.rebooting}
|
||||||
secondary
|
secondary
|
||||||
small
|
|
||||||
icon
|
icon
|
||||||
>
|
>
|
||||||
<ResetIcon disabled={submitting || !allowedActions.reboot} />
|
<ResetIcon disabled={submitting || !allowedActions.reboot} />
|
||||||
|
<span>Reboot</span>
|
||||||
</Button>
|
</Button>
|
||||||
</SmallOnly>,
|
</Medium>
|
||||||
<Margin right={1}>
|
</Margin>
|
||||||
<Medium key="medium">
|
]}
|
||||||
<Button
|
</Flex>
|
||||||
type="button"
|
</Col>
|
||||||
onClick={onReboot}
|
{onRemove && (
|
||||||
disabled={submitting || !allowedActions.reboot}
|
<Col xs={5}>
|
||||||
loading={submitting && statuses.rebooting}
|
<SmallOnly key="small-only">
|
||||||
secondary
|
<Button
|
||||||
icon
|
type="button"
|
||||||
>
|
onClick={onRemove}
|
||||||
<ResetIcon
|
disabled={submitting || !allowedActions.remove}
|
||||||
disabled={submitting || !allowedActions.reboot}
|
loading={submitting && statuses.removing}
|
||||||
/>
|
secondary
|
||||||
<span>Reboot</span>
|
error
|
||||||
</Button>
|
right
|
||||||
</Medium>
|
small
|
||||||
</Margin>
|
icon
|
||||||
]}
|
>
|
||||||
</Flex>
|
<DeleteIcon
|
||||||
</Col>
|
disabled={submitting}
|
||||||
{onRemove && (
|
fill={submitting || !allowedActions.remove ? undefined : 'red'}
|
||||||
<Col xs={5}>
|
/>
|
||||||
<SmallOnly key="small-only">
|
</Button>
|
||||||
<Button
|
</SmallOnly>
|
||||||
type="button"
|
<Medium key="medium">
|
||||||
onClick={onRemove}
|
<Button
|
||||||
disabled={submitting || !allowedActions.remove}
|
type="button"
|
||||||
loading={submitting && statuses.removing}
|
onClick={onRemove}
|
||||||
secondary
|
disabled={submitting || !allowedActions.remove}
|
||||||
error
|
loading={submitting && statuses.removing}
|
||||||
right
|
error
|
||||||
small
|
secondary
|
||||||
icon
|
right
|
||||||
>
|
icon
|
||||||
|
>
|
||||||
|
<Margin right="1">
|
||||||
<DeleteIcon
|
<DeleteIcon
|
||||||
disabled={submitting}
|
disabled={submitting || !allowedActions.remove}
|
||||||
fill={
|
fill={
|
||||||
!(submitting || !allowedActions.remove)
|
submitting || !allowedActions.remove ? undefined : 'red'
|
||||||
? theme.red
|
|
||||||
: undefined
|
|
||||||
}
|
}
|
||||||
/>
|
/>
|
||||||
</Button>
|
</Margin>
|
||||||
</SmallOnly>
|
<span>Remove</span>
|
||||||
<Medium key="medium">
|
</Button>
|
||||||
<Button
|
</Medium>
|
||||||
type="button"
|
</Col>
|
||||||
onClick={onRemove}
|
)}
|
||||||
disabled={submitting || !allowedActions.remove}
|
</Row>
|
||||||
loading={submitting && statuses.removing}
|
</StickyFooter>
|
||||||
error
|
|
||||||
secondary
|
|
||||||
right
|
|
||||||
icon
|
|
||||||
>
|
|
||||||
<Margin right={1}>
|
|
||||||
<DeleteIcon
|
|
||||||
disabled={submitting || !allowedActions.remove}
|
|
||||||
fill={
|
|
||||||
!(submitting || !allowedActions.remove)
|
|
||||||
? theme.red
|
|
||||||
: undefined
|
|
||||||
}
|
|
||||||
/>
|
|
||||||
</Margin>
|
|
||||||
<span>Remove</span>
|
|
||||||
</Button>
|
|
||||||
</Medium>
|
|
||||||
</Col>
|
|
||||||
)}
|
|
||||||
</Row>
|
|
||||||
</StickyFooter>
|
|
||||||
)
|
|
||||||
);
|
);
|
||||||
|
|
|
@ -64,7 +64,7 @@ const MarginalPaginationItem = styled(PaginationItem)`
|
||||||
`;
|
`;
|
||||||
|
|
||||||
const Actions = styled(Flex)`
|
const Actions = styled(Flex)`
|
||||||
height: ${remcalc(48)};
|
height: 100%;
|
||||||
`;
|
`;
|
||||||
|
|
||||||
const PopoverItem = styled(BasePopoverItem)`
|
const PopoverItem = styled(BasePopoverItem)`
|
||||||
|
@ -124,7 +124,11 @@ export const Item = ({
|
||||||
<TableTd xs="0" sm="130" middle left>
|
<TableTd xs="0" sm="130" middle left>
|
||||||
<code>{id.substring(0, 7)}</code>
|
<code>{id.substring(0, 7)}</code>
|
||||||
</TableTd>
|
</TableTd>
|
||||||
{!mutating ? (
|
{mutating ? (
|
||||||
|
<TableTd padding="0" hasBorder="left" center middle>
|
||||||
|
<ActionsIcon disabled />
|
||||||
|
</TableTd>
|
||||||
|
) : (
|
||||||
<PopoverContainer clickable>
|
<PopoverContainer clickable>
|
||||||
<TableTd padding="0" hasBorder="left">
|
<TableTd padding="0" hasBorder="left">
|
||||||
<PopoverTarget box>
|
<PopoverTarget box>
|
||||||
|
@ -160,10 +164,6 @@ export const Item = ({
|
||||||
</Popover>
|
</Popover>
|
||||||
</TableTd>
|
</TableTd>
|
||||||
</PopoverContainer>
|
</PopoverContainer>
|
||||||
) : (
|
|
||||||
<TableTd padding="0" hasBorder="left" center middle>
|
|
||||||
<ActionsIcon disabled />
|
|
||||||
</TableTd>
|
|
||||||
)}
|
)}
|
||||||
</TableTr>
|
</TableTr>
|
||||||
);
|
);
|
||||||
|
@ -250,7 +250,7 @@ export default ({
|
||||||
</TableTr>
|
</TableTr>
|
||||||
</TableThead>
|
</TableThead>
|
||||||
<TableTbody>{children}</TableTbody>
|
<TableTbody>{children}</TableTbody>
|
||||||
{!noInstances ? (
|
{noInstances ? null : (
|
||||||
<PaginationTableFoot colSpan="6">
|
<PaginationTableFoot colSpan="6">
|
||||||
<PaginationItem
|
<PaginationItem
|
||||||
to={`${Global().pathname}?${queryString.stringify({
|
to={`${Global().pathname}?${queryString.stringify({
|
||||||
|
@ -336,7 +336,7 @@ export default ({
|
||||||
Next
|
Next
|
||||||
</PaginationItem>
|
</PaginationItem>
|
||||||
</PaginationTableFoot>
|
</PaginationTableFoot>
|
||||||
) : null}
|
)}
|
||||||
</Table>
|
</Table>
|
||||||
</form>
|
</form>
|
||||||
);
|
);
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
import React from 'react';
|
import React from 'react';
|
||||||
|
|
||||||
import { KeyValue } from 'joyent-ui-toolkit';
|
import { KeyValue } from 'joyent-ui-resource-widgets';
|
||||||
import Editor from 'joyent-ui-toolkit/dist/es/editor';
|
import Editor from 'joyent-ui-toolkit/dist/es/editor';
|
||||||
|
|
||||||
export const AddForm = props => (
|
export const AddForm = props => (
|
||||||
|
|
|
@ -15,7 +15,6 @@ import {
|
||||||
TableTbody,
|
TableTbody,
|
||||||
TableTd,
|
TableTd,
|
||||||
Checkbox,
|
Checkbox,
|
||||||
KeyValue,
|
|
||||||
Popover,
|
Popover,
|
||||||
PopoverContainer,
|
PopoverContainer,
|
||||||
PopoverTarget,
|
PopoverTarget,
|
||||||
|
@ -24,7 +23,7 @@ import {
|
||||||
DotIcon
|
DotIcon
|
||||||
} from 'joyent-ui-toolkit';
|
} from 'joyent-ui-toolkit';
|
||||||
|
|
||||||
import { Empty } from 'joyent-ui-resource-widgets';
|
import { Empty, KeyValue } from 'joyent-ui-resource-widgets';
|
||||||
|
|
||||||
const stateColor = {
|
const stateColor = {
|
||||||
QUEUED: 'primary',
|
QUEUED: 'primary',
|
||||||
|
@ -38,7 +37,11 @@ const loadingState = {
|
||||||
|
|
||||||
export const Item = ({ name, state, created, onStart, onRemove, mutating }) => (
|
export const Item = ({ name, state, created, onStart, onRemove, mutating }) => (
|
||||||
<TableTr>
|
<TableTr>
|
||||||
{!mutating ? (
|
{mutating ? (
|
||||||
|
<TableTd colSpan="5">
|
||||||
|
<StatusLoader msg={loadingState[mutating]} />
|
||||||
|
</TableTd>
|
||||||
|
) : (
|
||||||
<Fragment>
|
<Fragment>
|
||||||
<TableTd padding="0" paddingLeft={remcalc(12)} middle left>
|
<TableTd padding="0" paddingLeft={remcalc(12)} middle left>
|
||||||
<FormGroup paddingTop={remcalc(4)} name={name} field={Field}>
|
<FormGroup paddingTop={remcalc(4)} name={name} field={Field}>
|
||||||
|
@ -61,20 +64,16 @@ export const Item = ({ name, state, created, onStart, onRemove, mutating }) => (
|
||||||
<ActionsIcon />
|
<ActionsIcon />
|
||||||
</PopoverTarget>
|
</PopoverTarget>
|
||||||
<Popover placement="top">
|
<Popover placement="top">
|
||||||
<Margin vertical={2} horizontal={3}>
|
<Margin vertical="2" horizontal="3">
|
||||||
<PopoverItem onClick={onStart}>Start</PopoverItem>
|
<PopoverItem onClick={onStart}>Start</PopoverItem>
|
||||||
</Margin>
|
</Margin>
|
||||||
<Margin vertical={2} horizontal={3}>
|
<Margin vertical="2" horizontal="3">
|
||||||
<PopoverItem onClick={onRemove}>Remove</PopoverItem>
|
<PopoverItem onClick={onRemove}>Remove</PopoverItem>
|
||||||
</Margin>
|
</Margin>
|
||||||
</Popover>
|
</Popover>
|
||||||
</TableTd>
|
</TableTd>
|
||||||
</PopoverContainer>
|
</PopoverContainer>
|
||||||
</Fragment>
|
</Fragment>
|
||||||
) : (
|
|
||||||
<TableTd colSpan="5">
|
|
||||||
<StatusLoader msg={loadingState[mutating]} />
|
|
||||||
</TableTd>
|
|
||||||
)}
|
)}
|
||||||
</TableTr>
|
</TableTr>
|
||||||
);
|
);
|
||||||
|
@ -171,6 +170,6 @@ export default ({
|
||||||
: null}
|
: null}
|
||||||
</TableTbody>
|
</TableTbody>
|
||||||
</Table>
|
</Table>
|
||||||
{!snapshots.length ? <Empty borderTop>You have no Snapshots</Empty> : null}
|
{snapshots.length ? null : <Empty borderTop>You have no Snapshots</Empty>}
|
||||||
</Fragment>
|
</Fragment>
|
||||||
);
|
);
|
||||||
|
|
|
@ -1,8 +1,8 @@
|
||||||
import React from 'react';
|
import React from 'react';
|
||||||
import distanceInWordsToNow from 'date-fns/distance_in_words_to_now';
|
import distanceInWordsToNow from 'date-fns/distance_in_words_to_now';
|
||||||
import { Row, Col } from 'joyent-react-styled-flexboxgrid';
|
import { Row, Col } from 'joyent-react-styled-flexboxgrid';
|
||||||
import { default as Flex, FlexItem } from 'styled-flex-component';
|
import Flex, { FlexItem } from 'styled-flex-component';
|
||||||
import styled, { withTheme } from 'styled-components';
|
import styled from 'styled-components';
|
||||||
import { Margin, Padding } from 'styled-components-spacing';
|
import { Margin, Padding } from 'styled-components-spacing';
|
||||||
import titleCase from 'title-case';
|
import titleCase from 'title-case';
|
||||||
import get from 'lodash.get';
|
import get from 'lodash.get';
|
||||||
|
@ -100,7 +100,7 @@ export const Meta = ({
|
||||||
}) => [
|
}) => [
|
||||||
<Row middle="xs">
|
<Row middle="xs">
|
||||||
<Col xs={12}>
|
<Col xs={12}>
|
||||||
<Margin bottom={1}>
|
<Margin bottom="1">
|
||||||
<H2>
|
<H2>
|
||||||
{editingName ? (
|
{editingName ? (
|
||||||
<form onSubmit={handleSubmit}>
|
<form onSubmit={handleSubmit}>
|
||||||
|
@ -114,7 +114,7 @@ export const Meta = ({
|
||||||
/>
|
/>
|
||||||
<FormMeta />
|
<FormMeta />
|
||||||
</FormGroup>
|
</FormGroup>
|
||||||
<Margin left={1}>
|
<Margin left="1">
|
||||||
<Button
|
<Button
|
||||||
type="submit"
|
type="submit"
|
||||||
disabled={submitting}
|
disabled={submitting}
|
||||||
|
@ -138,7 +138,7 @@ export const Meta = ({
|
||||||
</Margin>
|
</Margin>
|
||||||
</Col>
|
</Col>
|
||||||
</Row>,
|
</Row>,
|
||||||
<Margin vertical={1}>
|
<Margin vertical="1">
|
||||||
<Flex>
|
<Flex>
|
||||||
<TrimedLabel>
|
<TrimedLabel>
|
||||||
{image && image.name ? titleCase(image.name) : 'Custom Image'}
|
{image && image.name ? titleCase(image.name) : 'Custom Image'}
|
||||||
|
@ -161,7 +161,7 @@ export const Meta = ({
|
||||||
{titleCase(state)}
|
{titleCase(state)}
|
||||||
</Flex>
|
</Flex>
|
||||||
</Flex>
|
</Flex>
|
||||||
<Margin top={1}>
|
<Margin top="1">
|
||||||
<Flex>
|
<Flex>
|
||||||
<Flex>
|
<Flex>
|
||||||
<GreyLabel>Created: </GreyLabel>
|
<GreyLabel>Created: </GreyLabel>
|
||||||
|
@ -177,227 +177,218 @@ export const Meta = ({
|
||||||
</Margin>
|
</Margin>
|
||||||
];
|
];
|
||||||
|
|
||||||
export default withTheme(
|
export default ({
|
||||||
({
|
instance = {},
|
||||||
instance = {},
|
starting = false,
|
||||||
starting = false,
|
stopping = false,
|
||||||
stopping = false,
|
rebooting = false,
|
||||||
rebooting = false,
|
removing = false,
|
||||||
removing = false,
|
onAction,
|
||||||
onAction,
|
...props
|
||||||
theme = {},
|
}) => (
|
||||||
...props
|
<Row>
|
||||||
}) => (
|
<Col xs={12} sm={12} md={9}>
|
||||||
<Row>
|
<Card>
|
||||||
<Col xs={12} sm={12} md={9}>
|
<CardOutlet>
|
||||||
<Card>
|
<Padding all={5}>
|
||||||
<CardOutlet>
|
<Meta {...instance} {...props} />
|
||||||
<Padding all={5}>
|
<Margin top="3">
|
||||||
<Meta {...instance} {...props} />
|
<Row between="xs">
|
||||||
<Margin top={3}>
|
<Col xs={9}>
|
||||||
<Row between="xs">
|
<Flex>
|
||||||
<Col xs={9}>
|
<FlexItem>
|
||||||
<Flex>
|
<Margin right="1">
|
||||||
<FlexItem>
|
<ButtonGroup>
|
||||||
<Margin right={1}>
|
{instance.state === 'STOPPED' ? (
|
||||||
<ButtonGroup>
|
<Button
|
||||||
{instance.state === 'STOPPED' ? (
|
type="button"
|
||||||
<Button
|
loading={starting}
|
||||||
type="button"
|
disabled={instance.state !== 'STOPPED'}
|
||||||
loading={starting}
|
onClick={() => onAction('start')}
|
||||||
disabled={instance.state !== 'STOPPED'}
|
secondary
|
||||||
onClick={() => onAction('start')}
|
bold
|
||||||
secondary
|
icon
|
||||||
bold
|
>
|
||||||
icon
|
<Margin right="2">
|
||||||
>
|
<StartIcon
|
||||||
<Margin right={2}>
|
disabled={instance.state !== 'STOPPED'}
|
||||||
<StartIcon
|
/>
|
||||||
disabled={instance.state !== 'STOPPED'}
|
</Margin>
|
||||||
/>
|
<span>Start</span>
|
||||||
</Margin>
|
</Button>
|
||||||
<span>Start</span>
|
) : (
|
||||||
</Button>
|
<Button
|
||||||
) : (
|
type="button"
|
||||||
<Button
|
loading={stopping}
|
||||||
type="button"
|
disabled={instance.state !== 'RUNNING'}
|
||||||
loading={stopping}
|
onClick={() => onAction('stop')}
|
||||||
disabled={instance.state !== 'RUNNING'}
|
secondary
|
||||||
onClick={() => onAction('stop')}
|
bold
|
||||||
secondary
|
icon
|
||||||
bold
|
>
|
||||||
icon
|
<Margin right="2">
|
||||||
>
|
<StopIcon
|
||||||
<Margin right={2}>
|
disabled={instance.state !== 'RUNNING'}
|
||||||
<StopIcon
|
/>
|
||||||
disabled={instance.state !== 'RUNNING'}
|
</Margin>
|
||||||
/>
|
<span>Stop</span>
|
||||||
</Margin>
|
</Button>
|
||||||
<span>Stop</span>
|
)}
|
||||||
</Button>
|
<PopoverButton secondary>
|
||||||
)}
|
<PopoverItem
|
||||||
<PopoverButton secondary>
|
disabled={instance.state === 'RUNNING'}
|
||||||
<PopoverItem
|
onClick={() =>
|
||||||
disabled={instance.state === 'RUNNING'}
|
instance.state === 'RUNNING'
|
||||||
onClick={() =>
|
? null
|
||||||
instance.state === 'RUNNING'
|
: onAction('start')
|
||||||
? null
|
}
|
||||||
: onAction('start')
|
>
|
||||||
}
|
Start
|
||||||
>
|
</PopoverItem>
|
||||||
Start
|
<PopoverItem
|
||||||
</PopoverItem>
|
disabled={instance.state === 'STOPPED'}
|
||||||
<PopoverItem
|
onClick={() =>
|
||||||
disabled={instance.state === 'STOPPED'}
|
instance.state === 'STOPPED'
|
||||||
onClick={() =>
|
? null
|
||||||
instance.state === 'STOPPED'
|
: onAction('reboot')
|
||||||
? null
|
}
|
||||||
: onAction('reboot')
|
>
|
||||||
}
|
Restart
|
||||||
>
|
</PopoverItem>
|
||||||
Restart
|
<PopoverItem
|
||||||
</PopoverItem>
|
disabled={instance.state === 'STOPPED'}
|
||||||
<PopoverItem
|
onClick={() =>
|
||||||
disabled={instance.state === 'STOPPED'}
|
instance.state === 'STOPPED'
|
||||||
onClick={() =>
|
? null
|
||||||
instance.state === 'STOPPED'
|
: onAction('stop')
|
||||||
? null
|
}
|
||||||
: onAction('stop')
|
>
|
||||||
}
|
Stop
|
||||||
>
|
</PopoverItem>
|
||||||
Stop
|
</PopoverButton>
|
||||||
</PopoverItem>
|
</ButtonGroup>
|
||||||
</PopoverButton>
|
</Margin>
|
||||||
</ButtonGroup>
|
</FlexItem>
|
||||||
</Margin>
|
<FlexItem>
|
||||||
</FlexItem>
|
|
||||||
<FlexItem>
|
|
||||||
<Button
|
|
||||||
href={`${GLOBAL.origin}/images/~create/${
|
|
||||||
instance.id
|
|
||||||
}`}
|
|
||||||
target="__blank"
|
|
||||||
rel="noopener noreferrer"
|
|
||||||
secondary
|
|
||||||
bold
|
|
||||||
icon
|
|
||||||
>
|
|
||||||
Create Image
|
|
||||||
</Button>
|
|
||||||
</FlexItem>
|
|
||||||
</Flex>
|
|
||||||
</Col>
|
|
||||||
<Col xs={3}>
|
|
||||||
<SmallOnly>
|
|
||||||
<Button
|
<Button
|
||||||
type="button"
|
href={`${GLOBAL.origin}/images/~create/${instance.id}`}
|
||||||
loading={removing}
|
target="__blank"
|
||||||
disabled={
|
rel="noopener noreferrer"
|
||||||
['RUNNING', 'STOPPED'].indexOf(instance.state) < 0
|
|
||||||
}
|
|
||||||
onClick={() => onAction('remove')}
|
|
||||||
secondary
|
|
||||||
small
|
|
||||||
right
|
|
||||||
icon
|
|
||||||
error
|
|
||||||
>
|
|
||||||
<Margin right={2}>
|
|
||||||
<DeleteIcon
|
|
||||||
fill={theme.red}
|
|
||||||
disabled={
|
|
||||||
['RUNNING', 'STOPPED'].indexOf(instance.state) < 0
|
|
||||||
}
|
|
||||||
/>
|
|
||||||
</Margin>
|
|
||||||
</Button>
|
|
||||||
</SmallOnly>
|
|
||||||
<Medium>
|
|
||||||
<Button
|
|
||||||
type="button"
|
|
||||||
loading={removing}
|
|
||||||
disabled={
|
|
||||||
['RUNNING', 'STOPPED'].indexOf(instance.state) < 0
|
|
||||||
}
|
|
||||||
onClick={() => onAction('remove')}
|
|
||||||
secondary
|
secondary
|
||||||
bold
|
bold
|
||||||
right
|
|
||||||
icon
|
icon
|
||||||
error
|
|
||||||
>
|
>
|
||||||
<Margin right={2}>
|
Create Image
|
||||||
<DeleteIcon
|
|
||||||
fill={
|
|
||||||
['RUNNING', 'STOPPED'].indexOf(instance.state) >=
|
|
||||||
0
|
|
||||||
? theme.red
|
|
||||||
: undefined
|
|
||||||
}
|
|
||||||
disabled={
|
|
||||||
['RUNNING', 'STOPPED'].indexOf(instance.state) < 0
|
|
||||||
}
|
|
||||||
/>
|
|
||||||
</Margin>
|
|
||||||
<span>Delete</span>
|
|
||||||
</Button>
|
</Button>
|
||||||
</Medium>
|
</FlexItem>
|
||||||
</Col>
|
</Flex>
|
||||||
</Row>
|
</Col>
|
||||||
</Margin>
|
<Col xs={3}>
|
||||||
<Margin bottom={5} top={3}>
|
<SmallOnly>
|
||||||
<Divider height={1} />
|
<Button
|
||||||
</Margin>
|
type="button"
|
||||||
<Margin bottom={3}>
|
loading={removing}
|
||||||
|
disabled={
|
||||||
|
['RUNNING', 'STOPPED'].indexOf(instance.state) < 0
|
||||||
|
}
|
||||||
|
onClick={() => onAction('remove')}
|
||||||
|
secondary
|
||||||
|
small
|
||||||
|
right
|
||||||
|
icon
|
||||||
|
error
|
||||||
|
>
|
||||||
|
<Margin right="2">
|
||||||
|
<DeleteIcon
|
||||||
|
fill="red"
|
||||||
|
disabled={
|
||||||
|
['RUNNING', 'STOPPED'].indexOf(instance.state) < 0
|
||||||
|
}
|
||||||
|
/>
|
||||||
|
</Margin>
|
||||||
|
</Button>
|
||||||
|
</SmallOnly>
|
||||||
|
<Medium>
|
||||||
|
<Button
|
||||||
|
type="button"
|
||||||
|
loading={removing}
|
||||||
|
disabled={
|
||||||
|
['RUNNING', 'STOPPED'].indexOf(instance.state) < 0
|
||||||
|
}
|
||||||
|
onClick={() => onAction('remove')}
|
||||||
|
secondary
|
||||||
|
bold
|
||||||
|
right
|
||||||
|
icon
|
||||||
|
error
|
||||||
|
>
|
||||||
|
<Margin right="2">
|
||||||
|
<DeleteIcon
|
||||||
|
fill={
|
||||||
|
['RUNNING', 'STOPPED'].indexOf(instance.state) >= 0
|
||||||
|
? 'red'
|
||||||
|
: undefined
|
||||||
|
}
|
||||||
|
disabled={
|
||||||
|
['RUNNING', 'STOPPED'].indexOf(instance.state) < 0
|
||||||
|
}
|
||||||
|
/>
|
||||||
|
</Margin>
|
||||||
|
<span>Delete</span>
|
||||||
|
</Button>
|
||||||
|
</Medium>
|
||||||
|
</Col>
|
||||||
|
</Row>
|
||||||
|
</Margin>
|
||||||
|
<Margin bottom="5" top="3">
|
||||||
|
<Divider height={1} />
|
||||||
|
</Margin>
|
||||||
|
<Margin bottom="3">
|
||||||
|
<CopiableField
|
||||||
|
text={(instance.id || '').split('-')[0]}
|
||||||
|
label="Short ID"
|
||||||
|
/>
|
||||||
|
</Margin>
|
||||||
|
<Margin bottom="3">
|
||||||
|
<CopiableField text={instance.id} label="ID" />
|
||||||
|
</Margin>
|
||||||
|
<Margin bottom="3">
|
||||||
|
<CopiableField text={instance.compute_node} label="CN UUID" />
|
||||||
|
</Margin>
|
||||||
|
{instance.image &&
|
||||||
|
instance.image.id && (
|
||||||
|
<Margin bottom="3">
|
||||||
|
<CopiableField text={instance.image.id} label="Image UUID" />
|
||||||
|
</Margin>
|
||||||
|
)}
|
||||||
|
<Margin bottom="3">
|
||||||
|
<CopiableField
|
||||||
|
text={`ssh root@${instance.primary_ip}`}
|
||||||
|
label="Login"
|
||||||
|
/>
|
||||||
|
</Margin>
|
||||||
|
{get(instance, 'ips.public', []).map((ip, i, ips) => (
|
||||||
|
<Margin bottom="3">
|
||||||
<CopiableField
|
<CopiableField
|
||||||
text={(instance.id || '').split('-')[0]}
|
key={`public-${i}`}
|
||||||
label="Short ID"
|
label={`Public IP address ${ips.length > 1 ? i + 1 : ''}`}
|
||||||
|
text={ip}
|
||||||
/>
|
/>
|
||||||
</Margin>
|
</Margin>
|
||||||
<Margin bottom={3}>
|
))}
|
||||||
<CopiableField text={instance.id} label="ID" />
|
{get(instance, 'ips.private', []).map((ip, i, ips) => (
|
||||||
</Margin>
|
<Margin bottom="3">
|
||||||
<Margin bottom={3}>
|
|
||||||
<CopiableField text={instance.compute_node} label="CN UUID" />
|
|
||||||
</Margin>
|
|
||||||
{instance.image &&
|
|
||||||
instance.image.id && (
|
|
||||||
<Margin bottom={3}>
|
|
||||||
<CopiableField
|
|
||||||
text={instance.image.id}
|
|
||||||
label="Image UUID"
|
|
||||||
/>
|
|
||||||
</Margin>
|
|
||||||
)}
|
|
||||||
<Margin bottom={3}>
|
|
||||||
<CopiableField
|
<CopiableField
|
||||||
text={`ssh root@${instance.primary_ip}`}
|
key={`private-${i}`}
|
||||||
label="Login"
|
noMargin={i === ips.length - 1}
|
||||||
|
label={`Private IP address ${ips.length > 1 ? i + 1 : ''}`}
|
||||||
|
text={ip}
|
||||||
/>
|
/>
|
||||||
</Margin>
|
</Margin>
|
||||||
{get(instance, 'ips.public', []).map((ip, i, ips) => (
|
))}
|
||||||
<Margin bottom={3}>
|
</Padding>
|
||||||
<CopiableField
|
</CardOutlet>
|
||||||
key={`public-${i}`}
|
</Card>
|
||||||
label={`Public IP address ${ips.length > 1 ? i + 1 : ''}`}
|
</Col>
|
||||||
text={ip}
|
</Row>
|
||||||
/>
|
|
||||||
</Margin>
|
|
||||||
))}
|
|
||||||
{get(instance, 'ips.private', []).map((ip, i, ips) => (
|
|
||||||
<Margin bottom={3}>
|
|
||||||
<CopiableField
|
|
||||||
key={`private-${i}`}
|
|
||||||
noMargin={i === ips.length - 1}
|
|
||||||
label={`Private IP address ${ips.length > 1 ? i + 1 : ''}`}
|
|
||||||
text={ip}
|
|
||||||
/>
|
|
||||||
</Margin>
|
|
||||||
))}
|
|
||||||
</Padding>
|
|
||||||
</CardOutlet>
|
|
||||||
</Card>
|
|
||||||
</Col>
|
|
||||||
</Row>
|
|
||||||
)
|
|
||||||
);
|
);
|
||||||
|
|
|
@ -18,7 +18,7 @@ export const Toolbar = ({
|
||||||
<Flex justifyBetween alignEnd>
|
<Flex justifyBetween alignEnd>
|
||||||
<FormGroup name="filter" field={Field}>
|
<FormGroup name="filter" field={Field}>
|
||||||
<FormLabel>{searchLabel}</FormLabel>
|
<FormLabel>{searchLabel}</FormLabel>
|
||||||
<Margin top={0.5}>
|
<Margin top="0.5">
|
||||||
<Input placeholder={searchPlaceholder} disabled={!searchable} />
|
<Input placeholder={searchPlaceholder} disabled={!searchable} />
|
||||||
</Margin>
|
</Margin>
|
||||||
</FormGroup>
|
</FormGroup>
|
||||||
|
|
|
@ -7,15 +7,9 @@ import { SubmissionError, destroy } from 'redux-form';
|
||||||
import { set, destroyAll } from 'react-redux-values';
|
import { set, destroyAll } from 'react-redux-values';
|
||||||
import intercept from 'apr-intercept';
|
import intercept from 'apr-intercept';
|
||||||
import get from 'lodash.get';
|
import get from 'lodash.get';
|
||||||
import omit from 'lodash.omit';
|
|
||||||
import uniqBy from 'lodash.uniqby';
|
|
||||||
import constantCase from 'constant-case';
|
|
||||||
|
|
||||||
import { H3, ViewContainer, Button } from 'joyent-ui-toolkit';
|
import { H3, ViewContainer, Button } from 'joyent-ui-toolkit';
|
||||||
import { Forms } from '../constants';
|
|
||||||
import { Provider as ResourceSteps } from 'joyent-ui-resource-step';
|
import { Provider as ResourceSteps } from 'joyent-ui-resource-step';
|
||||||
import parseError from '../state/parse-error';
|
|
||||||
import CreateInstanceMutation from '../graphql/create-instance.gql';
|
|
||||||
|
|
||||||
import {
|
import {
|
||||||
Name,
|
Name,
|
||||||
|
@ -27,9 +21,14 @@ import {
|
||||||
UserScript,
|
UserScript,
|
||||||
Firewall,
|
Firewall,
|
||||||
CNS,
|
CNS,
|
||||||
Affinity
|
Affinity,
|
||||||
|
generatePayload
|
||||||
} from 'joyent-ui-instance-steps';
|
} from 'joyent-ui-instance-steps';
|
||||||
|
|
||||||
|
import { Forms } from '@root/constants';
|
||||||
|
import parseError from '@state/parse-error';
|
||||||
|
import CreateInstanceMutation from '@graphql/create-instance.gql';
|
||||||
|
|
||||||
const { IC_F } = Forms;
|
const { IC_F } = Forms;
|
||||||
const names = {
|
const names = {
|
||||||
name: 'IC_NAME',
|
name: 'IC_NAME',
|
||||||
|
@ -94,7 +93,7 @@ class CreateInstance extends Component {
|
||||||
const {
|
const {
|
||||||
name,
|
name,
|
||||||
image,
|
image,
|
||||||
package: packageResult,
|
package: pkg,
|
||||||
networks,
|
networks,
|
||||||
tags,
|
tags,
|
||||||
metadata,
|
metadata,
|
||||||
|
@ -105,7 +104,7 @@ class CreateInstance extends Component {
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<ViewContainer main>
|
<ViewContainer main>
|
||||||
<Margin top={5}>
|
<Margin top="5">
|
||||||
<H3>Create Instance</H3>
|
<H3>Create Instance</H3>
|
||||||
</Margin>
|
</Margin>
|
||||||
<Padding top="5">
|
<Padding top="5">
|
||||||
|
@ -138,7 +137,7 @@ class CreateInstance extends Component {
|
||||||
next="networks"
|
next="networks"
|
||||||
saved={steps.package}
|
saved={steps.package}
|
||||||
onDefocus={handleDefocus('package')}
|
onDefocus={handleDefocus('package')}
|
||||||
preview={packageResult}
|
preview={pkg}
|
||||||
/>
|
/>
|
||||||
</Margin>
|
</Margin>
|
||||||
<Margin bottom="5">
|
<Margin bottom="5">
|
||||||
|
@ -218,7 +217,7 @@ class CreateInstance extends Component {
|
||||||
/>
|
/>
|
||||||
</Margin>
|
</Margin>
|
||||||
</ResourceSteps>
|
</ResourceSteps>
|
||||||
<Margin bottom={5}>
|
<Margin bottom="5">
|
||||||
<ReduxForm form={IC_F} onSubmit={handleSubmit}>
|
<ReduxForm form={IC_F} onSubmit={handleSubmit}>
|
||||||
{({ handleSubmit, submitting }) => (
|
{({ handleSubmit, submitting }) => (
|
||||||
<form onSubmit={handleSubmit}>
|
<form onSubmit={handleSubmit}>
|
||||||
|
@ -277,94 +276,15 @@ export default compose(
|
||||||
};
|
};
|
||||||
}),
|
}),
|
||||||
connect(null, (dispatch, { steps = {}, forms, history, createInstance }) => {
|
connect(null, (dispatch, { steps = {}, forms, history, createInstance }) => {
|
||||||
const parseAffRule = ({
|
|
||||||
conditional,
|
|
||||||
placement,
|
|
||||||
type: identity,
|
|
||||||
name,
|
|
||||||
pattern,
|
|
||||||
value
|
|
||||||
}) => {
|
|
||||||
const type = constantCase(
|
|
||||||
`${conditional}_${placement === 'same' ? 'equal' : 'not_equal'}`
|
|
||||||
);
|
|
||||||
|
|
||||||
const patterns = {
|
|
||||||
equalling: value => value,
|
|
||||||
starting: value => `/^${value}/`
|
|
||||||
};
|
|
||||||
|
|
||||||
const _name = identity === 'name' ? 'instance' : name;
|
|
||||||
const _value = patterns[pattern](type === 'name' ? name : value);
|
|
||||||
|
|
||||||
return {
|
|
||||||
type,
|
|
||||||
key: _name,
|
|
||||||
value: _value
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
return {
|
return {
|
||||||
handleDefocus: name => value => {
|
handleDefocus: name => value => {
|
||||||
return dispatch(set({ name: names[name], value }));
|
return dispatch(set({ name: names[name], value }));
|
||||||
},
|
},
|
||||||
|
|
||||||
handleSubmit: async () => {
|
handleSubmit: async () => {
|
||||||
const _affinity = steps.affinity ? parseAffRule(steps.affinity) : null;
|
|
||||||
const _name = steps.name && steps.name.name.toLowerCase();
|
|
||||||
|
|
||||||
const _metadata =
|
|
||||||
(steps.metadata && steps.metadata.map(a => omit(a, 'open'))) || [];
|
|
||||||
|
|
||||||
const _tags =
|
|
||||||
(steps.tags &&
|
|
||||||
uniqBy(steps.tags.map(a => omit(a, 'expanded')), 'name').map(a =>
|
|
||||||
omit(a, 'expanded')
|
|
||||||
)) ||
|
|
||||||
[];
|
|
||||||
|
|
||||||
const _networks = steps.networks && steps.networks.map(({ id }) => id);
|
|
||||||
|
|
||||||
if (steps['user-script'] && steps['user-script'].lines) {
|
|
||||||
_metadata.push({
|
|
||||||
name: 'user-script',
|
|
||||||
value: steps['user-script'].script
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
if (steps.cns) {
|
|
||||||
_tags.push({
|
|
||||||
name: 'triton.cns.disable',
|
|
||||||
value: !steps.cns.cnsEnabled
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
if (
|
|
||||||
steps.cns &&
|
|
||||||
(steps.cns.serviceNames &&
|
|
||||||
steps.cns.serviceNames.length &&
|
|
||||||
steps.cns.cnsEnabled)
|
|
||||||
) {
|
|
||||||
_tags.push({
|
|
||||||
name: 'triton.cns.services',
|
|
||||||
value: steps.cns.serviceNames.join(',')
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
const [err, res] = await intercept(
|
const [err, res] = await intercept(
|
||||||
createInstance({
|
createInstance({
|
||||||
variables: {
|
variables: generatePayload(steps)
|
||||||
name: _name,
|
|
||||||
package: steps.package.id,
|
|
||||||
image: steps.image.id,
|
|
||||||
affinity: _affinity ? [_affinity] : [],
|
|
||||||
metadata: _metadata,
|
|
||||||
tags: _tags,
|
|
||||||
firewall_enabled: steps.firewall
|
|
||||||
? steps.firewall.enabled
|
|
||||||
: undefined,
|
|
||||||
networks: _networks && _networks.length ? _networks : undefined
|
|
||||||
}
|
|
||||||
})
|
})
|
||||||
);
|
);
|
||||||
|
|
||||||
|
|
File diff suppressed because it is too large
Load Diff
|
@ -140,6 +140,7 @@ Array [
|
||||||
margin: 0;
|
margin: 0;
|
||||||
line-height: 1.5rem;
|
line-height: 1.5rem;
|
||||||
font-size: 0.9375rem;
|
font-size: 0.9375rem;
|
||||||
|
margin: 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
.c19 {
|
.c19 {
|
||||||
|
@ -983,6 +984,7 @@ Array [
|
||||||
margin: 0;
|
margin: 0;
|
||||||
line-height: 1.5rem;
|
line-height: 1.5rem;
|
||||||
font-size: 0.9375rem;
|
font-size: 0.9375rem;
|
||||||
|
margin: 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
.c19 {
|
.c19 {
|
||||||
|
@ -1888,6 +1890,7 @@ Array [
|
||||||
margin: 0;
|
margin: 0;
|
||||||
line-height: 1.5rem;
|
line-height: 1.5rem;
|
||||||
font-size: 0.9375rem;
|
font-size: 0.9375rem;
|
||||||
|
margin: 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
.c19 {
|
.c19 {
|
||||||
|
@ -2731,6 +2734,7 @@ Array [
|
||||||
margin: 0;
|
margin: 0;
|
||||||
line-height: 1.5rem;
|
line-height: 1.5rem;
|
||||||
font-size: 0.9375rem;
|
font-size: 0.9375rem;
|
||||||
|
margin: 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
.c19 {
|
.c19 {
|
||||||
|
@ -3561,6 +3565,7 @@ Array [
|
||||||
margin: 0;
|
margin: 0;
|
||||||
line-height: 1.5rem;
|
line-height: 1.5rem;
|
||||||
font-size: 0.9375rem;
|
font-size: 0.9375rem;
|
||||||
|
margin: 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
.c7 {
|
.c7 {
|
||||||
|
@ -3840,6 +3845,7 @@ Array [
|
||||||
margin: 0;
|
margin: 0;
|
||||||
line-height: 1.5rem;
|
line-height: 1.5rem;
|
||||||
font-size: 0.9375rem;
|
font-size: 0.9375rem;
|
||||||
|
margin: 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
.c7 {
|
.c7 {
|
||||||
|
@ -4202,6 +4208,7 @@ exports[`renders <Firewall loadingError /> without throwing 1`] = `
|
||||||
margin: 0;
|
margin: 0;
|
||||||
line-height: 1.5rem;
|
line-height: 1.5rem;
|
||||||
font-size: 0.9375rem;
|
font-size: 0.9375rem;
|
||||||
|
margin: 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
.c25 {
|
.c25 {
|
||||||
|
@ -4266,40 +4273,11 @@ exports[`renders <Firewall loadingError /> without throwing 1`] = `
|
||||||
.c11 {
|
.c11 {
|
||||||
margin: 0;
|
margin: 0;
|
||||||
color: rgb(73,73,73);
|
color: rgb(73,73,73);
|
||||||
font-weight: 600;
|
font-weight: 400;
|
||||||
line-height: 1.5rem;
|
line-height: 1.5rem;
|
||||||
font-size: 0.9375rem;
|
font-size: 0.9375rem;
|
||||||
}
|
}
|
||||||
|
|
||||||
.c8 {
|
|
||||||
display: -webkit-box;
|
|
||||||
display: -webkit-flex;
|
|
||||||
display: -ms-flexbox;
|
|
||||||
display: flex;
|
|
||||||
position: relative;
|
|
||||||
background-color: rgb(255,255,255);
|
|
||||||
box-shadow: 0 0.125rem 0 0 rgba(0,0,0,0.05);
|
|
||||||
border: 0.0625rem solid rgb(216,216,216);
|
|
||||||
border-radius: 0.1875rem;
|
|
||||||
width: 100%;
|
|
||||||
}
|
|
||||||
|
|
||||||
.c9 {
|
|
||||||
border-radius: 0.1875rem 0 0 0.1875rem;
|
|
||||||
min-width: 0.75rem;
|
|
||||||
background-color: rgb(0,152,88);
|
|
||||||
background-color: rgb(210,67,58);
|
|
||||||
}
|
|
||||||
|
|
||||||
.c10 {
|
|
||||||
padding: 1.125rem 1.125rem;
|
|
||||||
}
|
|
||||||
|
|
||||||
.c12 {
|
|
||||||
line-height: 0.875rem;
|
|
||||||
font-size: 0.8125rem;
|
|
||||||
}
|
|
||||||
|
|
||||||
.c29 {
|
.c29 {
|
||||||
box-sizing: content-box;
|
box-sizing: content-box;
|
||||||
display: -webkit-box;
|
display: -webkit-box;
|
||||||
|
@ -4457,6 +4435,35 @@ exports[`renders <Firewall loadingError /> without throwing 1`] = `
|
||||||
cursor: pointer;
|
cursor: pointer;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.c8 {
|
||||||
|
display: -webkit-box;
|
||||||
|
display: -webkit-flex;
|
||||||
|
display: -ms-flexbox;
|
||||||
|
display: flex;
|
||||||
|
position: relative;
|
||||||
|
background-color: rgb(255,255,255);
|
||||||
|
box-shadow: 0 0.125rem 0 0 rgba(0,0,0,0.05);
|
||||||
|
border: 0.0625rem solid rgb(216,216,216);
|
||||||
|
border-radius: 0.1875rem;
|
||||||
|
width: 100%;
|
||||||
|
}
|
||||||
|
|
||||||
|
.c9 {
|
||||||
|
border-radius: 0.1875rem 0 0 0.1875rem;
|
||||||
|
min-width: 0.75rem;
|
||||||
|
background-color: rgb(0,152,88);
|
||||||
|
background-color: rgb(210,67,58);
|
||||||
|
}
|
||||||
|
|
||||||
|
.c10 {
|
||||||
|
padding: 1.125rem 1.125rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
.c12 {
|
||||||
|
line-height: 0.875rem;
|
||||||
|
font-size: 0.8125rem;
|
||||||
|
}
|
||||||
|
|
||||||
.c33 {
|
.c33 {
|
||||||
color: rgb(151,151,151);
|
color: rgb(151,151,151);
|
||||||
text-align: center;
|
text-align: center;
|
||||||
|
@ -5114,6 +5121,7 @@ exports[`renders <Firewall mutationError /> without throwing 1`] = `
|
||||||
margin: 0;
|
margin: 0;
|
||||||
line-height: 1.5rem;
|
line-height: 1.5rem;
|
||||||
font-size: 0.9375rem;
|
font-size: 0.9375rem;
|
||||||
|
margin: 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
.c25 {
|
.c25 {
|
||||||
|
@ -5178,40 +5186,11 @@ exports[`renders <Firewall mutationError /> without throwing 1`] = `
|
||||||
.c11 {
|
.c11 {
|
||||||
margin: 0;
|
margin: 0;
|
||||||
color: rgb(73,73,73);
|
color: rgb(73,73,73);
|
||||||
font-weight: 600;
|
font-weight: 400;
|
||||||
line-height: 1.5rem;
|
line-height: 1.5rem;
|
||||||
font-size: 0.9375rem;
|
font-size: 0.9375rem;
|
||||||
}
|
}
|
||||||
|
|
||||||
.c8 {
|
|
||||||
display: -webkit-box;
|
|
||||||
display: -webkit-flex;
|
|
||||||
display: -ms-flexbox;
|
|
||||||
display: flex;
|
|
||||||
position: relative;
|
|
||||||
background-color: rgb(255,255,255);
|
|
||||||
box-shadow: 0 0.125rem 0 0 rgba(0,0,0,0.05);
|
|
||||||
border: 0.0625rem solid rgb(216,216,216);
|
|
||||||
border-radius: 0.1875rem;
|
|
||||||
width: 100%;
|
|
||||||
}
|
|
||||||
|
|
||||||
.c9 {
|
|
||||||
border-radius: 0.1875rem 0 0 0.1875rem;
|
|
||||||
min-width: 0.75rem;
|
|
||||||
background-color: rgb(0,152,88);
|
|
||||||
background-color: rgb(210,67,58);
|
|
||||||
}
|
|
||||||
|
|
||||||
.c10 {
|
|
||||||
padding: 1.125rem 1.125rem;
|
|
||||||
}
|
|
||||||
|
|
||||||
.c12 {
|
|
||||||
line-height: 0.875rem;
|
|
||||||
font-size: 0.8125rem;
|
|
||||||
}
|
|
||||||
|
|
||||||
.c29 {
|
.c29 {
|
||||||
box-sizing: content-box;
|
box-sizing: content-box;
|
||||||
display: -webkit-box;
|
display: -webkit-box;
|
||||||
|
@ -5369,6 +5348,35 @@ exports[`renders <Firewall mutationError /> without throwing 1`] = `
|
||||||
cursor: pointer;
|
cursor: pointer;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.c8 {
|
||||||
|
display: -webkit-box;
|
||||||
|
display: -webkit-flex;
|
||||||
|
display: -ms-flexbox;
|
||||||
|
display: flex;
|
||||||
|
position: relative;
|
||||||
|
background-color: rgb(255,255,255);
|
||||||
|
box-shadow: 0 0.125rem 0 0 rgba(0,0,0,0.05);
|
||||||
|
border: 0.0625rem solid rgb(216,216,216);
|
||||||
|
border-radius: 0.1875rem;
|
||||||
|
width: 100%;
|
||||||
|
}
|
||||||
|
|
||||||
|
.c9 {
|
||||||
|
border-radius: 0.1875rem 0 0 0.1875rem;
|
||||||
|
min-width: 0.75rem;
|
||||||
|
background-color: rgb(0,152,88);
|
||||||
|
background-color: rgb(210,67,58);
|
||||||
|
}
|
||||||
|
|
||||||
|
.c10 {
|
||||||
|
padding: 1.125rem 1.125rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
.c12 {
|
||||||
|
line-height: 0.875rem;
|
||||||
|
font-size: 0.8125rem;
|
||||||
|
}
|
||||||
|
|
||||||
.c33 {
|
.c33 {
|
||||||
color: rgb(151,151,151);
|
color: rgb(151,151,151);
|
||||||
text-align: center;
|
text-align: center;
|
||||||
|
@ -5980,6 +5988,7 @@ Array [
|
||||||
margin: 0;
|
margin: 0;
|
||||||
line-height: 1.5rem;
|
line-height: 1.5rem;
|
||||||
font-size: 0.9375rem;
|
font-size: 0.9375rem;
|
||||||
|
margin: 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
.c19 {
|
.c19 {
|
||||||
|
@ -6429,6 +6438,7 @@ Array [
|
||||||
margin: 0;
|
margin: 0;
|
||||||
line-height: 1.5rem;
|
line-height: 1.5rem;
|
||||||
font-size: 0.9375rem;
|
font-size: 0.9375rem;
|
||||||
|
margin: 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
.c19 {
|
.c19 {
|
||||||
|
@ -6960,6 +6970,7 @@ Array [
|
||||||
margin: 0;
|
margin: 0;
|
||||||
line-height: 1.5rem;
|
line-height: 1.5rem;
|
||||||
font-size: 0.9375rem;
|
font-size: 0.9375rem;
|
||||||
|
margin: 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
.c19 {
|
.c19 {
|
||||||
|
@ -7824,6 +7835,7 @@ Array [
|
||||||
margin: 0;
|
margin: 0;
|
||||||
line-height: 1.5rem;
|
line-height: 1.5rem;
|
||||||
font-size: 0.9375rem;
|
font-size: 0.9375rem;
|
||||||
|
margin: 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
.c19 {
|
.c19 {
|
||||||
|
@ -8273,6 +8285,7 @@ Array [
|
||||||
margin: 0;
|
margin: 0;
|
||||||
line-height: 1.5rem;
|
line-height: 1.5rem;
|
||||||
font-size: 0.9375rem;
|
font-size: 0.9375rem;
|
||||||
|
margin: 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
.c19 {
|
.c19 {
|
||||||
|
@ -8804,6 +8817,7 @@ Array [
|
||||||
margin: 0;
|
margin: 0;
|
||||||
line-height: 1.5rem;
|
line-height: 1.5rem;
|
||||||
font-size: 0.9375rem;
|
font-size: 0.9375rem;
|
||||||
|
margin: 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
.c19 {
|
.c19 {
|
||||||
|
|
File diff suppressed because it is too large
Load Diff
|
@ -9,7 +9,7 @@ exports[`renders <Metadata /> without throwing 1`] = `
|
||||||
margin-top: 0.1875rem;
|
margin-top: 0.1875rem;
|
||||||
}
|
}
|
||||||
|
|
||||||
.c17 {
|
.c18 {
|
||||||
margin-top: 1.875rem;
|
margin-top: 1.875rem;
|
||||||
margin-bottom: 1.125rem;
|
margin-bottom: 1.125rem;
|
||||||
}
|
}
|
||||||
|
@ -108,7 +108,7 @@ exports[`renders <Metadata /> without throwing 1`] = `
|
||||||
|
|
||||||
.c10:hover {
|
.c10:hover {
|
||||||
background-color: rgb(72,83,217);
|
background-color: rgb(72,83,217);
|
||||||
border: solid 0.0625rem rgb(45,56,132);
|
border-color: rgb(45,56,132);
|
||||||
}
|
}
|
||||||
|
|
||||||
.c10:active,
|
.c10:active,
|
||||||
|
@ -166,7 +166,7 @@ exports[`renders <Metadata /> without throwing 1`] = `
|
||||||
padding-bottom: 1.125rem;
|
padding-bottom: 1.125rem;
|
||||||
}
|
}
|
||||||
|
|
||||||
.c18 {
|
.c19 {
|
||||||
margin: 0;
|
margin: 0;
|
||||||
color: rgb(73,73,73);
|
color: rgb(73,73,73);
|
||||||
font-weight: normal;
|
font-weight: normal;
|
||||||
|
@ -177,12 +177,21 @@ exports[`renders <Metadata /> without throwing 1`] = `
|
||||||
.c14 {
|
.c14 {
|
||||||
height: 1px;
|
height: 1px;
|
||||||
background-color: rgb(216,216,216);
|
background-color: rgb(216,216,216);
|
||||||
|
height: 0.6875rem;
|
||||||
background-color: transparent;
|
background-color: transparent;
|
||||||
}
|
}
|
||||||
|
|
||||||
.c16 {
|
.c16 {
|
||||||
height: 1px;
|
height: 1px;
|
||||||
background-color: rgb(216,216,216);
|
background-color: rgb(216,216,216);
|
||||||
|
height: 0.0625rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
.c17 {
|
||||||
|
height: 1px;
|
||||||
|
background-color: rgb(216,216,216);
|
||||||
|
height: 1.5rem;
|
||||||
|
background-color: transparent;
|
||||||
}
|
}
|
||||||
|
|
||||||
.c3 {
|
.c3 {
|
||||||
|
@ -410,14 +419,14 @@ exports[`renders <Metadata /> without throwing 1`] = `
|
||||||
height="0.0625rem"
|
height="0.0625rem"
|
||||||
/>
|
/>
|
||||||
<div
|
<div
|
||||||
className="c14 c15"
|
className="c17 c15"
|
||||||
height="1.5rem"
|
height="1.5rem"
|
||||||
/>
|
/>
|
||||||
<div
|
<div
|
||||||
className="c17"
|
className="c18"
|
||||||
>
|
>
|
||||||
<h3
|
<h3
|
||||||
className="c18"
|
className="c19"
|
||||||
>
|
>
|
||||||
0
|
0
|
||||||
key-value pair
|
key-value pair
|
||||||
|
@ -436,12 +445,12 @@ exports[`renders <Metadata addOpen /> without throwing 1`] = `
|
||||||
margin-top: 0.1875rem;
|
margin-top: 0.1875rem;
|
||||||
}
|
}
|
||||||
|
|
||||||
.c17 {
|
.c18 {
|
||||||
margin-top: 1.875rem;
|
margin-top: 1.875rem;
|
||||||
margin-bottom: 1.125rem;
|
margin-bottom: 1.125rem;
|
||||||
}
|
}
|
||||||
|
|
||||||
.c19 {
|
.c20 {
|
||||||
margin-bottom: 1.125rem;
|
margin-bottom: 1.125rem;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -559,7 +568,7 @@ exports[`renders <Metadata addOpen /> without throwing 1`] = `
|
||||||
|
|
||||||
.c10:hover {
|
.c10:hover {
|
||||||
background-color: rgb(72,83,217);
|
background-color: rgb(72,83,217);
|
||||||
border: solid 0.0625rem rgb(45,56,132);
|
border-color: rgb(45,56,132);
|
||||||
}
|
}
|
||||||
|
|
||||||
.c10:active,
|
.c10:active,
|
||||||
|
@ -629,7 +638,7 @@ exports[`renders <Metadata addOpen /> without throwing 1`] = `
|
||||||
|
|
||||||
.c42:hover {
|
.c42:hover {
|
||||||
background-color: rgb(72,83,217);
|
background-color: rgb(72,83,217);
|
||||||
border: solid 0.0625rem rgb(45,56,132);
|
border-color: rgb(45,56,132);
|
||||||
}
|
}
|
||||||
|
|
||||||
.c42:active,
|
.c42:active,
|
||||||
|
@ -717,7 +726,7 @@ exports[`renders <Metadata addOpen /> without throwing 1`] = `
|
||||||
|
|
||||||
.c43:hover {
|
.c43:hover {
|
||||||
background-color: rgb(72,83,217);
|
background-color: rgb(72,83,217);
|
||||||
border: solid 0.0625rem rgb(45,56,132);
|
border-color: rgb(45,56,132);
|
||||||
}
|
}
|
||||||
|
|
||||||
.c43:active,
|
.c43:active,
|
||||||
|
@ -817,7 +826,7 @@ exports[`renders <Metadata addOpen /> without throwing 1`] = `
|
||||||
|
|
||||||
.c45:hover {
|
.c45:hover {
|
||||||
background-color: rgb(72,83,217);
|
background-color: rgb(72,83,217);
|
||||||
border: solid 0.0625rem rgb(45,56,132);
|
border-color: rgb(45,56,132);
|
||||||
}
|
}
|
||||||
|
|
||||||
.c45:active,
|
.c45:active,
|
||||||
|
@ -960,7 +969,7 @@ exports[`renders <Metadata addOpen /> without throwing 1`] = `
|
||||||
padding-bottom: 1.125rem;
|
padding-bottom: 1.125rem;
|
||||||
}
|
}
|
||||||
|
|
||||||
.c18 {
|
.c19 {
|
||||||
margin: 0;
|
margin: 0;
|
||||||
color: rgb(73,73,73);
|
color: rgb(73,73,73);
|
||||||
font-weight: normal;
|
font-weight: normal;
|
||||||
|
@ -971,7 +980,7 @@ exports[`renders <Metadata addOpen /> without throwing 1`] = `
|
||||||
.c30 {
|
.c30 {
|
||||||
margin: 0;
|
margin: 0;
|
||||||
color: rgb(73,73,73);
|
color: rgb(73,73,73);
|
||||||
font-weight: 600;
|
font-weight: 400;
|
||||||
line-height: 1.5rem;
|
line-height: 1.5rem;
|
||||||
font-size: 0.9375rem;
|
font-size: 0.9375rem;
|
||||||
}
|
}
|
||||||
|
@ -979,68 +988,21 @@ exports[`renders <Metadata addOpen /> without throwing 1`] = `
|
||||||
.c14 {
|
.c14 {
|
||||||
height: 1px;
|
height: 1px;
|
||||||
background-color: rgb(216,216,216);
|
background-color: rgb(216,216,216);
|
||||||
|
height: 0.6875rem;
|
||||||
background-color: transparent;
|
background-color: transparent;
|
||||||
}
|
}
|
||||||
|
|
||||||
.c16 {
|
.c16 {
|
||||||
height: 1px;
|
height: 1px;
|
||||||
background-color: rgb(216,216,216);
|
background-color: rgb(216,216,216);
|
||||||
|
height: 0.0625rem;
|
||||||
}
|
}
|
||||||
|
|
||||||
.c3 {
|
.c17 {
|
||||||
display: -webkit-box;
|
height: 1px;
|
||||||
display: -webkit-flex;
|
background-color: rgb(216,216,216);
|
||||||
display: -ms-flexbox;
|
height: 1.5rem;
|
||||||
display: flex;
|
background-color: transparent;
|
||||||
-webkit-flex-direction: row;
|
|
||||||
-ms-flex-direction: row;
|
|
||||||
flex-direction: row;
|
|
||||||
-webkit-flex-wrap: nowrap;
|
|
||||||
-ms-flex-wrap: nowrap;
|
|
||||||
flex-wrap: nowrap;
|
|
||||||
-webkit-box-pack: start;
|
|
||||||
-webkit-justify-content: flex-start;
|
|
||||||
-ms-flex-pack: start;
|
|
||||||
justify-content: flex-start;
|
|
||||||
-webkit-align-content: stretch;
|
|
||||||
-ms-flex-line-pack: stretch;
|
|
||||||
align-content: stretch;
|
|
||||||
-webkit-box-pack: justify;
|
|
||||||
-webkit-justify-content: space-between;
|
|
||||||
-ms-flex-pack: justify;
|
|
||||||
justify-content: space-between;
|
|
||||||
-webkit-align-items: flex-end;
|
|
||||||
-webkit-box-align: flex-end;
|
|
||||||
-ms-flex-align: flex-end;
|
|
||||||
align-items: flex-end;
|
|
||||||
}
|
|
||||||
|
|
||||||
.c27 {
|
|
||||||
display: -webkit-box;
|
|
||||||
display: -webkit-flex;
|
|
||||||
display: -ms-flexbox;
|
|
||||||
display: flex;
|
|
||||||
-webkit-flex-direction: row;
|
|
||||||
-ms-flex-direction: row;
|
|
||||||
flex-direction: row;
|
|
||||||
-webkit-flex-wrap: nowrap;
|
|
||||||
-ms-flex-wrap: nowrap;
|
|
||||||
flex-wrap: nowrap;
|
|
||||||
-webkit-box-pack: start;
|
|
||||||
-webkit-justify-content: flex-start;
|
|
||||||
-ms-flex-pack: start;
|
|
||||||
justify-content: flex-start;
|
|
||||||
-webkit-align-content: stretch;
|
|
||||||
-ms-flex-line-pack: stretch;
|
|
||||||
align-content: stretch;
|
|
||||||
-webkit-box-pack: justify;
|
|
||||||
-webkit-justify-content: space-between;
|
|
||||||
-ms-flex-pack: justify;
|
|
||||||
justify-content: space-between;
|
|
||||||
-webkit-align-items: center;
|
|
||||||
-webkit-box-align: center;
|
|
||||||
-ms-flex-align: center;
|
|
||||||
align-items: center;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
.c21 {
|
.c21 {
|
||||||
|
@ -1177,6 +1139,62 @@ exports[`renders <Metadata addOpen /> without throwing 1`] = `
|
||||||
color: inherit;
|
color: inherit;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.c3 {
|
||||||
|
display: -webkit-box;
|
||||||
|
display: -webkit-flex;
|
||||||
|
display: -ms-flexbox;
|
||||||
|
display: flex;
|
||||||
|
-webkit-flex-direction: row;
|
||||||
|
-ms-flex-direction: row;
|
||||||
|
flex-direction: row;
|
||||||
|
-webkit-flex-wrap: nowrap;
|
||||||
|
-ms-flex-wrap: nowrap;
|
||||||
|
flex-wrap: nowrap;
|
||||||
|
-webkit-box-pack: start;
|
||||||
|
-webkit-justify-content: flex-start;
|
||||||
|
-ms-flex-pack: start;
|
||||||
|
justify-content: flex-start;
|
||||||
|
-webkit-align-content: stretch;
|
||||||
|
-ms-flex-line-pack: stretch;
|
||||||
|
align-content: stretch;
|
||||||
|
-webkit-box-pack: justify;
|
||||||
|
-webkit-justify-content: space-between;
|
||||||
|
-ms-flex-pack: justify;
|
||||||
|
justify-content: space-between;
|
||||||
|
-webkit-align-items: flex-end;
|
||||||
|
-webkit-box-align: flex-end;
|
||||||
|
-ms-flex-align: flex-end;
|
||||||
|
align-items: flex-end;
|
||||||
|
}
|
||||||
|
|
||||||
|
.c27 {
|
||||||
|
display: -webkit-box;
|
||||||
|
display: -webkit-flex;
|
||||||
|
display: -ms-flexbox;
|
||||||
|
display: flex;
|
||||||
|
-webkit-flex-direction: row;
|
||||||
|
-ms-flex-direction: row;
|
||||||
|
flex-direction: row;
|
||||||
|
-webkit-flex-wrap: nowrap;
|
||||||
|
-ms-flex-wrap: nowrap;
|
||||||
|
flex-wrap: nowrap;
|
||||||
|
-webkit-box-pack: start;
|
||||||
|
-webkit-justify-content: flex-start;
|
||||||
|
-ms-flex-pack: start;
|
||||||
|
justify-content: flex-start;
|
||||||
|
-webkit-align-content: stretch;
|
||||||
|
-ms-flex-line-pack: stretch;
|
||||||
|
align-content: stretch;
|
||||||
|
-webkit-box-pack: justify;
|
||||||
|
-webkit-justify-content: space-between;
|
||||||
|
-ms-flex-pack: justify;
|
||||||
|
justify-content: space-between;
|
||||||
|
-webkit-align-items: center;
|
||||||
|
-webkit-box-align: center;
|
||||||
|
-ms-flex-align: center;
|
||||||
|
align-items: center;
|
||||||
|
}
|
||||||
|
|
||||||
.c4 {
|
.c4 {
|
||||||
display: inline-block;
|
display: inline-block;
|
||||||
padding: 0;
|
padding: 0;
|
||||||
|
@ -1375,10 +1393,6 @@ exports[`renders <Metadata addOpen /> without throwing 1`] = `
|
||||||
font-size: 0.8125rem;
|
font-size: 0.8125rem;
|
||||||
}
|
}
|
||||||
|
|
||||||
.c20 {
|
|
||||||
margin-bottom: 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
.c22 {
|
.c22 {
|
||||||
border-top: 0;
|
border-top: 0;
|
||||||
border-left: 0;
|
border-left: 0;
|
||||||
|
@ -1548,14 +1562,14 @@ exports[`renders <Metadata addOpen /> without throwing 1`] = `
|
||||||
height="0.0625rem"
|
height="0.0625rem"
|
||||||
/>
|
/>
|
||||||
<div
|
<div
|
||||||
className="c14 c15"
|
className="c17 c15"
|
||||||
height="1.5rem"
|
height="1.5rem"
|
||||||
/>
|
/>
|
||||||
<div
|
<div
|
||||||
className="c17"
|
className="c18"
|
||||||
>
|
>
|
||||||
<h3
|
<h3
|
||||||
className="c18"
|
className="c19"
|
||||||
>
|
>
|
||||||
0
|
0
|
||||||
key-value pair
|
key-value pair
|
||||||
|
@ -1563,10 +1577,9 @@ exports[`renders <Metadata addOpen /> without throwing 1`] = `
|
||||||
</h3>
|
</h3>
|
||||||
</div>
|
</div>
|
||||||
<div
|
<div
|
||||||
className="c19"
|
className="c20"
|
||||||
>
|
>
|
||||||
<form
|
<form
|
||||||
className="c20"
|
|
||||||
onSubmit={undefined}
|
onSubmit={undefined}
|
||||||
>
|
>
|
||||||
<div
|
<div
|
||||||
|
@ -1646,10 +1659,6 @@ exports[`renders <Metadata addOpen /> without throwing 1`] = `
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div
|
|
||||||
className="c14 c15"
|
|
||||||
height="0.75rem"
|
|
||||||
/>
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div
|
<div
|
||||||
|
@ -1691,10 +1700,6 @@ exports[`renders <Metadata addOpen /> without throwing 1`] = `
|
||||||
/>
|
/>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div
|
|
||||||
className="c14 c15"
|
|
||||||
height="0.75rem"
|
|
||||||
/>
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div
|
<div
|
||||||
|
@ -1789,7 +1794,7 @@ exports[`renders <Metadata error /> without throwing 1`] = `
|
||||||
margin-top: 0.1875rem;
|
margin-top: 0.1875rem;
|
||||||
}
|
}
|
||||||
|
|
||||||
.c23 {
|
.c24 {
|
||||||
margin-top: 1.875rem;
|
margin-top: 1.875rem;
|
||||||
margin-bottom: 1.125rem;
|
margin-bottom: 1.125rem;
|
||||||
}
|
}
|
||||||
|
@ -1821,11 +1826,12 @@ exports[`renders <Metadata error /> without throwing 1`] = `
|
||||||
outline: 0.0625rem dotted ButtonText;
|
outline: 0.0625rem dotted ButtonText;
|
||||||
}
|
}
|
||||||
|
|
||||||
.c22 {
|
.c23 {
|
||||||
color: rgb(73,73,73);
|
color: rgb(73,73,73);
|
||||||
margin: 0;
|
margin: 0;
|
||||||
line-height: 1.5rem;
|
line-height: 1.5rem;
|
||||||
font-size: 0.9375rem;
|
font-size: 0.9375rem;
|
||||||
|
margin: 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
.c12 {
|
.c12 {
|
||||||
|
@ -1895,7 +1901,7 @@ exports[`renders <Metadata error /> without throwing 1`] = `
|
||||||
|
|
||||||
.c10:hover {
|
.c10:hover {
|
||||||
background-color: rgb(72,83,217);
|
background-color: rgb(72,83,217);
|
||||||
border: solid 0.0625rem rgb(45,56,132);
|
border-color: rgb(45,56,132);
|
||||||
}
|
}
|
||||||
|
|
||||||
.c10:active,
|
.c10:active,
|
||||||
|
@ -1953,7 +1959,7 @@ exports[`renders <Metadata error /> without throwing 1`] = `
|
||||||
padding-bottom: 1.125rem;
|
padding-bottom: 1.125rem;
|
||||||
}
|
}
|
||||||
|
|
||||||
.c24 {
|
.c25 {
|
||||||
margin: 0;
|
margin: 0;
|
||||||
color: rgb(73,73,73);
|
color: rgb(73,73,73);
|
||||||
font-weight: normal;
|
font-weight: normal;
|
||||||
|
@ -1961,10 +1967,10 @@ exports[`renders <Metadata error /> without throwing 1`] = `
|
||||||
font-size: 1.3125rem;
|
font-size: 1.3125rem;
|
||||||
}
|
}
|
||||||
|
|
||||||
.c20 {
|
.c21 {
|
||||||
margin: 0;
|
margin: 0;
|
||||||
color: rgb(73,73,73);
|
color: rgb(73,73,73);
|
||||||
font-weight: 600;
|
font-weight: 400;
|
||||||
line-height: 1.5rem;
|
line-height: 1.5rem;
|
||||||
font-size: 0.9375rem;
|
font-size: 0.9375rem;
|
||||||
}
|
}
|
||||||
|
@ -1972,12 +1978,21 @@ exports[`renders <Metadata error /> without throwing 1`] = `
|
||||||
.c14 {
|
.c14 {
|
||||||
height: 1px;
|
height: 1px;
|
||||||
background-color: rgb(216,216,216);
|
background-color: rgb(216,216,216);
|
||||||
|
height: 0.6875rem;
|
||||||
background-color: transparent;
|
background-color: transparent;
|
||||||
}
|
}
|
||||||
|
|
||||||
.c16 {
|
.c16 {
|
||||||
height: 1px;
|
height: 1px;
|
||||||
background-color: rgb(216,216,216);
|
background-color: rgb(216,216,216);
|
||||||
|
height: 0.0625rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
.c17 {
|
||||||
|
height: 1px;
|
||||||
|
background-color: rgb(216,216,216);
|
||||||
|
height: 1.5rem;
|
||||||
|
background-color: transparent;
|
||||||
}
|
}
|
||||||
|
|
||||||
.c3 {
|
.c3 {
|
||||||
|
@ -2008,35 +2023,6 @@ exports[`renders <Metadata error /> without throwing 1`] = `
|
||||||
align-items: flex-end;
|
align-items: flex-end;
|
||||||
}
|
}
|
||||||
|
|
||||||
.c17 {
|
|
||||||
display: -webkit-box;
|
|
||||||
display: -webkit-flex;
|
|
||||||
display: -ms-flexbox;
|
|
||||||
display: flex;
|
|
||||||
position: relative;
|
|
||||||
background-color: rgb(255,255,255);
|
|
||||||
box-shadow: 0 0.125rem 0 0 rgba(0,0,0,0.05);
|
|
||||||
border: 0.0625rem solid rgb(216,216,216);
|
|
||||||
border-radius: 0.1875rem;
|
|
||||||
width: 100%;
|
|
||||||
}
|
|
||||||
|
|
||||||
.c18 {
|
|
||||||
border-radius: 0.1875rem 0 0 0.1875rem;
|
|
||||||
min-width: 0.75rem;
|
|
||||||
background-color: rgb(0,152,88);
|
|
||||||
background-color: rgb(210,67,58);
|
|
||||||
}
|
|
||||||
|
|
||||||
.c19 {
|
|
||||||
padding: 1.125rem 1.125rem;
|
|
||||||
}
|
|
||||||
|
|
||||||
.c21 {
|
|
||||||
line-height: 0.875rem;
|
|
||||||
font-size: 0.8125rem;
|
|
||||||
}
|
|
||||||
|
|
||||||
.c4 {
|
.c4 {
|
||||||
display: inline-block;
|
display: inline-block;
|
||||||
padding: 0;
|
padding: 0;
|
||||||
|
@ -2129,6 +2115,35 @@ exports[`renders <Metadata error /> without throwing 1`] = `
|
||||||
font-size: 0.8125rem;
|
font-size: 0.8125rem;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.c18 {
|
||||||
|
display: -webkit-box;
|
||||||
|
display: -webkit-flex;
|
||||||
|
display: -ms-flexbox;
|
||||||
|
display: flex;
|
||||||
|
position: relative;
|
||||||
|
background-color: rgb(255,255,255);
|
||||||
|
box-shadow: 0 0.125rem 0 0 rgba(0,0,0,0.05);
|
||||||
|
border: 0.0625rem solid rgb(216,216,216);
|
||||||
|
border-radius: 0.1875rem;
|
||||||
|
width: 100%;
|
||||||
|
}
|
||||||
|
|
||||||
|
.c19 {
|
||||||
|
border-radius: 0.1875rem 0 0 0.1875rem;
|
||||||
|
min-width: 0.75rem;
|
||||||
|
background-color: rgb(0,152,88);
|
||||||
|
background-color: rgb(210,67,58);
|
||||||
|
}
|
||||||
|
|
||||||
|
.c20 {
|
||||||
|
padding: 1.125rem 1.125rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
.c22 {
|
||||||
|
line-height: 0.875rem;
|
||||||
|
font-size: 0.8125rem;
|
||||||
|
}
|
||||||
|
|
||||||
@media only screen and (min-width:48em) {
|
@media only screen and (min-width:48em) {
|
||||||
.c1 {
|
.c1 {
|
||||||
width: 46rem;
|
width: 46rem;
|
||||||
|
@ -2234,28 +2249,28 @@ exports[`renders <Metadata error /> without throwing 1`] = `
|
||||||
height="0.0625rem"
|
height="0.0625rem"
|
||||||
/>
|
/>
|
||||||
<div
|
<div
|
||||||
className="c14 c15"
|
className="c17 c15"
|
||||||
height="1.5rem"
|
height="1.5rem"
|
||||||
/>
|
/>
|
||||||
<div
|
<div
|
||||||
className="c2"
|
className="c2"
|
||||||
>
|
>
|
||||||
<div
|
<div
|
||||||
className="c17"
|
className="c18"
|
||||||
>
|
>
|
||||||
<div
|
<div
|
||||||
className="c18"
|
className="c19"
|
||||||
/>
|
/>
|
||||||
<div
|
<div
|
||||||
className="c19"
|
className="c20"
|
||||||
>
|
>
|
||||||
<h4
|
<h4
|
||||||
className="c20"
|
className="c21"
|
||||||
>
|
>
|
||||||
Ooops!
|
Ooops!
|
||||||
</h4>
|
</h4>
|
||||||
<p
|
<p
|
||||||
className="c21 c22"
|
className="c22 c23"
|
||||||
>
|
>
|
||||||
An error occurred while loading your metadata
|
An error occurred while loading your metadata
|
||||||
</p>
|
</p>
|
||||||
|
@ -2263,10 +2278,10 @@ exports[`renders <Metadata error /> without throwing 1`] = `
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div
|
<div
|
||||||
className="c23"
|
className="c24"
|
||||||
>
|
>
|
||||||
<h3
|
<h3
|
||||||
className="c24"
|
className="c25"
|
||||||
>
|
>
|
||||||
0
|
0
|
||||||
key-value pair
|
key-value pair
|
||||||
|
@ -2334,6 +2349,7 @@ exports[`renders <Metadata loading /> without throwing 1`] = `
|
||||||
margin: 0;
|
margin: 0;
|
||||||
line-height: 1.5rem;
|
line-height: 1.5rem;
|
||||||
font-size: 0.9375rem;
|
font-size: 0.9375rem;
|
||||||
|
margin: 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
.c16 {
|
.c16 {
|
||||||
|
@ -2446,7 +2462,7 @@ exports[`renders <Metadata loading /> without throwing 1`] = `
|
||||||
|
|
||||||
.c10:hover {
|
.c10:hover {
|
||||||
background-color: rgb(72,83,217);
|
background-color: rgb(72,83,217);
|
||||||
border: solid 0.0625rem rgb(45,56,132);
|
border-color: rgb(45,56,132);
|
||||||
}
|
}
|
||||||
|
|
||||||
.c10:active,
|
.c10:active,
|
||||||
|
@ -2524,6 +2540,7 @@ exports[`renders <Metadata loading /> without throwing 1`] = `
|
||||||
.c14 {
|
.c14 {
|
||||||
height: 1px;
|
height: 1px;
|
||||||
background-color: rgb(216,216,216);
|
background-color: rgb(216,216,216);
|
||||||
|
height: 0.6875rem;
|
||||||
background-color: transparent;
|
background-color: transparent;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -2809,7 +2826,7 @@ exports[`renders <Metadata metadata /> without throwing 1`] = `
|
||||||
margin-top: 0.1875rem;
|
margin-top: 0.1875rem;
|
||||||
}
|
}
|
||||||
|
|
||||||
.c17 {
|
.c18 {
|
||||||
margin-top: 1.875rem;
|
margin-top: 1.875rem;
|
||||||
margin-bottom: 1.125rem;
|
margin-bottom: 1.125rem;
|
||||||
}
|
}
|
||||||
|
@ -2822,7 +2839,7 @@ exports[`renders <Metadata metadata /> without throwing 1`] = `
|
||||||
margin-right: 0.75rem;
|
margin-right: 0.75rem;
|
||||||
}
|
}
|
||||||
|
|
||||||
.c19 {
|
.c20 {
|
||||||
margin-bottom: 0.75rem;
|
margin-bottom: 0.75rem;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -2977,7 +2994,7 @@ exports[`renders <Metadata metadata /> without throwing 1`] = `
|
||||||
|
|
||||||
.c10:hover {
|
.c10:hover {
|
||||||
background-color: rgb(72,83,217);
|
background-color: rgb(72,83,217);
|
||||||
border: solid 0.0625rem rgb(45,56,132);
|
border-color: rgb(45,56,132);
|
||||||
}
|
}
|
||||||
|
|
||||||
.c10:active,
|
.c10:active,
|
||||||
|
@ -3047,7 +3064,7 @@ exports[`renders <Metadata metadata /> without throwing 1`] = `
|
||||||
|
|
||||||
.c43:hover {
|
.c43:hover {
|
||||||
background-color: rgb(72,83,217);
|
background-color: rgb(72,83,217);
|
||||||
border: solid 0.0625rem rgb(45,56,132);
|
border-color: rgb(45,56,132);
|
||||||
}
|
}
|
||||||
|
|
||||||
.c43:active,
|
.c43:active,
|
||||||
|
@ -3135,7 +3152,7 @@ exports[`renders <Metadata metadata /> without throwing 1`] = `
|
||||||
|
|
||||||
.c44:hover {
|
.c44:hover {
|
||||||
background-color: rgb(72,83,217);
|
background-color: rgb(72,83,217);
|
||||||
border: solid 0.0625rem rgb(45,56,132);
|
border-color: rgb(45,56,132);
|
||||||
}
|
}
|
||||||
|
|
||||||
.c44:active,
|
.c44:active,
|
||||||
|
@ -3235,7 +3252,7 @@ exports[`renders <Metadata metadata /> without throwing 1`] = `
|
||||||
|
|
||||||
.c46:hover {
|
.c46:hover {
|
||||||
background-color: rgb(72,83,217);
|
background-color: rgb(72,83,217);
|
||||||
border: solid 0.0625rem rgb(45,56,132);
|
border-color: rgb(45,56,132);
|
||||||
}
|
}
|
||||||
|
|
||||||
.c46:active,
|
.c46:active,
|
||||||
|
@ -3359,7 +3376,7 @@ exports[`renders <Metadata metadata /> without throwing 1`] = `
|
||||||
|
|
||||||
.c48:hover {
|
.c48:hover {
|
||||||
background-color: rgb(72,83,217);
|
background-color: rgb(72,83,217);
|
||||||
border: solid 0.0625rem rgb(45,56,132);
|
border-color: rgb(45,56,132);
|
||||||
}
|
}
|
||||||
|
|
||||||
.c48:active,
|
.c48:active,
|
||||||
|
@ -3529,7 +3546,7 @@ exports[`renders <Metadata metadata /> without throwing 1`] = `
|
||||||
padding-bottom: 1.125rem;
|
padding-bottom: 1.125rem;
|
||||||
}
|
}
|
||||||
|
|
||||||
.c18 {
|
.c19 {
|
||||||
margin: 0;
|
margin: 0;
|
||||||
color: rgb(73,73,73);
|
color: rgb(73,73,73);
|
||||||
font-weight: normal;
|
font-weight: normal;
|
||||||
|
@ -3540,68 +3557,21 @@ exports[`renders <Metadata metadata /> without throwing 1`] = `
|
||||||
.c14 {
|
.c14 {
|
||||||
height: 1px;
|
height: 1px;
|
||||||
background-color: rgb(216,216,216);
|
background-color: rgb(216,216,216);
|
||||||
|
height: 0.6875rem;
|
||||||
background-color: transparent;
|
background-color: transparent;
|
||||||
}
|
}
|
||||||
|
|
||||||
.c16 {
|
.c16 {
|
||||||
height: 1px;
|
height: 1px;
|
||||||
background-color: rgb(216,216,216);
|
background-color: rgb(216,216,216);
|
||||||
|
height: 0.0625rem;
|
||||||
}
|
}
|
||||||
|
|
||||||
.c3 {
|
.c17 {
|
||||||
display: -webkit-box;
|
height: 1px;
|
||||||
display: -webkit-flex;
|
background-color: rgb(216,216,216);
|
||||||
display: -ms-flexbox;
|
height: 1.5rem;
|
||||||
display: flex;
|
background-color: transparent;
|
||||||
-webkit-flex-direction: row;
|
|
||||||
-ms-flex-direction: row;
|
|
||||||
flex-direction: row;
|
|
||||||
-webkit-flex-wrap: nowrap;
|
|
||||||
-ms-flex-wrap: nowrap;
|
|
||||||
flex-wrap: nowrap;
|
|
||||||
-webkit-box-pack: start;
|
|
||||||
-webkit-justify-content: flex-start;
|
|
||||||
-ms-flex-pack: start;
|
|
||||||
justify-content: flex-start;
|
|
||||||
-webkit-align-content: stretch;
|
|
||||||
-ms-flex-line-pack: stretch;
|
|
||||||
align-content: stretch;
|
|
||||||
-webkit-box-pack: justify;
|
|
||||||
-webkit-justify-content: space-between;
|
|
||||||
-ms-flex-pack: justify;
|
|
||||||
justify-content: space-between;
|
|
||||||
-webkit-align-items: flex-end;
|
|
||||||
-webkit-box-align: flex-end;
|
|
||||||
-ms-flex-align: flex-end;
|
|
||||||
align-items: flex-end;
|
|
||||||
}
|
|
||||||
|
|
||||||
.c27 {
|
|
||||||
display: -webkit-box;
|
|
||||||
display: -webkit-flex;
|
|
||||||
display: -ms-flexbox;
|
|
||||||
display: flex;
|
|
||||||
-webkit-flex-direction: row;
|
|
||||||
-ms-flex-direction: row;
|
|
||||||
flex-direction: row;
|
|
||||||
-webkit-flex-wrap: nowrap;
|
|
||||||
-ms-flex-wrap: nowrap;
|
|
||||||
flex-wrap: nowrap;
|
|
||||||
-webkit-box-pack: start;
|
|
||||||
-webkit-justify-content: flex-start;
|
|
||||||
-ms-flex-pack: start;
|
|
||||||
justify-content: flex-start;
|
|
||||||
-webkit-align-content: stretch;
|
|
||||||
-ms-flex-line-pack: stretch;
|
|
||||||
align-content: stretch;
|
|
||||||
-webkit-box-pack: justify;
|
|
||||||
-webkit-justify-content: space-between;
|
|
||||||
-ms-flex-pack: justify;
|
|
||||||
justify-content: space-between;
|
|
||||||
-webkit-align-items: center;
|
|
||||||
-webkit-box-align: center;
|
|
||||||
-ms-flex-align: center;
|
|
||||||
align-items: center;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
.c32 {
|
.c32 {
|
||||||
|
@ -3740,6 +3710,62 @@ exports[`renders <Metadata metadata /> without throwing 1`] = `
|
||||||
color: inherit;
|
color: inherit;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.c3 {
|
||||||
|
display: -webkit-box;
|
||||||
|
display: -webkit-flex;
|
||||||
|
display: -ms-flexbox;
|
||||||
|
display: flex;
|
||||||
|
-webkit-flex-direction: row;
|
||||||
|
-ms-flex-direction: row;
|
||||||
|
flex-direction: row;
|
||||||
|
-webkit-flex-wrap: nowrap;
|
||||||
|
-ms-flex-wrap: nowrap;
|
||||||
|
flex-wrap: nowrap;
|
||||||
|
-webkit-box-pack: start;
|
||||||
|
-webkit-justify-content: flex-start;
|
||||||
|
-ms-flex-pack: start;
|
||||||
|
justify-content: flex-start;
|
||||||
|
-webkit-align-content: stretch;
|
||||||
|
-ms-flex-line-pack: stretch;
|
||||||
|
align-content: stretch;
|
||||||
|
-webkit-box-pack: justify;
|
||||||
|
-webkit-justify-content: space-between;
|
||||||
|
-ms-flex-pack: justify;
|
||||||
|
justify-content: space-between;
|
||||||
|
-webkit-align-items: flex-end;
|
||||||
|
-webkit-box-align: flex-end;
|
||||||
|
-ms-flex-align: flex-end;
|
||||||
|
align-items: flex-end;
|
||||||
|
}
|
||||||
|
|
||||||
|
.c27 {
|
||||||
|
display: -webkit-box;
|
||||||
|
display: -webkit-flex;
|
||||||
|
display: -ms-flexbox;
|
||||||
|
display: flex;
|
||||||
|
-webkit-flex-direction: row;
|
||||||
|
-ms-flex-direction: row;
|
||||||
|
flex-direction: row;
|
||||||
|
-webkit-flex-wrap: nowrap;
|
||||||
|
-ms-flex-wrap: nowrap;
|
||||||
|
flex-wrap: nowrap;
|
||||||
|
-webkit-box-pack: start;
|
||||||
|
-webkit-justify-content: flex-start;
|
||||||
|
-ms-flex-pack: start;
|
||||||
|
justify-content: flex-start;
|
||||||
|
-webkit-align-content: stretch;
|
||||||
|
-ms-flex-line-pack: stretch;
|
||||||
|
align-content: stretch;
|
||||||
|
-webkit-box-pack: justify;
|
||||||
|
-webkit-justify-content: space-between;
|
||||||
|
-ms-flex-pack: justify;
|
||||||
|
justify-content: space-between;
|
||||||
|
-webkit-align-items: center;
|
||||||
|
-webkit-box-align: center;
|
||||||
|
-ms-flex-align: center;
|
||||||
|
align-items: center;
|
||||||
|
}
|
||||||
|
|
||||||
.c4 {
|
.c4 {
|
||||||
display: inline-block;
|
display: inline-block;
|
||||||
padding: 0;
|
padding: 0;
|
||||||
|
@ -3938,10 +3964,6 @@ exports[`renders <Metadata metadata /> without throwing 1`] = `
|
||||||
font-size: 0.8125rem;
|
font-size: 0.8125rem;
|
||||||
}
|
}
|
||||||
|
|
||||||
.c20 {
|
|
||||||
margin-bottom: 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
.c30 {
|
.c30 {
|
||||||
word-break: break-all;
|
word-break: break-all;
|
||||||
line-height: 1.5;
|
line-height: 1.5;
|
||||||
|
@ -4132,14 +4154,14 @@ exports[`renders <Metadata metadata /> without throwing 1`] = `
|
||||||
height="0.0625rem"
|
height="0.0625rem"
|
||||||
/>
|
/>
|
||||||
<div
|
<div
|
||||||
className="c14 c15"
|
className="c17 c15"
|
||||||
height="1.5rem"
|
height="1.5rem"
|
||||||
/>
|
/>
|
||||||
<div
|
<div
|
||||||
className="c17"
|
className="c18"
|
||||||
>
|
>
|
||||||
<h3
|
<h3
|
||||||
className="c18"
|
className="c19"
|
||||||
>
|
>
|
||||||
3
|
3
|
||||||
key-value pair
|
key-value pair
|
||||||
|
@ -4147,10 +4169,9 @@ exports[`renders <Metadata metadata /> without throwing 1`] = `
|
||||||
</h3>
|
</h3>
|
||||||
</div>
|
</div>
|
||||||
<div
|
<div
|
||||||
className="c19"
|
className="c20"
|
||||||
>
|
>
|
||||||
<form
|
<form
|
||||||
className="c20"
|
|
||||||
onSubmit={undefined}
|
onSubmit={undefined}
|
||||||
>
|
>
|
||||||
<div
|
<div
|
||||||
|
@ -4245,10 +4266,6 @@ exports[`renders <Metadata metadata /> without throwing 1`] = `
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div
|
|
||||||
className="c14 c15"
|
|
||||||
height="0.75rem"
|
|
||||||
/>
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div
|
<div
|
||||||
|
@ -4290,10 +4307,6 @@ exports[`renders <Metadata metadata /> without throwing 1`] = `
|
||||||
/>
|
/>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div
|
|
||||||
className="c14 c15"
|
|
||||||
height="0.75rem"
|
|
||||||
/>
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div
|
<div
|
||||||
|
@ -4377,10 +4390,9 @@ exports[`renders <Metadata metadata /> without throwing 1`] = `
|
||||||
</form>
|
</form>
|
||||||
</div>
|
</div>
|
||||||
<div
|
<div
|
||||||
className="c19"
|
className="c20"
|
||||||
>
|
>
|
||||||
<form
|
<form
|
||||||
className="c20"
|
|
||||||
onSubmit={undefined}
|
onSubmit={undefined}
|
||||||
>
|
>
|
||||||
<div
|
<div
|
||||||
|
@ -4475,10 +4487,6 @@ exports[`renders <Metadata metadata /> without throwing 1`] = `
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div
|
|
||||||
className="c14 c15"
|
|
||||||
height="0.75rem"
|
|
||||||
/>
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div
|
<div
|
||||||
|
@ -4520,10 +4528,6 @@ exports[`renders <Metadata metadata /> without throwing 1`] = `
|
||||||
/>
|
/>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div
|
|
||||||
className="c14 c15"
|
|
||||||
height="0.75rem"
|
|
||||||
/>
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div
|
<div
|
||||||
|
@ -4607,10 +4611,9 @@ exports[`renders <Metadata metadata /> without throwing 1`] = `
|
||||||
</form>
|
</form>
|
||||||
</div>
|
</div>
|
||||||
<div
|
<div
|
||||||
className="c19"
|
className="c20"
|
||||||
>
|
>
|
||||||
<form
|
<form
|
||||||
className="c20"
|
|
||||||
onSubmit={undefined}
|
onSubmit={undefined}
|
||||||
>
|
>
|
||||||
<div
|
<div
|
||||||
|
@ -4705,10 +4708,6 @@ exports[`renders <Metadata metadata /> without throwing 1`] = `
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div
|
|
||||||
className="c14 c15"
|
|
||||||
height="0.75rem"
|
|
||||||
/>
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div
|
<div
|
||||||
|
@ -4750,10 +4749,6 @@ exports[`renders <Metadata metadata /> without throwing 1`] = `
|
||||||
/>
|
/>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div
|
|
||||||
className="c14 c15"
|
|
||||||
height="0.75rem"
|
|
||||||
/>
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div
|
<div
|
||||||
|
|
|
@ -18,6 +18,7 @@ exports[`renders <Networks /> without throwing 1`] = `
|
||||||
margin: 0;
|
margin: 0;
|
||||||
line-height: 1.5rem;
|
line-height: 1.5rem;
|
||||||
font-size: 0.9375rem;
|
font-size: 0.9375rem;
|
||||||
|
margin: 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
.c1 {
|
.c1 {
|
||||||
|
@ -69,6 +70,28 @@ exports[`renders <Networks /> without throwing 1`] = `
|
||||||
font-size: 1.3125rem;
|
font-size: 1.3125rem;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.c9 {
|
||||||
|
box-sizing: content-box;
|
||||||
|
display: -webkit-box;
|
||||||
|
display: -webkit-flex;
|
||||||
|
display: -ms-flexbox;
|
||||||
|
display: flex;
|
||||||
|
-webkit-flex: 1 0 auto;
|
||||||
|
-ms-flex: 1 0 auto;
|
||||||
|
flex: 1 0 auto;
|
||||||
|
-webkit-flex-direction: column;
|
||||||
|
-ms-flex-direction: column;
|
||||||
|
flex-direction: column;
|
||||||
|
position: relative;
|
||||||
|
border-width: 0.0625rem;
|
||||||
|
border-style: solid;
|
||||||
|
-webkit-transition: all 300ms ease;
|
||||||
|
transition: all 300ms ease;
|
||||||
|
color: rgb(73,73,73);
|
||||||
|
background-color: rgb(255,255,255);
|
||||||
|
border-color: rgb(216,216,216);
|
||||||
|
}
|
||||||
|
|
||||||
.c11 {
|
.c11 {
|
||||||
display: -webkit-box;
|
display: -webkit-box;
|
||||||
display: -webkit-flex;
|
display: -webkit-flex;
|
||||||
|
@ -100,28 +123,6 @@ exports[`renders <Networks /> without throwing 1`] = `
|
||||||
align-items: center;
|
align-items: center;
|
||||||
}
|
}
|
||||||
|
|
||||||
.c9 {
|
|
||||||
box-sizing: content-box;
|
|
||||||
display: -webkit-box;
|
|
||||||
display: -webkit-flex;
|
|
||||||
display: -ms-flexbox;
|
|
||||||
display: flex;
|
|
||||||
-webkit-flex: 1 0 auto;
|
|
||||||
-ms-flex: 1 0 auto;
|
|
||||||
flex: 1 0 auto;
|
|
||||||
-webkit-flex-direction: column;
|
|
||||||
-ms-flex-direction: column;
|
|
||||||
flex-direction: column;
|
|
||||||
position: relative;
|
|
||||||
border-width: 0.0625rem;
|
|
||||||
border-style: solid;
|
|
||||||
-webkit-transition: all 300ms ease;
|
|
||||||
transition: all 300ms ease;
|
|
||||||
color: rgb(73,73,73);
|
|
||||||
background-color: rgb(255,255,255);
|
|
||||||
border-color: rgb(216,216,216);
|
|
||||||
}
|
|
||||||
|
|
||||||
.c13 {
|
.c13 {
|
||||||
color: rgb(151,151,151);
|
color: rgb(151,151,151);
|
||||||
text-align: center;
|
text-align: center;
|
||||||
|
@ -555,6 +556,7 @@ exports[`renders <Networks error /> without throwing 1`] = `
|
||||||
margin: 0;
|
margin: 0;
|
||||||
line-height: 1.5rem;
|
line-height: 1.5rem;
|
||||||
font-size: 0.9375rem;
|
font-size: 0.9375rem;
|
||||||
|
margin: 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
.c1 {
|
.c1 {
|
||||||
|
@ -609,7 +611,7 @@ exports[`renders <Networks error /> without throwing 1`] = `
|
||||||
.c12 {
|
.c12 {
|
||||||
margin: 0;
|
margin: 0;
|
||||||
color: rgb(73,73,73);
|
color: rgb(73,73,73);
|
||||||
font-weight: 600;
|
font-weight: 400;
|
||||||
line-height: 1.5rem;
|
line-height: 1.5rem;
|
||||||
font-size: 0.9375rem;
|
font-size: 0.9375rem;
|
||||||
}
|
}
|
||||||
|
@ -796,6 +798,7 @@ exports[`renders <Networks loading /> without throwing 1`] = `
|
||||||
margin: 0;
|
margin: 0;
|
||||||
line-height: 1.5rem;
|
line-height: 1.5rem;
|
||||||
font-size: 0.9375rem;
|
font-size: 0.9375rem;
|
||||||
|
margin: 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
.c8 {
|
.c8 {
|
||||||
|
@ -1056,6 +1059,7 @@ exports[`renders <Networks networks /> without throwing 1`] = `
|
||||||
margin: 0;
|
margin: 0;
|
||||||
line-height: 1.5rem;
|
line-height: 1.5rem;
|
||||||
font-size: 0.9375rem;
|
font-size: 0.9375rem;
|
||||||
|
margin: 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
.c1 {
|
.c1 {
|
||||||
|
@ -1120,74 +1124,13 @@ exports[`renders <Networks networks /> without throwing 1`] = `
|
||||||
.c15 {
|
.c15 {
|
||||||
margin: 0;
|
margin: 0;
|
||||||
color: rgb(73,73,73);
|
color: rgb(73,73,73);
|
||||||
font-weight: 600;
|
font-weight: 400;
|
||||||
line-height: 1.5rem;
|
line-height: 1.5rem;
|
||||||
font-size: 0.9375rem;
|
font-size: 0.9375rem;
|
||||||
-webkit-text-fill-color: currentcolor;
|
-webkit-text-fill-color: currentcolor;
|
||||||
color: rgb(255,255,255);
|
color: rgb(255,255,255);
|
||||||
}
|
}
|
||||||
|
|
||||||
.c18 {
|
|
||||||
display: -webkit-box;
|
|
||||||
display: -webkit-flex;
|
|
||||||
display: -ms-flexbox;
|
|
||||||
display: flex;
|
|
||||||
-webkit-flex-direction: row;
|
|
||||||
-ms-flex-direction: row;
|
|
||||||
flex-direction: row;
|
|
||||||
-webkit-flex-wrap: nowrap;
|
|
||||||
-ms-flex-wrap: nowrap;
|
|
||||||
flex-wrap: nowrap;
|
|
||||||
-webkit-box-pack: start;
|
|
||||||
-webkit-justify-content: flex-start;
|
|
||||||
-ms-flex-pack: start;
|
|
||||||
justify-content: flex-start;
|
|
||||||
-webkit-align-content: stretch;
|
|
||||||
-ms-flex-line-pack: stretch;
|
|
||||||
align-content: stretch;
|
|
||||||
}
|
|
||||||
|
|
||||||
.c21 {
|
|
||||||
display: -webkit-box;
|
|
||||||
display: -webkit-flex;
|
|
||||||
display: -ms-flexbox;
|
|
||||||
display: flex;
|
|
||||||
-webkit-flex-direction: row;
|
|
||||||
-ms-flex-direction: row;
|
|
||||||
flex-direction: row;
|
|
||||||
-webkit-flex-wrap: nowrap;
|
|
||||||
-ms-flex-wrap: nowrap;
|
|
||||||
flex-wrap: nowrap;
|
|
||||||
-webkit-box-pack: start;
|
|
||||||
-webkit-justify-content: flex-start;
|
|
||||||
-ms-flex-pack: start;
|
|
||||||
justify-content: flex-start;
|
|
||||||
-webkit-align-content: stretch;
|
|
||||||
-ms-flex-line-pack: stretch;
|
|
||||||
align-content: stretch;
|
|
||||||
-webkit-align-items: center;
|
|
||||||
-webkit-box-align: center;
|
|
||||||
-ms-flex-align: center;
|
|
||||||
align-items: center;
|
|
||||||
}
|
|
||||||
|
|
||||||
.c20 {
|
|
||||||
-webkit-order: 0;
|
|
||||||
-ms-flex-order: 0;
|
|
||||||
order: 0;
|
|
||||||
-webkit-flex-basis: auto;
|
|
||||||
-ms-flex-preferred-size: auto;
|
|
||||||
flex-basis: auto;
|
|
||||||
-webkit-box-flex: 0;
|
|
||||||
-webkit-flex-grow: 0;
|
|
||||||
-ms-flex-positive: 0;
|
|
||||||
flex-grow: 0;
|
|
||||||
-webkit-flex-shrink: 1;
|
|
||||||
-ms-flex-negative: 1;
|
|
||||||
flex-shrink: 1;
|
|
||||||
display: block;
|
|
||||||
}
|
|
||||||
|
|
||||||
.c10 {
|
.c10 {
|
||||||
box-sizing: content-box;
|
box-sizing: content-box;
|
||||||
display: -webkit-box;
|
display: -webkit-box;
|
||||||
|
@ -1399,6 +1342,67 @@ exports[`renders <Networks networks /> without throwing 1`] = `
|
||||||
color: inherit;
|
color: inherit;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.c18 {
|
||||||
|
display: -webkit-box;
|
||||||
|
display: -webkit-flex;
|
||||||
|
display: -ms-flexbox;
|
||||||
|
display: flex;
|
||||||
|
-webkit-flex-direction: row;
|
||||||
|
-ms-flex-direction: row;
|
||||||
|
flex-direction: row;
|
||||||
|
-webkit-flex-wrap: nowrap;
|
||||||
|
-ms-flex-wrap: nowrap;
|
||||||
|
flex-wrap: nowrap;
|
||||||
|
-webkit-box-pack: start;
|
||||||
|
-webkit-justify-content: flex-start;
|
||||||
|
-ms-flex-pack: start;
|
||||||
|
justify-content: flex-start;
|
||||||
|
-webkit-align-content: stretch;
|
||||||
|
-ms-flex-line-pack: stretch;
|
||||||
|
align-content: stretch;
|
||||||
|
}
|
||||||
|
|
||||||
|
.c21 {
|
||||||
|
display: -webkit-box;
|
||||||
|
display: -webkit-flex;
|
||||||
|
display: -ms-flexbox;
|
||||||
|
display: flex;
|
||||||
|
-webkit-flex-direction: row;
|
||||||
|
-ms-flex-direction: row;
|
||||||
|
flex-direction: row;
|
||||||
|
-webkit-flex-wrap: nowrap;
|
||||||
|
-ms-flex-wrap: nowrap;
|
||||||
|
flex-wrap: nowrap;
|
||||||
|
-webkit-box-pack: start;
|
||||||
|
-webkit-justify-content: flex-start;
|
||||||
|
-ms-flex-pack: start;
|
||||||
|
justify-content: flex-start;
|
||||||
|
-webkit-align-content: stretch;
|
||||||
|
-ms-flex-line-pack: stretch;
|
||||||
|
align-content: stretch;
|
||||||
|
-webkit-align-items: center;
|
||||||
|
-webkit-box-align: center;
|
||||||
|
-ms-flex-align: center;
|
||||||
|
align-items: center;
|
||||||
|
}
|
||||||
|
|
||||||
|
.c20 {
|
||||||
|
-webkit-order: 0;
|
||||||
|
-ms-flex-order: 0;
|
||||||
|
order: 0;
|
||||||
|
-webkit-flex-basis: auto;
|
||||||
|
-ms-flex-preferred-size: auto;
|
||||||
|
flex-basis: auto;
|
||||||
|
-webkit-box-flex: 0;
|
||||||
|
-webkit-flex-grow: 0;
|
||||||
|
-ms-flex-positive: 0;
|
||||||
|
flex-grow: 0;
|
||||||
|
-webkit-flex-shrink: 1;
|
||||||
|
-ms-flex-negative: 1;
|
||||||
|
flex-shrink: 1;
|
||||||
|
display: block;
|
||||||
|
}
|
||||||
|
|
||||||
.c5 {
|
.c5 {
|
||||||
font-weight: 200;
|
font-weight: 200;
|
||||||
}
|
}
|
||||||
|
|
|
@ -23,6 +23,7 @@ exports[`renders <Summary /> without throwing 1`] = `
|
||||||
margin: 0;
|
margin: 0;
|
||||||
line-height: 1.5rem;
|
line-height: 1.5rem;
|
||||||
font-size: 0.9375rem;
|
font-size: 0.9375rem;
|
||||||
|
margin: 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
.c2 {
|
.c2 {
|
||||||
|
@ -199,6 +200,7 @@ exports[`renders <Summary loading /> without throwing 1`] = `
|
||||||
margin: 0;
|
margin: 0;
|
||||||
line-height: 1.5rem;
|
line-height: 1.5rem;
|
||||||
font-size: 0.9375rem;
|
font-size: 0.9375rem;
|
||||||
|
margin: 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
.c2 {
|
.c2 {
|
||||||
|
@ -362,6 +364,7 @@ exports[`renders <Summary loadingError /> without throwing 1`] = `
|
||||||
margin: 0;
|
margin: 0;
|
||||||
line-height: 1.5rem;
|
line-height: 1.5rem;
|
||||||
font-size: 0.9375rem;
|
font-size: 0.9375rem;
|
||||||
|
margin: 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
.c1 {
|
.c1 {
|
||||||
|
@ -379,7 +382,7 @@ exports[`renders <Summary loadingError /> without throwing 1`] = `
|
||||||
.c6 {
|
.c6 {
|
||||||
margin: 0;
|
margin: 0;
|
||||||
color: rgb(73,73,73);
|
color: rgb(73,73,73);
|
||||||
font-weight: 600;
|
font-weight: 400;
|
||||||
line-height: 1.5rem;
|
line-height: 1.5rem;
|
||||||
font-size: 0.9375rem;
|
font-size: 0.9375rem;
|
||||||
}
|
}
|
||||||
|
@ -506,6 +509,7 @@ exports[`renders <Summary mutationError /> without throwing 1`] = `
|
||||||
margin: 0;
|
margin: 0;
|
||||||
line-height: 1.5rem;
|
line-height: 1.5rem;
|
||||||
font-size: 0.9375rem;
|
font-size: 0.9375rem;
|
||||||
|
margin: 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
.c2 {
|
.c2 {
|
||||||
|
@ -582,7 +586,7 @@ exports[`renders <Summary mutationError /> without throwing 1`] = `
|
||||||
.c11 {
|
.c11 {
|
||||||
margin: 0;
|
margin: 0;
|
||||||
color: rgb(73,73,73);
|
color: rgb(73,73,73);
|
||||||
font-weight: 600;
|
font-weight: 400;
|
||||||
line-height: 1.5rem;
|
line-height: 1.5rem;
|
||||||
font-size: 0.9375rem;
|
font-size: 0.9375rem;
|
||||||
}
|
}
|
||||||
|
@ -740,6 +744,7 @@ exports[`renders <Summary starting stopping rebooting removing /> without throwi
|
||||||
margin: 0;
|
margin: 0;
|
||||||
line-height: 1.5rem;
|
line-height: 1.5rem;
|
||||||
font-size: 0.9375rem;
|
font-size: 0.9375rem;
|
||||||
|
margin: 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
.c2 {
|
.c2 {
|
||||||
|
@ -1059,7 +1064,7 @@ exports[`renders <Summary starting stopping rebooting removing /> without throwi
|
||||||
|
|
||||||
.c29:hover {
|
.c29:hover {
|
||||||
background-color: rgb(72,83,217);
|
background-color: rgb(72,83,217);
|
||||||
border: solid 0.0625rem rgb(45,56,132);
|
border-color: rgb(45,56,132);
|
||||||
}
|
}
|
||||||
|
|
||||||
.c29:active,
|
.c29:active,
|
||||||
|
@ -1146,7 +1151,7 @@ exports[`renders <Summary starting stopping rebooting removing /> without throwi
|
||||||
|
|
||||||
.c35:hover {
|
.c35:hover {
|
||||||
background-color: rgb(72,83,217);
|
background-color: rgb(72,83,217);
|
||||||
border: solid 0.0625rem rgb(45,56,132);
|
border-color: rgb(45,56,132);
|
||||||
}
|
}
|
||||||
|
|
||||||
.c35:active,
|
.c35:active,
|
||||||
|
@ -1251,7 +1256,7 @@ exports[`renders <Summary starting stopping rebooting removing /> without throwi
|
||||||
|
|
||||||
.c41:hover {
|
.c41:hover {
|
||||||
background-color: rgb(72,83,217);
|
background-color: rgb(72,83,217);
|
||||||
border: solid 0.0625rem rgb(45,56,132);
|
border-color: rgb(45,56,132);
|
||||||
}
|
}
|
||||||
|
|
||||||
.c41:active,
|
.c41:active,
|
||||||
|
@ -1371,7 +1376,7 @@ exports[`renders <Summary starting stopping rebooting removing /> without throwi
|
||||||
|
|
||||||
.c42:hover {
|
.c42:hover {
|
||||||
background-color: rgb(72,83,217);
|
background-color: rgb(72,83,217);
|
||||||
border: solid 0.0625rem rgb(45,56,132);
|
border-color: rgb(45,56,132);
|
||||||
}
|
}
|
||||||
|
|
||||||
.c42:active,
|
.c42:active,
|
||||||
|
@ -1600,43 +1605,7 @@ exports[`renders <Summary starting stopping rebooting removing /> without throwi
|
||||||
.c44 {
|
.c44 {
|
||||||
height: 1px;
|
height: 1px;
|
||||||
background-color: rgb(216,216,216);
|
background-color: rgb(216,216,216);
|
||||||
}
|
height: 1;
|
||||||
|
|
||||||
.c12 {
|
|
||||||
display: -webkit-box;
|
|
||||||
display: -webkit-flex;
|
|
||||||
display: -ms-flexbox;
|
|
||||||
display: flex;
|
|
||||||
-webkit-flex-direction: row;
|
|
||||||
-ms-flex-direction: row;
|
|
||||||
flex-direction: row;
|
|
||||||
-webkit-flex-wrap: nowrap;
|
|
||||||
-ms-flex-wrap: nowrap;
|
|
||||||
flex-wrap: nowrap;
|
|
||||||
-webkit-box-pack: start;
|
|
||||||
-webkit-justify-content: flex-start;
|
|
||||||
-ms-flex-pack: start;
|
|
||||||
justify-content: flex-start;
|
|
||||||
-webkit-align-content: stretch;
|
|
||||||
-ms-flex-line-pack: stretch;
|
|
||||||
align-content: stretch;
|
|
||||||
}
|
|
||||||
|
|
||||||
.c26 {
|
|
||||||
-webkit-order: 0;
|
|
||||||
-ms-flex-order: 0;
|
|
||||||
order: 0;
|
|
||||||
-webkit-flex-basis: auto;
|
|
||||||
-ms-flex-preferred-size: auto;
|
|
||||||
flex-basis: auto;
|
|
||||||
-webkit-box-flex: 0;
|
|
||||||
-webkit-flex-grow: 0;
|
|
||||||
-ms-flex-positive: 0;
|
|
||||||
flex-grow: 0;
|
|
||||||
-webkit-flex-shrink: 1;
|
|
||||||
-ms-flex-negative: 1;
|
|
||||||
flex-shrink: 1;
|
|
||||||
display: block;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
.c4 {
|
.c4 {
|
||||||
|
@ -1677,6 +1646,43 @@ exports[`renders <Summary starting stopping rebooting removing /> without throwi
|
||||||
background-color: transparent;
|
background-color: transparent;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.c12 {
|
||||||
|
display: -webkit-box;
|
||||||
|
display: -webkit-flex;
|
||||||
|
display: -ms-flexbox;
|
||||||
|
display: flex;
|
||||||
|
-webkit-flex-direction: row;
|
||||||
|
-ms-flex-direction: row;
|
||||||
|
flex-direction: row;
|
||||||
|
-webkit-flex-wrap: nowrap;
|
||||||
|
-ms-flex-wrap: nowrap;
|
||||||
|
flex-wrap: nowrap;
|
||||||
|
-webkit-box-pack: start;
|
||||||
|
-webkit-justify-content: flex-start;
|
||||||
|
-ms-flex-pack: start;
|
||||||
|
justify-content: flex-start;
|
||||||
|
-webkit-align-content: stretch;
|
||||||
|
-ms-flex-line-pack: stretch;
|
||||||
|
align-content: stretch;
|
||||||
|
}
|
||||||
|
|
||||||
|
.c26 {
|
||||||
|
-webkit-order: 0;
|
||||||
|
-ms-flex-order: 0;
|
||||||
|
order: 0;
|
||||||
|
-webkit-flex-basis: auto;
|
||||||
|
-ms-flex-preferred-size: auto;
|
||||||
|
flex-basis: auto;
|
||||||
|
-webkit-box-flex: 0;
|
||||||
|
-webkit-flex-grow: 0;
|
||||||
|
-ms-flex-positive: 0;
|
||||||
|
flex-grow: 0;
|
||||||
|
-webkit-flex-shrink: 1;
|
||||||
|
-ms-flex-negative: 1;
|
||||||
|
flex-shrink: 1;
|
||||||
|
display: block;
|
||||||
|
}
|
||||||
|
|
||||||
.c50 {
|
.c50 {
|
||||||
box-sizing: border-box;
|
box-sizing: border-box;
|
||||||
width: 18.75rem;
|
width: 18.75rem;
|
||||||
|
@ -3041,7 +3047,7 @@ exports[`renders <Summary starting stopping rebooting removing /> without throwi
|
||||||
|
|
||||||
.c29:hover {
|
.c29:hover {
|
||||||
background-color: rgb(72,83,217);
|
background-color: rgb(72,83,217);
|
||||||
border: solid 0.0625rem rgb(45,56,132);
|
border-color: rgb(45,56,132);
|
||||||
}
|
}
|
||||||
|
|
||||||
.c29:active,
|
.c29:active,
|
||||||
|
@ -3128,7 +3134,7 @@ exports[`renders <Summary starting stopping rebooting removing /> without throwi
|
||||||
|
|
||||||
.c35:hover {
|
.c35:hover {
|
||||||
background-color: rgb(72,83,217);
|
background-color: rgb(72,83,217);
|
||||||
border: solid 0.0625rem rgb(45,56,132);
|
border-color: rgb(45,56,132);
|
||||||
}
|
}
|
||||||
|
|
||||||
.c35:active,
|
.c35:active,
|
||||||
|
@ -3233,7 +3239,7 @@ exports[`renders <Summary starting stopping rebooting removing /> without throwi
|
||||||
|
|
||||||
.c41:hover {
|
.c41:hover {
|
||||||
background-color: rgb(72,83,217);
|
background-color: rgb(72,83,217);
|
||||||
border: solid 0.0625rem rgb(45,56,132);
|
border-color: rgb(45,56,132);
|
||||||
}
|
}
|
||||||
|
|
||||||
.c41:active,
|
.c41:active,
|
||||||
|
@ -3353,7 +3359,7 @@ exports[`renders <Summary starting stopping rebooting removing /> without throwi
|
||||||
|
|
||||||
.c42:hover {
|
.c42:hover {
|
||||||
background-color: rgb(72,83,217);
|
background-color: rgb(72,83,217);
|
||||||
border: solid 0.0625rem rgb(45,56,132);
|
border-color: rgb(45,56,132);
|
||||||
}
|
}
|
||||||
|
|
||||||
.c42:active,
|
.c42:active,
|
||||||
|
@ -3582,43 +3588,7 @@ exports[`renders <Summary starting stopping rebooting removing /> without throwi
|
||||||
.c44 {
|
.c44 {
|
||||||
height: 1px;
|
height: 1px;
|
||||||
background-color: rgb(216,216,216);
|
background-color: rgb(216,216,216);
|
||||||
}
|
height: 1;
|
||||||
|
|
||||||
.c12 {
|
|
||||||
display: -webkit-box;
|
|
||||||
display: -webkit-flex;
|
|
||||||
display: -ms-flexbox;
|
|
||||||
display: flex;
|
|
||||||
-webkit-flex-direction: row;
|
|
||||||
-ms-flex-direction: row;
|
|
||||||
flex-direction: row;
|
|
||||||
-webkit-flex-wrap: nowrap;
|
|
||||||
-ms-flex-wrap: nowrap;
|
|
||||||
flex-wrap: nowrap;
|
|
||||||
-webkit-box-pack: start;
|
|
||||||
-webkit-justify-content: flex-start;
|
|
||||||
-ms-flex-pack: start;
|
|
||||||
justify-content: flex-start;
|
|
||||||
-webkit-align-content: stretch;
|
|
||||||
-ms-flex-line-pack: stretch;
|
|
||||||
align-content: stretch;
|
|
||||||
}
|
|
||||||
|
|
||||||
.c26 {
|
|
||||||
-webkit-order: 0;
|
|
||||||
-ms-flex-order: 0;
|
|
||||||
order: 0;
|
|
||||||
-webkit-flex-basis: auto;
|
|
||||||
-ms-flex-preferred-size: auto;
|
|
||||||
flex-basis: auto;
|
|
||||||
-webkit-box-flex: 0;
|
|
||||||
-webkit-flex-grow: 0;
|
|
||||||
-ms-flex-positive: 0;
|
|
||||||
flex-grow: 0;
|
|
||||||
-webkit-flex-shrink: 1;
|
|
||||||
-ms-flex-negative: 1;
|
|
||||||
flex-shrink: 1;
|
|
||||||
display: block;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
.c4 {
|
.c4 {
|
||||||
|
@ -3659,6 +3629,43 @@ exports[`renders <Summary starting stopping rebooting removing /> without throwi
|
||||||
background-color: transparent;
|
background-color: transparent;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.c12 {
|
||||||
|
display: -webkit-box;
|
||||||
|
display: -webkit-flex;
|
||||||
|
display: -ms-flexbox;
|
||||||
|
display: flex;
|
||||||
|
-webkit-flex-direction: row;
|
||||||
|
-ms-flex-direction: row;
|
||||||
|
flex-direction: row;
|
||||||
|
-webkit-flex-wrap: nowrap;
|
||||||
|
-ms-flex-wrap: nowrap;
|
||||||
|
flex-wrap: nowrap;
|
||||||
|
-webkit-box-pack: start;
|
||||||
|
-webkit-justify-content: flex-start;
|
||||||
|
-ms-flex-pack: start;
|
||||||
|
justify-content: flex-start;
|
||||||
|
-webkit-align-content: stretch;
|
||||||
|
-ms-flex-line-pack: stretch;
|
||||||
|
align-content: stretch;
|
||||||
|
}
|
||||||
|
|
||||||
|
.c26 {
|
||||||
|
-webkit-order: 0;
|
||||||
|
-ms-flex-order: 0;
|
||||||
|
order: 0;
|
||||||
|
-webkit-flex-basis: auto;
|
||||||
|
-ms-flex-preferred-size: auto;
|
||||||
|
flex-basis: auto;
|
||||||
|
-webkit-box-flex: 0;
|
||||||
|
-webkit-flex-grow: 0;
|
||||||
|
-ms-flex-positive: 0;
|
||||||
|
flex-grow: 0;
|
||||||
|
-webkit-flex-shrink: 1;
|
||||||
|
-ms-flex-negative: 1;
|
||||||
|
flex-shrink: 1;
|
||||||
|
display: block;
|
||||||
|
}
|
||||||
|
|
||||||
.c50 {
|
.c50 {
|
||||||
box-sizing: border-box;
|
box-sizing: border-box;
|
||||||
width: 18.75rem;
|
width: 18.75rem;
|
||||||
|
|
File diff suppressed because it is too large
Load Diff
|
@ -1,4 +1,3 @@
|
||||||
/* eslint-disable camelcase */
|
|
||||||
import React, { Fragment } from 'react';
|
import React, { Fragment } from 'react';
|
||||||
import renderer from 'react-test-renderer';
|
import renderer from 'react-test-renderer';
|
||||||
import 'jest-styled-components';
|
import 'jest-styled-components';
|
||||||
|
|
|
@ -1,4 +1,3 @@
|
||||||
/* eslint-disable camelcase */
|
|
||||||
import React, { Fragment } from 'react';
|
import React, { Fragment } from 'react';
|
||||||
import { toMatchImageSnapshot } from 'jest-image-snapshot';
|
import { toMatchImageSnapshot } from 'jest-image-snapshot';
|
||||||
import screenshot from 'react-screenshot-renderer';
|
import screenshot from 'react-screenshot-renderer';
|
||||||
|
|
|
@ -1,4 +1,3 @@
|
||||||
/* eslint-disable camelcase */
|
|
||||||
import React from 'react';
|
import React from 'react';
|
||||||
import renderer from 'react-test-renderer';
|
import renderer from 'react-test-renderer';
|
||||||
import 'jest-styled-components';
|
import 'jest-styled-components';
|
||||||
|
|
|
@ -1,4 +1,3 @@
|
||||||
/* eslint-disable camelcase */
|
|
||||||
import React from 'react';
|
import React from 'react';
|
||||||
import { toMatchImageSnapshot } from 'jest-image-snapshot';
|
import { toMatchImageSnapshot } from 'jest-image-snapshot';
|
||||||
import screenshot from 'react-screenshot-renderer';
|
import screenshot from 'react-screenshot-renderer';
|
||||||
|
|
|
@ -22,12 +22,13 @@ import {
|
||||||
MessageDescription
|
MessageDescription
|
||||||
} from 'joyent-ui-toolkit';
|
} from 'joyent-ui-toolkit';
|
||||||
|
|
||||||
import Description from '@components/instances/description';
|
|
||||||
import {
|
import {
|
||||||
Cns,
|
Cns,
|
||||||
CnsFooter as Footer,
|
CnsFooter as Footer,
|
||||||
CnsAddServiceForm as AddServiceForm
|
CnsAddServiceForm as AddServiceForm
|
||||||
} from 'joyent-ui-resource-widgets';
|
} from 'joyent-ui-resource-widgets';
|
||||||
|
|
||||||
|
import Description from '@components/instances/description';
|
||||||
import GetAccount from '@graphql/get-account.gql';
|
import GetAccount from '@graphql/get-account.gql';
|
||||||
import DeleteTag from '@graphql/delete-tag.gql';
|
import DeleteTag from '@graphql/delete-tag.gql';
|
||||||
import UpdateTags from '@graphql/update-tags.gql';
|
import UpdateTags from '@graphql/update-tags.gql';
|
||||||
|
@ -52,7 +53,7 @@ const CnsContainer = ({
|
||||||
handleAsyncValidate
|
handleAsyncValidate
|
||||||
}) => (
|
}) => (
|
||||||
<ViewContainer main>
|
<ViewContainer main>
|
||||||
<Margin bottom={3}>
|
<Margin bottom="3">
|
||||||
<Description href="https://docs.joyent.com/private-cloud/install/cns">
|
<Description href="https://docs.joyent.com/private-cloud/install/cns">
|
||||||
Triton CNS is used to automatically update hostnames for your instances.
|
Triton CNS is used to automatically update hostnames for your instances.
|
||||||
You can serve multiple instances (with multiple IP addresses) under the
|
You can serve multiple instances (with multiple IP addresses) under the
|
||||||
|
@ -66,7 +67,7 @@ const CnsContainer = ({
|
||||||
<Padding all={5}>
|
<Padding all={5}>
|
||||||
{loading ? <StatusLoader /> : null}
|
{loading ? <StatusLoader /> : null}
|
||||||
{!loading && loadingError ? (
|
{!loading && loadingError ? (
|
||||||
<Margin bottom={5}>
|
<Margin bottom="5">
|
||||||
<Message error>
|
<Message error>
|
||||||
<MessageTitle>Ooops!</MessageTitle>
|
<MessageTitle>Ooops!</MessageTitle>
|
||||||
<MessageDescription>
|
<MessageDescription>
|
||||||
|
@ -76,7 +77,7 @@ const CnsContainer = ({
|
||||||
</Margin>
|
</Margin>
|
||||||
) : null}
|
) : null}
|
||||||
{!loading && mutationError ? (
|
{!loading && mutationError ? (
|
||||||
<Margin bottom={5}>
|
<Margin bottom="5">
|
||||||
<Message error>
|
<Message error>
|
||||||
<MessageTitle>Ooops!</MessageTitle>
|
<MessageTitle>Ooops!</MessageTitle>
|
||||||
<MessageDescription>{mutationError}</MessageDescription>
|
<MessageDescription>{mutationError}</MessageDescription>
|
||||||
|
@ -108,7 +109,7 @@ const CnsContainer = ({
|
||||||
</CardOutlet>
|
</CardOutlet>
|
||||||
</Card>
|
</Card>
|
||||||
{!loading && !loadingError ? (
|
{!loading && !loadingError ? (
|
||||||
<Margin top={5}>
|
<Margin top="5">
|
||||||
<Footer
|
<Footer
|
||||||
enabled={!disabled}
|
enabled={!disabled}
|
||||||
submitting={mutating}
|
submitting={mutating}
|
||||||
|
@ -278,14 +279,8 @@ export default compose(
|
||||||
]);
|
]);
|
||||||
|
|
||||||
const newValue = value.join(',');
|
const newValue = value.join(',');
|
||||||
const mutation = !newValue.length
|
const mutation = newValue.length
|
||||||
? deleteTag({
|
? updateTags({
|
||||||
variables: {
|
|
||||||
id: instance.id,
|
|
||||||
name: 'triton.cns.services'
|
|
||||||
}
|
|
||||||
})
|
|
||||||
: updateTags({
|
|
||||||
variables: {
|
variables: {
|
||||||
id: instance.id,
|
id: instance.id,
|
||||||
tags: [
|
tags: [
|
||||||
|
@ -295,6 +290,12 @@ export default compose(
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
|
})
|
||||||
|
: deleteTag({
|
||||||
|
variables: {
|
||||||
|
id: instance.id,
|
||||||
|
name: 'triton.cns.services'
|
||||||
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
const [err] = await intercept(mutation);
|
const [err] = await intercept(mutation);
|
||||||
|
|
|
@ -1,4 +1,3 @@
|
||||||
/* eslint-disable camelcase */
|
|
||||||
import React from 'react';
|
import React from 'react';
|
||||||
import intercept from 'apr-intercept';
|
import intercept from 'apr-intercept';
|
||||||
import { connect } from 'react-redux';
|
import { connect } from 'react-redux';
|
||||||
|
@ -43,7 +42,7 @@ export const Firewall = ({
|
||||||
handleEnabledToggle
|
handleEnabledToggle
|
||||||
}) => (
|
}) => (
|
||||||
<ViewContainer main>
|
<ViewContainer main>
|
||||||
<Margin bottom={3}>
|
<Margin bottom="3">
|
||||||
<Description href="https://docs.joyent.com/private-cloud/install/cns">
|
<Description href="https://docs.joyent.com/private-cloud/install/cns">
|
||||||
Cloud Firewall rules control traffic across instances. Enabling the
|
Cloud Firewall rules control traffic across instances. Enabling the
|
||||||
firewall adds a default set of rules and rules defined by your chosen
|
firewall adds a default set of rules and rules defined by your chosen
|
||||||
|
@ -52,7 +51,7 @@ export const Firewall = ({
|
||||||
</Margin>
|
</Margin>
|
||||||
{loading ? <StatusLoader /> : null}
|
{loading ? <StatusLoader /> : null}
|
||||||
{!loading && loadingError ? (
|
{!loading && loadingError ? (
|
||||||
<Margin bottom={5}>
|
<Margin bottom="5">
|
||||||
<Message error>
|
<Message error>
|
||||||
<MessageTitle>Ooops!</MessageTitle>
|
<MessageTitle>Ooops!</MessageTitle>
|
||||||
<MessageDescription>
|
<MessageDescription>
|
||||||
|
@ -62,7 +61,7 @@ export const Firewall = ({
|
||||||
</Margin>
|
</Margin>
|
||||||
) : null}
|
) : null}
|
||||||
{!loading && mutationError ? (
|
{!loading && mutationError ? (
|
||||||
<Margin bottom={5}>
|
<Margin bottom="5">
|
||||||
<Message error>
|
<Message error>
|
||||||
<MessageTitle>Ooops!</MessageTitle>
|
<MessageTitle>Ooops!</MessageTitle>
|
||||||
<MessageDescription>{mutationError}</MessageDescription>
|
<MessageDescription>{mutationError}</MessageDescription>
|
||||||
|
@ -80,7 +79,7 @@ export const Firewall = ({
|
||||||
>
|
>
|
||||||
{props =>
|
{props =>
|
||||||
loading ? null : (
|
loading ? null : (
|
||||||
<Margin right={5}>
|
<Margin right="5">
|
||||||
<ToggleFirewallForm {...props} submitOnChange />
|
<ToggleFirewallForm {...props} submitOnChange />
|
||||||
</Margin>
|
</Margin>
|
||||||
)
|
)
|
||||||
|
@ -101,19 +100,19 @@ export const Firewall = ({
|
||||||
</FlexItem>
|
</FlexItem>
|
||||||
</Flex>
|
</Flex>
|
||||||
{!loading && !defaultRules.length && !tagRules.length ? (
|
{!loading && !defaultRules.length && !tagRules.length ? (
|
||||||
<Margin top={5}>
|
<Margin top="5">
|
||||||
<Empty borderTop>
|
<Empty borderTop>
|
||||||
Sorry, but we weren’t able to find any firewall rules.
|
Sorry, but we weren’t able to find any firewall rules.
|
||||||
</Empty>
|
</Empty>
|
||||||
</Margin>
|
</Margin>
|
||||||
) : null}
|
) : null}
|
||||||
{!loading && enabled && defaultRules.length ? (
|
{!loading && enabled && defaultRules.length ? (
|
||||||
<Margin top={5}>
|
<Margin top="5">
|
||||||
<DefaultRules rules={defaultRules} />
|
<DefaultRules rules={defaultRules} />
|
||||||
</Margin>
|
</Margin>
|
||||||
) : null}
|
) : null}
|
||||||
{!loading && enabled && tagRules.length ? (
|
{!loading && enabled && tagRules.length ? (
|
||||||
<Margin top={5}>
|
<Margin top="5">
|
||||||
<TagRules rules={tagRules} />
|
<TagRules rules={tagRules} />
|
||||||
</Margin>
|
</Margin>
|
||||||
) : null}
|
) : null}
|
||||||
|
|
|
@ -83,7 +83,7 @@ export const List = ({
|
||||||
|
|
||||||
const _error =
|
const _error =
|
||||||
error && !_instances.length && !_loading && !filter.length ? (
|
error && !_instances.length && !_loading && !filter.length ? (
|
||||||
<Margin bottom={5}>
|
<Margin bottom="5">
|
||||||
<Message error>
|
<Message error>
|
||||||
<MessageTitle>Ooops!</MessageTitle>
|
<MessageTitle>Ooops!</MessageTitle>
|
||||||
<MessageDescription>
|
<MessageDescription>
|
||||||
|
@ -94,7 +94,7 @@ export const List = ({
|
||||||
) : null;
|
) : null;
|
||||||
|
|
||||||
const _mutationError = mutationError && (
|
const _mutationError = mutationError && (
|
||||||
<Margin bottom={5}>
|
<Margin bottom="5">
|
||||||
<Message error>
|
<Message error>
|
||||||
<MessageTitle>Ooops!</MessageTitle>
|
<MessageTitle>Ooops!</MessageTitle>
|
||||||
<MessageDescription>{mutationError}</MessageDescription>
|
<MessageDescription>{mutationError}</MessageDescription>
|
||||||
|
@ -107,7 +107,7 @@ export const List = ({
|
||||||
const handleReboot = selected => handleAction({ name: 'reboot', selected });
|
const handleReboot = selected => handleAction({ name: 'reboot', selected });
|
||||||
const handleRemove = selected => handleAction({ name: 'remove', selected });
|
const handleRemove = selected => handleAction({ name: 'remove', selected });
|
||||||
|
|
||||||
const _table = !_loading ? (
|
const _table = _loading ? null : (
|
||||||
<ReduxForm form={TABLE_FORM_NAME}>
|
<ReduxForm form={TABLE_FORM_NAME}>
|
||||||
{props => (
|
{props => (
|
||||||
<InstanceList
|
<InstanceList
|
||||||
|
@ -123,7 +123,7 @@ export const List = ({
|
||||||
total={total}
|
total={total}
|
||||||
>
|
>
|
||||||
{fetching ? <InstanceListFetchingItem /> : null}
|
{fetching ? <InstanceListFetchingItem /> : null}
|
||||||
{(!fetching ? _instances : []).map(instance => (
|
{(fetching ? [] : _instances).map(instance => (
|
||||||
<InstanceListItem
|
<InstanceListItem
|
||||||
key={instance.id}
|
key={instance.id}
|
||||||
{...instance}
|
{...instance}
|
||||||
|
@ -137,7 +137,7 @@ export const List = ({
|
||||||
</InstanceList>
|
</InstanceList>
|
||||||
)}
|
)}
|
||||||
</ReduxForm>
|
</ReduxForm>
|
||||||
) : null;
|
);
|
||||||
|
|
||||||
const _empty =
|
const _empty =
|
||||||
!_loading && !_instances.length ? (
|
!_loading && !_instances.length ? (
|
||||||
|
@ -164,10 +164,10 @@ export const List = ({
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<ViewContainer main>
|
<ViewContainer main>
|
||||||
<Margin top={5}>
|
<Margin top="5">
|
||||||
<H3>Instances</H3>
|
<H3>Instances</H3>
|
||||||
</Margin>
|
</Margin>
|
||||||
<Margin top={3} bottom={5}>
|
<Margin top="3" bottom="5">
|
||||||
<ReduxForm form={MENU_FORM_NAME}>
|
<ReduxForm form={MENU_FORM_NAME}>
|
||||||
{props => (
|
{props => (
|
||||||
<ToolbarForm
|
<ToolbarForm
|
||||||
|
@ -180,7 +180,7 @@ export const List = ({
|
||||||
)}
|
)}
|
||||||
</ReduxForm>
|
</ReduxForm>
|
||||||
</Margin>
|
</Margin>
|
||||||
{!_mutationError ? _error : null}
|
{_mutationError ? null : _error}
|
||||||
{_mutationError}
|
{_mutationError}
|
||||||
{_loading}
|
{_loading}
|
||||||
{_table}
|
{_table}
|
||||||
|
@ -259,7 +259,6 @@ export default compose(
|
||||||
const sortBy = get(values, 'instance-list-sort-by', 'name');
|
const sortBy = get(values, 'instance-list-sort-by', 'name');
|
||||||
const sortOrder = get(values, 'instance-list-sort-order', 'asc');
|
const sortOrder = get(values, 'instance-list-sort-order', 'asc');
|
||||||
|
|
||||||
console.log(index, filter);
|
|
||||||
// if user is searching something, get items that match that query
|
// if user is searching something, get items that match that query
|
||||||
const filtered =
|
const filtered =
|
||||||
filter && index.list.length
|
filter && index.list.length
|
||||||
|
@ -366,13 +365,13 @@ export default compose(
|
||||||
handleAction: async ({ selected, name }) => {
|
handleAction: async ({ selected, name }) => {
|
||||||
// eslint-disable-next-line no-alert
|
// eslint-disable-next-line no-alert
|
||||||
if (
|
if (
|
||||||
!await Confirm(
|
!(await Confirm(
|
||||||
`Do you want to ${name} ${
|
`Do you want to ${name} ${
|
||||||
selected.length === 1
|
selected.length === 1
|
||||||
? `"${selected[0].name}"`
|
? `"${selected[0].name}"`
|
||||||
: `${selected.length} instances`
|
: `${selected.length} instances`
|
||||||
}`
|
}`
|
||||||
)
|
))
|
||||||
) {
|
) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
import React from 'react';
|
import React, { Fragment } from 'react';
|
||||||
import paramCase from 'param-case';
|
import paramCase from 'param-case';
|
||||||
import { Margin } from 'styled-components-spacing';
|
import { Margin } from 'styled-components-spacing';
|
||||||
import { set } from 'react-redux-values';
|
import { set } from 'react-redux-values';
|
||||||
|
@ -53,10 +53,10 @@ export const Metadata = ({
|
||||||
handleUpdate,
|
handleUpdate,
|
||||||
handleRemove
|
handleRemove
|
||||||
}) => {
|
}) => {
|
||||||
const _loading = !(loading && !metadata.length) ? null : <StatusLoader />;
|
const _loading = loading && !metadata.length ? <StatusLoader /> : null;
|
||||||
|
|
||||||
const _add = addOpen ? (
|
const _add = addOpen ? (
|
||||||
<Margin bottom={3}>
|
<Margin bottom="3">
|
||||||
<ReduxForm
|
<ReduxForm
|
||||||
form={ADD_FORM_NAME}
|
form={ADD_FORM_NAME}
|
||||||
onSubmit={handleCreate}
|
onSubmit={handleCreate}
|
||||||
|
@ -73,25 +73,25 @@ export const Metadata = ({
|
||||||
</Margin>
|
</Margin>
|
||||||
) : null;
|
) : null;
|
||||||
|
|
||||||
const _line = !_loading
|
const _line = _loading ? null : (
|
||||||
? [
|
<Fragment>
|
||||||
<Divider key="line" height={remcalc(1)} />,
|
<Divider key="line" height={remcalc(1)} />
|
||||||
<Divider key="after-line-space" height={remcalc(24)} transparent />
|
<Divider key="after-line-space" height={remcalc(24)} transparent />
|
||||||
]
|
</Fragment>
|
||||||
: null;
|
);
|
||||||
|
|
||||||
const _count = !_loading ? (
|
const _count = _loading ? null : (
|
||||||
<Margin bottom={3} top={5}>
|
<Margin bottom="3" top="5">
|
||||||
<H3>
|
<H3>
|
||||||
{metadata.length} key-value pair{metadata.length === 1 ? '' : 's'}
|
{metadata.length} key-value pair{metadata.length === 1 ? '' : 's'}
|
||||||
</H3>
|
</H3>
|
||||||
</Margin>
|
</Margin>
|
||||||
) : null;
|
);
|
||||||
|
|
||||||
const _metadata =
|
const _metadata =
|
||||||
!_loading &&
|
!_loading &&
|
||||||
metadata.map(({ form, initialValues, expanded, removing }) => (
|
metadata.map(({ form, initialValues, expanded, removing }) => (
|
||||||
<Margin bottom={2}>
|
<Margin bottom="2">
|
||||||
<ReduxForm
|
<ReduxForm
|
||||||
form={form}
|
form={form}
|
||||||
key={form}
|
key={form}
|
||||||
|
@ -119,7 +119,7 @@ export const Metadata = ({
|
||||||
|
|
||||||
const _error =
|
const _error =
|
||||||
error && !_metadata.length && !_loading ? (
|
error && !_metadata.length && !_loading ? (
|
||||||
<Margin bottom={5}>
|
<Margin bottom="5">
|
||||||
<Message error>
|
<Message error>
|
||||||
<MessageTitle>Ooops!</MessageTitle>
|
<MessageTitle>Ooops!</MessageTitle>
|
||||||
<MessageDescription>
|
<MessageDescription>
|
||||||
|
@ -131,7 +131,7 @@ export const Metadata = ({
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<ViewContainer main>
|
<ViewContainer main>
|
||||||
<Margin bottom={5}>
|
<Margin bottom="5">
|
||||||
<ReduxForm form={MENU_FORM_NAME}>
|
<ReduxForm form={MENU_FORM_NAME}>
|
||||||
{props => (
|
{props => (
|
||||||
<ToolbarForm
|
<ToolbarForm
|
||||||
|
@ -316,7 +316,7 @@ export default compose(
|
||||||
'initialValues.name'
|
'initialValues.name'
|
||||||
);
|
);
|
||||||
|
|
||||||
if (!await Confirm(`Do you want to remove "${name}"?`)) {
|
if (!(await Confirm(`Do you want to remove "${name}"?`))) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -30,7 +30,7 @@ export const Networks = ({
|
||||||
setInfoExpanded
|
setInfoExpanded
|
||||||
}) => (
|
}) => (
|
||||||
<ViewContainer main>
|
<ViewContainer main>
|
||||||
<Margin bottom={3}>
|
<Margin bottom="3">
|
||||||
<Description href="https://docs.joyent.com/public-cloud/network/sdn">
|
<Description href="https://docs.joyent.com/public-cloud/network/sdn">
|
||||||
Use predefined or customized fabric networks which can be public-facing
|
Use predefined or customized fabric networks which can be public-facing
|
||||||
or private. All fabrics are isolated from other customers giving you
|
or private. All fabrics are isolated from other customers giving you
|
||||||
|
@ -42,7 +42,7 @@ export const Networks = ({
|
||||||
</Margin>
|
</Margin>
|
||||||
{loading ? <StatusLoader /> : null}
|
{loading ? <StatusLoader /> : null}
|
||||||
{!loading && error && !networks.length ? (
|
{!loading && error && !networks.length ? (
|
||||||
<Margin bottom={5}>
|
<Margin bottom="5">
|
||||||
<Message error>
|
<Message error>
|
||||||
<MessageTitle>Ooops!</MessageTitle>
|
<MessageTitle>Ooops!</MessageTitle>
|
||||||
<MessageDescription>
|
<MessageDescription>
|
||||||
|
@ -81,7 +81,6 @@ export default compose(
|
||||||
}
|
}
|
||||||
}),
|
}),
|
||||||
props: ({ data }) => {
|
props: ({ data }) => {
|
||||||
console.log(data);
|
|
||||||
const { loading, error, variables } = data;
|
const { loading, error, variables } = data;
|
||||||
const { id } = variables;
|
const { id } = variables;
|
||||||
|
|
||||||
|
|
|
@ -70,7 +70,7 @@ const Snapshots = ({
|
||||||
const _error = error &&
|
const _error = error &&
|
||||||
!_loading &&
|
!_loading &&
|
||||||
!_values.length && (
|
!_values.length && (
|
||||||
<Margin bottom={5}>
|
<Margin bottom="5">
|
||||||
<Message error>
|
<Message error>
|
||||||
<MessageTitle>Ooops!</MessageTitle>
|
<MessageTitle>Ooops!</MessageTitle>
|
||||||
<MessageDescription>
|
<MessageDescription>
|
||||||
|
@ -82,7 +82,7 @@ const Snapshots = ({
|
||||||
|
|
||||||
const _createSnapshot =
|
const _createSnapshot =
|
||||||
!loading && createSnapshotOpen ? (
|
!loading && createSnapshotOpen ? (
|
||||||
<Margin bottom={5}>
|
<Margin bottom="5">
|
||||||
<ReduxForm
|
<ReduxForm
|
||||||
form={CREATE_FORM_NAME}
|
form={CREATE_FORM_NAME}
|
||||||
shouldAsyncValidate={shouldAsyncValidate}
|
shouldAsyncValidate={shouldAsyncValidate}
|
||||||
|
@ -111,7 +111,7 @@ const Snapshots = ({
|
||||||
) : null;
|
) : null;
|
||||||
|
|
||||||
const _mutationError = mutationError ? (
|
const _mutationError = mutationError ? (
|
||||||
<Margin bottom={5}>
|
<Margin bottom="5">
|
||||||
<Message error>
|
<Message error>
|
||||||
<MessageTitle>Ooops!</MessageTitle>
|
<MessageTitle>Ooops!</MessageTitle>
|
||||||
<MessageDescription>{mutationError}</MessageDescription>
|
<MessageDescription>{mutationError}</MessageDescription>
|
||||||
|
@ -119,7 +119,7 @@ const Snapshots = ({
|
||||||
</Margin>
|
</Margin>
|
||||||
) : null;
|
) : null;
|
||||||
|
|
||||||
const _items = !_loading ? (
|
const _items = _loading ? null : (
|
||||||
<ReduxForm form={TABLE_FORM_NAME}>
|
<ReduxForm form={TABLE_FORM_NAME}>
|
||||||
{props => (
|
{props => (
|
||||||
<SnapshotsList
|
<SnapshotsList
|
||||||
|
@ -135,11 +135,11 @@ const Snapshots = ({
|
||||||
/>
|
/>
|
||||||
)}
|
)}
|
||||||
</ReduxForm>
|
</ReduxForm>
|
||||||
) : null;
|
);
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<ViewContainer main>
|
<ViewContainer main>
|
||||||
<Margin bottom={5}>
|
<Margin bottom="5">
|
||||||
<ReduxForm form={MENU_FORM_NAME}>
|
<ReduxForm form={MENU_FORM_NAME}>
|
||||||
{props => (
|
{props => (
|
||||||
<ToolbarForm
|
<ToolbarForm
|
||||||
|
@ -349,13 +349,13 @@ export default compose(
|
||||||
handleAction: async ({ name, selected = [] }) => {
|
handleAction: async ({ name, selected = [] }) => {
|
||||||
// eslint-disable-next-line no-alert
|
// eslint-disable-next-line no-alert
|
||||||
if (
|
if (
|
||||||
!await Confirm(
|
!(await Confirm(
|
||||||
`Do you want to ${name} ${
|
`Do you want to ${name} ${
|
||||||
selected.length === 1
|
selected.length === 1
|
||||||
? `"${selected[0].name}"`
|
? `"${selected[0].name}"`
|
||||||
: `${selected.length} snapshots`
|
: `${selected.length} snapshots`
|
||||||
}`
|
}`
|
||||||
)
|
))
|
||||||
) {
|
) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
|
@ -79,7 +79,7 @@ export const Summary = ({
|
||||||
const _error = loadingError &&
|
const _error = loadingError &&
|
||||||
!_loading &&
|
!_loading &&
|
||||||
!instance && (
|
!instance && (
|
||||||
<Margin bottom={5}>
|
<Margin bottom="5">
|
||||||
<Message error>
|
<Message error>
|
||||||
<MessageTitle>Ooops!</MessageTitle>
|
<MessageTitle>Ooops!</MessageTitle>
|
||||||
<MessageDescription>
|
<MessageDescription>
|
||||||
|
@ -265,7 +265,7 @@ export default compose(
|
||||||
const { instance } = ownProps;
|
const { instance } = ownProps;
|
||||||
const { id } = instance;
|
const { id } = instance;
|
||||||
|
|
||||||
if (!await Confirm(`Do you want to ${action} "${instance.name}"?`)) {
|
if (!(await Confirm(`Do you want to ${action} "${instance.name}"?`))) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -18,10 +18,11 @@ import {
|
||||||
Divider,
|
Divider,
|
||||||
H3,
|
H3,
|
||||||
TagList,
|
TagList,
|
||||||
TagItem,
|
TagItem
|
||||||
KeyValue
|
|
||||||
} from 'joyent-ui-toolkit';
|
} from 'joyent-ui-toolkit';
|
||||||
|
|
||||||
|
import { KeyValue } from 'joyent-ui-resource-widgets';
|
||||||
|
|
||||||
import ToolbarForm from '@components/instances/toolbar';
|
import ToolbarForm from '@components/instances/toolbar';
|
||||||
import GetTags from '@graphql/list-tags.gql';
|
import GetTags from '@graphql/list-tags.gql';
|
||||||
import UpdateTags from '@graphql/update-tags.gql';
|
import UpdateTags from '@graphql/update-tags.gql';
|
||||||
|
@ -37,11 +38,13 @@ const EDIT_FORM_KEY = field => `instance-tags-${paramCase(field)}`;
|
||||||
const TagsAddForm = props => (
|
const TagsAddForm = props => (
|
||||||
<KeyValue {...props} method="add" input="input" type="tag" expanded />
|
<KeyValue {...props} method="add" input="input" type="tag" expanded />
|
||||||
);
|
);
|
||||||
|
|
||||||
const TagsEditForm = props => (
|
const TagsEditForm = props => (
|
||||||
<KeyValue {...props} method="edit" input="input" type="tag" expanded />
|
<KeyValue {...props} method="edit" input="input" type="tag" expanded />
|
||||||
);
|
);
|
||||||
|
|
||||||
const Tag = ({ name, value, onRemoveClick, onClick }) => (
|
const Tag = ({ name, value, onRemoveClick, onClick }) => (
|
||||||
<Margin right={1} bottom={1} key={`${name}-${value}`}>
|
<Margin right="1" bottom="1" key={`${name}-${value}`}>
|
||||||
<TagItem onClick={onClick} onRemoveClick={onRemoveClick}>
|
<TagItem onClick={onClick} onRemoveClick={onRemoveClick}>
|
||||||
{name ? `${name}: ${value}` : value}
|
{name ? `${name}: ${value}` : value}
|
||||||
</TagItem>
|
</TagItem>
|
||||||
|
@ -63,7 +66,7 @@ export const Tags = ({
|
||||||
shouldAsyncValidate,
|
shouldAsyncValidate,
|
||||||
handleAsyncValidate
|
handleAsyncValidate
|
||||||
}) => {
|
}) => {
|
||||||
const _loading = !(loading && !tags.length) ? null : <StatusLoader />;
|
const _loading = loading && !tags.length ? <StatusLoader /> : null;
|
||||||
|
|
||||||
const _add = addOpen ? (
|
const _add = addOpen ? (
|
||||||
<ReduxForm
|
<ReduxForm
|
||||||
|
@ -85,15 +88,15 @@ export const Tags = ({
|
||||||
]
|
]
|
||||||
: null;
|
: null;
|
||||||
|
|
||||||
const _count = !_loading ? (
|
const _count = _loading ? null : (
|
||||||
<Margin bottom={3} top={5}>
|
<Margin bottom="3" top="5">
|
||||||
<H3>
|
<H3>
|
||||||
{tags.length} tag{tags.length === 1 ? '' : 's'}
|
{tags.length} tag{tags.length === 1 ? '' : 's'}
|
||||||
</H3>
|
</H3>
|
||||||
</Margin>
|
</Margin>
|
||||||
) : null;
|
);
|
||||||
|
|
||||||
const _tags = !_loading ? (
|
const _tags = _loading ? null : (
|
||||||
<TagList>
|
<TagList>
|
||||||
{tags.map(({ id, name, value }) => (
|
{tags.map(({ id, name, value }) => (
|
||||||
<Tag
|
<Tag
|
||||||
|
@ -105,7 +108,7 @@ export const Tags = ({
|
||||||
/>
|
/>
|
||||||
))}
|
))}
|
||||||
</TagList>
|
</TagList>
|
||||||
) : null;
|
);
|
||||||
|
|
||||||
const _edit = editing ? (
|
const _edit = editing ? (
|
||||||
<ReduxForm
|
<ReduxForm
|
||||||
|
@ -131,7 +134,7 @@ export const Tags = ({
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<ViewContainer main>
|
<ViewContainer main>
|
||||||
<Margin bottom={3}>
|
<Margin bottom="3">
|
||||||
<ReduxForm form={MENU_FORM_NAME}>
|
<ReduxForm form={MENU_FORM_NAME}>
|
||||||
{props => (
|
{props => (
|
||||||
<ToolbarForm
|
<ToolbarForm
|
||||||
|
@ -282,7 +285,7 @@ export default compose(
|
||||||
},
|
},
|
||||||
handleRemove: async (form, { name }) => {
|
handleRemove: async (form, { name }) => {
|
||||||
// eslint-disable-next-line no-alert
|
// eslint-disable-next-line no-alert
|
||||||
if (!await Confirm(`Do you want to remove "${name}"?`)) {
|
if (!(await Confirm(`Do you want to remove "${name}"?`))) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -18,14 +18,14 @@ import GetMetadata from '@graphql/list-metadata.gql';
|
||||||
|
|
||||||
export const UserScript = ({ metadata, loading = false, error = null }) => (
|
export const UserScript = ({ metadata, loading = false, error = null }) => (
|
||||||
<ViewContainer main>
|
<ViewContainer main>
|
||||||
<Margin bottom={3}>
|
<Margin bottom="3">
|
||||||
<Description href="https://docs.joyent.com/private-cloud/instances/using-mdata#UsingtheMetadataAPI-ListofMetadataKeys">
|
<Description href="https://docs.joyent.com/private-cloud/instances/using-mdata#UsingtheMetadataAPI-ListofMetadataKeys">
|
||||||
User script can be used to inject a custom boot script.
|
User script can be used to inject a custom boot script.
|
||||||
</Description>
|
</Description>
|
||||||
</Margin>
|
</Margin>
|
||||||
{loading ? <StatusLoader /> : null}
|
{loading ? <StatusLoader /> : null}
|
||||||
{!loading && error ? (
|
{!loading && error ? (
|
||||||
<Margin bottom={5}>
|
<Margin bottom="5">
|
||||||
<Message error>
|
<Message error>
|
||||||
<MessageTitle>Ooops!</MessageTitle>
|
<MessageTitle>Ooops!</MessageTitle>
|
||||||
<MessageDescription>
|
<MessageDescription>
|
||||||
|
|
|
@ -70,7 +70,7 @@ exports[`renders <Breadcrumb /> without throwing 1`] = `
|
||||||
.c10 {
|
.c10 {
|
||||||
margin: 0;
|
margin: 0;
|
||||||
color: rgb(73,73,73);
|
color: rgb(73,73,73);
|
||||||
font-weight: 600;
|
font-weight: 400;
|
||||||
line-height: 1.5rem;
|
line-height: 1.5rem;
|
||||||
font-size: 0.9375rem;
|
font-size: 0.9375rem;
|
||||||
}
|
}
|
||||||
|
@ -322,7 +322,7 @@ exports[`renders <Breadcrumb match /> without throwing 1`] = `
|
||||||
.c10 {
|
.c10 {
|
||||||
margin: 0;
|
margin: 0;
|
||||||
color: rgb(73,73,73);
|
color: rgb(73,73,73);
|
||||||
font-weight: 600;
|
font-weight: 400;
|
||||||
line-height: 1.5rem;
|
line-height: 1.5rem;
|
||||||
font-size: 0.9375rem;
|
font-size: 0.9375rem;
|
||||||
}
|
}
|
||||||
|
|
|
@ -30,7 +30,7 @@ export default ({ match }) => {
|
||||||
.filter(Boolean)
|
.filter(Boolean)
|
||||||
.map(({ name, pathname }) => (
|
.map(({ name, pathname }) => (
|
||||||
<BreadcrumbItem key={name} to={pathname} component={Link}>
|
<BreadcrumbItem key={name} to={pathname} component={Link}>
|
||||||
<Margin horizontal={1} vertical={3}>
|
<Margin horizontal="1" vertical="3">
|
||||||
{name}
|
{name}
|
||||||
</Margin>
|
</Margin>
|
||||||
</BreadcrumbItem>
|
</BreadcrumbItem>
|
||||||
|
|
|
@ -20,7 +20,7 @@ module.exports = ({
|
||||||
</head>
|
</head>
|
||||||
<body {...bodyAttrs}>
|
<body {...bodyAttrs}>
|
||||||
<div id="header" />
|
<div id="header" />
|
||||||
{!children ? <div id="root" /> : null}
|
{children ? null : <div id="root" />}
|
||||||
{children}
|
{children}
|
||||||
<script src="/navigation/static/main.js" />
|
<script src="/navigation/static/main.js" />
|
||||||
</body>
|
</body>
|
||||||
|
|
|
@ -1,6 +1,5 @@
|
||||||
import React from 'react';
|
import React from 'react';
|
||||||
import { Margin } from 'styled-components-spacing';
|
import { Margin } from 'styled-components-spacing';
|
||||||
import remcalc from 'remcalc';
|
|
||||||
|
|
||||||
import {
|
import {
|
||||||
RootContainer,
|
RootContainer,
|
||||||
|
@ -8,16 +7,14 @@ import {
|
||||||
ViewContainer,
|
ViewContainer,
|
||||||
Message,
|
Message,
|
||||||
MessageDescription,
|
MessageDescription,
|
||||||
MessageTitle,
|
MessageTitle
|
||||||
Divider
|
|
||||||
} from 'joyent-ui-toolkit';
|
} from 'joyent-ui-toolkit';
|
||||||
|
|
||||||
import Breadcrumb from '@containers/navigation/breadcrumb';
|
import Breadcrumb from '@containers/navigation/breadcrumb';
|
||||||
|
|
||||||
export const Route = () => (
|
export const Route = () => (
|
||||||
<ViewContainer main>
|
<ViewContainer main>
|
||||||
<Divider height={remcalc(24)} transparent />
|
<Margin bottom="4">
|
||||||
<Margin bottom={5}>
|
|
||||||
<Message error>
|
<Message error>
|
||||||
<MessageTitle>Ooops!</MessageTitle>
|
<MessageTitle>Ooops!</MessageTitle>
|
||||||
<MessageDescription>
|
<MessageDescription>
|
||||||
|
|
|
@ -16,7 +16,7 @@ const validateSchema = async (schema, value) => {
|
||||||
keys(schema),
|
keys(schema),
|
||||||
async (errors, name) => {
|
async (errors, name) => {
|
||||||
const msg = await validateField(schema[name], value[name]);
|
const msg = await validateField(schema[name], value[name]);
|
||||||
return !msg ? errors : assign(errors, { [name]: msg });
|
return msg ? assign(errors, { [name]: msg }) : errors;
|
||||||
},
|
},
|
||||||
{}
|
{}
|
||||||
);
|
);
|
||||||
|
@ -109,6 +109,6 @@ export const addMetadata = metadata =>
|
||||||
validateSchema(Schemas.metadata, metadata);
|
validateSchema(Schemas.metadata, metadata);
|
||||||
|
|
||||||
export const instanceName = ({ name }) =>
|
export const instanceName = ({ name }) =>
|
||||||
!name ? null : validateSchema(Schemas.instanceName, { name });
|
name ? validateSchema(Schemas.instanceName, { name }) : null;
|
||||||
|
|
||||||
export const editMetadata = addMetadata;
|
export const editMetadata = addMetadata;
|
||||||
|
|
|
@ -1,2 +0,0 @@
|
||||||
build
|
|
||||||
dist
|
|
|
@ -1,13 +0,0 @@
|
||||||
{
|
|
||||||
"extends": "joyent-portal",
|
|
||||||
"rules": {
|
|
||||||
"no-console": 0,
|
|
||||||
"new-cap": 0,
|
|
||||||
"camelcase": 1,
|
|
||||||
// temp
|
|
||||||
"no-undef": 1,
|
|
||||||
"no-debugger": 1,
|
|
||||||
"no-negated-condition": 0,
|
|
||||||
"jsx-a11y/href-no-hash": 0
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -15,6 +15,7 @@ exports.register = async server => {
|
||||||
if (NODE_ENV === 'production') {
|
if (NODE_ENV === 'production') {
|
||||||
throw err;
|
throw err;
|
||||||
} else {
|
} else {
|
||||||
|
// eslint-disable-next-line no-console
|
||||||
console.error(err);
|
console.error(err);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -10,8 +10,6 @@
|
||||||
"build:lib": "echo 0",
|
"build:lib": "echo 0",
|
||||||
"build:bundle": "NAMESPACE=navigation NODE_ENV=production redrun build",
|
"build:bundle": "NAMESPACE=navigation NODE_ENV=production redrun build",
|
||||||
"prepublish": "NAMESPACE=navigation NODE_ENV=production redrun build",
|
"prepublish": "NAMESPACE=navigation NODE_ENV=production redrun build",
|
||||||
"lint": "redrun lint:ci -- --fix",
|
|
||||||
"lint:ci": "NODE_ENV=test eslint . --ext .js --ext .md",
|
|
||||||
"test": "echo 0",
|
"test": "echo 0",
|
||||||
"test:ci": "redrun test",
|
"test:ci": "redrun test",
|
||||||
"build": "PREACT=1 joyent-react-scripts build"
|
"build": "PREACT=1 joyent-react-scripts build"
|
||||||
|
|
|
@ -24,7 +24,7 @@ const GetAccountServices = gql`
|
||||||
`;
|
`;
|
||||||
|
|
||||||
const Account = ({ expanded, services = [] }) => {
|
const Account = ({ expanded, services = [] }) => {
|
||||||
return !expanded ? null : (
|
return expanded ? (
|
||||||
<Popover>
|
<Popover>
|
||||||
<Ul>
|
<Ul>
|
||||||
{services.map(({ name, url }) => (
|
{services.map(({ name, url }) => (
|
||||||
|
@ -34,7 +34,7 @@ const Account = ({ expanded, services = [] }) => {
|
||||||
))}
|
))}
|
||||||
</Ul>
|
</Ul>
|
||||||
</Popover>
|
</Popover>
|
||||||
);
|
) : null;
|
||||||
};
|
};
|
||||||
|
|
||||||
export default compose(
|
export default compose(
|
||||||
|
|
|
@ -0,0 +1,12 @@
|
||||||
|
{
|
||||||
|
"ignore": ["_document.js", "_aliases.js"],
|
||||||
|
"presets": [
|
||||||
|
[
|
||||||
|
"joyent-portal",
|
||||||
|
{
|
||||||
|
"aliases": true,
|
||||||
|
"autoAliases": true
|
||||||
|
}
|
||||||
|
]
|
||||||
|
]
|
||||||
|
}
|
|
@ -0,0 +1,25 @@
|
||||||
|
# See https://help.github.com/ignore-files/ for more about ignoring files.
|
||||||
|
|
||||||
|
# dependencies
|
||||||
|
/node_modules
|
||||||
|
|
||||||
|
# testing
|
||||||
|
/coverage
|
||||||
|
|
||||||
|
# production
|
||||||
|
/build
|
||||||
|
|
||||||
|
# misc
|
||||||
|
.DS_Store
|
||||||
|
.env
|
||||||
|
npm-debug.log*
|
||||||
|
yarn-debug.log*
|
||||||
|
|
||||||
|
yarn-error.log*
|
||||||
|
|
||||||
|
## Image Snapshots Diff
|
||||||
|
|
||||||
|
**/__diff_output__
|
||||||
|
|
||||||
|
lib/app
|
||||||
|
|
|
@ -0,0 +1,8 @@
|
||||||
|
{
|
||||||
|
"setup": {
|
||||||
|
"compile": "npm run build",
|
||||||
|
"start": "serve -s build --port 3069 --single",
|
||||||
|
"href": "http://0.0.0.0:3069"
|
||||||
|
},
|
||||||
|
"extends": "lighthouse:default"
|
||||||
|
}
|
|
@ -0,0 +1,27 @@
|
||||||
|
# See https://help.github.com/ignore-files/ for more about ignoring files.
|
||||||
|
|
||||||
|
# dependencies
|
||||||
|
/node_modules
|
||||||
|
|
||||||
|
# testing
|
||||||
|
/coverage
|
||||||
|
|
||||||
|
# production
|
||||||
|
/build
|
||||||
|
|
||||||
|
# misc
|
||||||
|
.DS_Store
|
||||||
|
.env
|
||||||
|
npm-debug.log*
|
||||||
|
yarn-debug.log*
|
||||||
|
|
||||||
|
yarn-error.log*
|
||||||
|
|
||||||
|
## Image Snapshots Diff
|
||||||
|
|
||||||
|
**/__diff_output__
|
||||||
|
|
||||||
|
!lib/app
|
||||||
|
!dist
|
||||||
|
!build
|
||||||
|
|
|
@ -0,0 +1,4 @@
|
||||||
|
{
|
||||||
|
"test": ["./src/**/*.js"],
|
||||||
|
"extends": ["stylelint-config-joyent-portal"]
|
||||||
|
}
|
|
@ -0,0 +1,13 @@
|
||||||
|
{
|
||||||
|
"libs": ["ecmascript", "browser"],
|
||||||
|
"plugins": {
|
||||||
|
"doc_comment": true,
|
||||||
|
"local-scope": true,
|
||||||
|
"jsx": true,
|
||||||
|
"node": true,
|
||||||
|
"webpack": {
|
||||||
|
"configPath":
|
||||||
|
"../../node_modules/joyent-react-scripts/src/webpack.config.dev.js"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,92 @@
|
||||||
|
const Inert = require('inert');
|
||||||
|
const Path = require('path');
|
||||||
|
const RenderReact = require('hapi-render-react');
|
||||||
|
const Intercept = require('apr-intercept');
|
||||||
|
const Fs = require('mz/fs');
|
||||||
|
|
||||||
|
const { NAMESPACE = 'templates' } = process.env;
|
||||||
|
|
||||||
|
exports.register = async server => {
|
||||||
|
const relativeTo = Path.join(__dirname, 'app');
|
||||||
|
const buildRoot = Path.join(__dirname, `../build/${NAMESPACE}/static/`);
|
||||||
|
const publicRoot = Path.join(__dirname, `../public/static/`);
|
||||||
|
|
||||||
|
await server.register([
|
||||||
|
{
|
||||||
|
plugin: Inert
|
||||||
|
},
|
||||||
|
{
|
||||||
|
plugin: RenderReact
|
||||||
|
}
|
||||||
|
]);
|
||||||
|
|
||||||
|
server.route([
|
||||||
|
{
|
||||||
|
method: 'GET',
|
||||||
|
path: `/${NAMESPACE}/service-worker.js`,
|
||||||
|
config: {
|
||||||
|
auth: false,
|
||||||
|
handler: {
|
||||||
|
file: {
|
||||||
|
path: Path.join(__dirname, '../build/service-worker.js')
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
method: 'GET',
|
||||||
|
path: `/${NAMESPACE}/favicon.ico`,
|
||||||
|
config: {
|
||||||
|
auth: false,
|
||||||
|
handler: {
|
||||||
|
file: {
|
||||||
|
path: Path.join(__dirname, '../build/favicon.ico')
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
method: 'GET',
|
||||||
|
path: `/${NAMESPACE}/static/{rest*}`,
|
||||||
|
config: {
|
||||||
|
auth: false
|
||||||
|
},
|
||||||
|
handler: async (request, h) => {
|
||||||
|
const { params } = request;
|
||||||
|
const { rest } = params;
|
||||||
|
|
||||||
|
const publicPathname = Path.join(publicRoot, rest);
|
||||||
|
const buildPathname = Path.join(buildRoot, rest);
|
||||||
|
|
||||||
|
const [err] = await Intercept(
|
||||||
|
Fs.access(publicPathname, Fs.constants.R_OK)
|
||||||
|
);
|
||||||
|
|
||||||
|
const file = err ? buildPathname : publicPathname;
|
||||||
|
return h.file(file, { confine: false });
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
method: '*',
|
||||||
|
path: `/${NAMESPACE}/~server-error`,
|
||||||
|
handler: {
|
||||||
|
view: {
|
||||||
|
name: 'server-error',
|
||||||
|
relativeTo
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
method: '*',
|
||||||
|
path: `/${NAMESPACE}/{path*}`,
|
||||||
|
handler: {
|
||||||
|
view: {
|
||||||
|
name: 'app',
|
||||||
|
relativeTo
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
]);
|
||||||
|
};
|
||||||
|
|
||||||
|
exports.pkg = require('../package.json');
|
|
@ -0,0 +1,56 @@
|
||||||
|
{
|
||||||
|
"name": "my-joy-templates",
|
||||||
|
"version": "1.0.0",
|
||||||
|
"private": true,
|
||||||
|
"license": "MPL-2.0",
|
||||||
|
"repository": "github:yldio/joyent-portal",
|
||||||
|
"main": "lib/index.js",
|
||||||
|
"scripts": {
|
||||||
|
"dev": "NAMESPACE=templates NODE_ENV=development REACT_APP_GQL_PORT=4000 PORT=3071 joyent-react-scripts start",
|
||||||
|
"build:test": "echo 0",
|
||||||
|
"build:lib": "echo 0",
|
||||||
|
"build:bundle": "NAMESPACE=templates NODE_ENV=production redrun -p build:frontend build:ssr",
|
||||||
|
"prepublish": "NODE_ENV=production redrun build:bundle",
|
||||||
|
"test": "DEFAULT_TIMEOUT_INTERVAL=100000 NODE_ENV=test joyent-react-scripts test --env=jsdom",
|
||||||
|
"test:ci": "NODE_ENV=test joyent-react-scripts test --env=jsdom --testPathIgnorePatterns='.ui.js'",
|
||||||
|
"build:frontend": "joyent-react-scripts build",
|
||||||
|
"build:ssr": "SSR=1 UMD=1 babel src --out-dir lib/app --copy-files"
|
||||||
|
},
|
||||||
|
"dependencies": {
|
||||||
|
"@manaflair/redux-batch": "^0.1.0",
|
||||||
|
"cross-fetch": "^2.1.0",
|
||||||
|
"exenv": "^1.2.2",
|
||||||
|
"hapi-render-react": "^2.5.2",
|
||||||
|
"hapi-render-react-joyent-document": "^5.0.0",
|
||||||
|
"inert": "^5.1.0",
|
||||||
|
"joyent-manifest-editor": "^1.4.0",
|
||||||
|
"joyent-ui-instance-steps": "^1.0.0",
|
||||||
|
"joyent-ui-resource-step": "^1.0.0",
|
||||||
|
"joyent-ui-resource-widgets": "^1.0.0",
|
||||||
|
"joyent-ui-toolkit": "^6.0.0",
|
||||||
|
"lodash.get": "^4.4.2",
|
||||||
|
"query-string": "^6.1.0",
|
||||||
|
"react": "^16.3.1",
|
||||||
|
"react-apollo": "^2.1.2",
|
||||||
|
"react-dom": "^16.3.1",
|
||||||
|
"react-redux-values": "^1.1.2",
|
||||||
|
"react-router-dom": "^4.2.2",
|
||||||
|
"redux": "^3.7.2",
|
||||||
|
"redux-form": "^7.3.0",
|
||||||
|
"remcalc": "^1.0.10",
|
||||||
|
"styled-components": "^3.2.5",
|
||||||
|
"styled-components-spacing": "^2.1.3"
|
||||||
|
},
|
||||||
|
"devDependencies": {
|
||||||
|
"babel-cli": "^6.26.0",
|
||||||
|
"babel-preset-joyent-portal": "^7.0.1",
|
||||||
|
"eslint": "^4.19.1",
|
||||||
|
"eslint-config-joyent-portal": "^3.3.1",
|
||||||
|
"jest-image-snapshot": "^2.4.0",
|
||||||
|
"jest-styled-components": "^5.0.1",
|
||||||
|
"joyent-react-scripts": "^8.0.3",
|
||||||
|
"react-screenshot-renderer": "^1.1.2",
|
||||||
|
"react-test-renderer": "^16.3.1",
|
||||||
|
"redrun": "^6.0.2"
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,15 @@
|
||||||
|
{
|
||||||
|
"short_name": "Joyent",
|
||||||
|
"name": "My Joyent β",
|
||||||
|
"icons": [
|
||||||
|
{
|
||||||
|
"src": "favicon.ico",
|
||||||
|
"sizes": "192x192",
|
||||||
|
"type": "image/png"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"start_url": "./index.html",
|
||||||
|
"display": "standalone",
|
||||||
|
"theme_color": "#1E313B",
|
||||||
|
"background_color": "#FAFAFA"
|
||||||
|
}
|
|
@ -0,0 +1,31 @@
|
||||||
|
@font-face {
|
||||||
|
font-family: 'Libre Franklin';
|
||||||
|
font-style: normal;
|
||||||
|
font-weight: 400;
|
||||||
|
src: local('Libre Franklin'), local('LibreFranklin-Regular'),
|
||||||
|
url(../fonts/libre-franklin/libre-franklin-regular.ttf) format('truetype');
|
||||||
|
}
|
||||||
|
|
||||||
|
@font-face {
|
||||||
|
font-family: 'Libre Franklin';
|
||||||
|
font-style: normal;
|
||||||
|
font-weight: 500;
|
||||||
|
src: local('Libre Franklin Medium'), local('LibreFranklin-Medium'),
|
||||||
|
url(../fonts/libre-franklin/libre-franklin-medium.ttf) format('truetype');
|
||||||
|
}
|
||||||
|
|
||||||
|
@font-face {
|
||||||
|
font-family: 'Libre Franklin';
|
||||||
|
font-style: normal;
|
||||||
|
font-weight: 600;
|
||||||
|
src: local('Libre Franklin SemiBold'), local('LibreFranklin-SemiBold'),
|
||||||
|
url(../fonts/libre-franklin/libre-franklin-semibold.ttf) format('truetype');
|
||||||
|
}
|
||||||
|
|
||||||
|
@font-face {
|
||||||
|
font-family: 'Libre Franklin';
|
||||||
|
font-style: normal;
|
||||||
|
font-weight: 700;
|
||||||
|
src: local('Libre Franklin Bold'), local('LibreFranklin-Bold'),
|
||||||
|
url(../fonts/libre-franklin/libre-franklin-bold.ttf) format('truetype');
|
||||||
|
}
|
|
@ -0,0 +1,15 @@
|
||||||
|
@font-face {
|
||||||
|
font-family: 'Roboto Mono';
|
||||||
|
font-style: normal;
|
||||||
|
font-weight: 400;
|
||||||
|
src: local('Roboto Mono'), local('RobotoMono-Regular'),
|
||||||
|
url(../fonts/roboto-mono/roboto-mono-regular.ttf) format('truetype');
|
||||||
|
}
|
||||||
|
|
||||||
|
@font-face {
|
||||||
|
font-family: 'Roboto Mono';
|
||||||
|
font-style: normal;
|
||||||
|
font-weight: 700;
|
||||||
|
src: local('Roboto Mono Bold'), local('RobotoMono-Bold'),
|
||||||
|
url(../fonts/roboto-mono/roboto-mono-bold.ttf) format('truetype');
|
||||||
|
}
|
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
|
@ -0,0 +1,93 @@
|
||||||
|
Copyright (c) 2015, Impallari Type (www.impallari.com)
|
||||||
|
|
||||||
|
This Font Software is licensed under the SIL Open Font License, Version 1.1.
|
||||||
|
This license is copied below, and is also available with a FAQ at:
|
||||||
|
http://scripts.sil.org/OFL
|
||||||
|
|
||||||
|
|
||||||
|
-----------------------------------------------------------
|
||||||
|
SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007
|
||||||
|
-----------------------------------------------------------
|
||||||
|
|
||||||
|
PREAMBLE
|
||||||
|
The goals of the Open Font License (OFL) are to stimulate worldwide
|
||||||
|
development of collaborative font projects, to support the font creation
|
||||||
|
efforts of academic and linguistic communities, and to provide a free and
|
||||||
|
open framework in which fonts may be shared and improved in partnership
|
||||||
|
with others.
|
||||||
|
|
||||||
|
The OFL allows the licensed fonts to be used, studied, modified and
|
||||||
|
redistributed freely as long as they are not sold by themselves. The
|
||||||
|
fonts, including any derivative works, can be bundled, embedded,
|
||||||
|
redistributed and/or sold with any software provided that any reserved
|
||||||
|
names are not used by derivative works. The fonts and derivatives,
|
||||||
|
however, cannot be released under any other type of license. The
|
||||||
|
requirement for fonts to remain under this license does not apply
|
||||||
|
to any document created using the fonts or their derivatives.
|
||||||
|
|
||||||
|
DEFINITIONS
|
||||||
|
"Font Software" refers to the set of files released by the Copyright
|
||||||
|
Holder(s) under this license and clearly marked as such. This may
|
||||||
|
include source files, build scripts and documentation.
|
||||||
|
|
||||||
|
"Reserved Font Name" refers to any names specified as such after the
|
||||||
|
copyright statement(s).
|
||||||
|
|
||||||
|
"Original Version" refers to the collection of Font Software components as
|
||||||
|
distributed by the Copyright Holder(s).
|
||||||
|
|
||||||
|
"Modified Version" refers to any derivative made by adding to, deleting,
|
||||||
|
or substituting -- in part or in whole -- any of the components of the
|
||||||
|
Original Version, by changing formats or by porting the Font Software to a
|
||||||
|
new environment.
|
||||||
|
|
||||||
|
"Author" refers to any designer, engineer, programmer, technical
|
||||||
|
writer or other person who contributed to the Font Software.
|
||||||
|
|
||||||
|
PERMISSION & CONDITIONS
|
||||||
|
Permission is hereby granted, free of charge, to any person obtaining
|
||||||
|
a copy of the Font Software, to use, study, copy, merge, embed, modify,
|
||||||
|
redistribute, and sell modified and unmodified copies of the Font
|
||||||
|
Software, subject to the following conditions:
|
||||||
|
|
||||||
|
1) Neither the Font Software nor any of its individual components,
|
||||||
|
in Original or Modified Versions, may be sold by itself.
|
||||||
|
|
||||||
|
2) Original or Modified Versions of the Font Software may be bundled,
|
||||||
|
redistributed and/or sold with any software, provided that each copy
|
||||||
|
contains the above copyright notice and this license. These can be
|
||||||
|
included either as stand-alone text files, human-readable headers or
|
||||||
|
in the appropriate machine-readable metadata fields within text or
|
||||||
|
binary files as long as those fields can be easily viewed by the user.
|
||||||
|
|
||||||
|
3) No Modified Version of the Font Software may use the Reserved Font
|
||||||
|
Name(s) unless explicit written permission is granted by the corresponding
|
||||||
|
Copyright Holder. This restriction only applies to the primary font name as
|
||||||
|
presented to the users.
|
||||||
|
|
||||||
|
4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font
|
||||||
|
Software shall not be used to promote, endorse or advertise any
|
||||||
|
Modified Version, except to acknowledge the contribution(s) of the
|
||||||
|
Copyright Holder(s) and the Author(s) or with their explicit written
|
||||||
|
permission.
|
||||||
|
|
||||||
|
5) The Font Software, modified or unmodified, in part or in whole,
|
||||||
|
must be distributed entirely under this license, and must not be
|
||||||
|
distributed under any other license. The requirement for fonts to
|
||||||
|
remain under this license does not apply to any document created
|
||||||
|
using the Font Software.
|
||||||
|
|
||||||
|
TERMINATION
|
||||||
|
This license becomes null and void if any of the above conditions are
|
||||||
|
not met.
|
||||||
|
|
||||||
|
DISCLAIMER
|
||||||
|
THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
||||||
|
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF
|
||||||
|
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT
|
||||||
|
OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE
|
||||||
|
COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
|
||||||
|
INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL
|
||||||
|
DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
||||||
|
FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM
|
||||||
|
OTHER DEALINGS IN THE FONT SOFTWARE.
|
|
@ -0,0 +1,202 @@
|
||||||
|
|
||||||
|
Apache License
|
||||||
|
Version 2.0, January 2004
|
||||||
|
http://www.apache.org/licenses/
|
||||||
|
|
||||||
|
TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
|
||||||
|
|
||||||
|
1. Definitions.
|
||||||
|
|
||||||
|
"License" shall mean the terms and conditions for use, reproduction,
|
||||||
|
and distribution as defined by Sections 1 through 9 of this document.
|
||||||
|
|
||||||
|
"Licensor" shall mean the copyright owner or entity authorized by
|
||||||
|
the copyright owner that is granting the License.
|
||||||
|
|
||||||
|
"Legal Entity" shall mean the union of the acting entity and all
|
||||||
|
other entities that control, are controlled by, or are under common
|
||||||
|
control with that entity. For the purposes of this definition,
|
||||||
|
"control" means (i) the power, direct or indirect, to cause the
|
||||||
|
direction or management of such entity, whether by contract or
|
||||||
|
otherwise, or (ii) ownership of fifty percent (50%) or more of the
|
||||||
|
outstanding shares, or (iii) beneficial ownership of such entity.
|
||||||
|
|
||||||
|
"You" (or "Your") shall mean an individual or Legal Entity
|
||||||
|
exercising permissions granted by this License.
|
||||||
|
|
||||||
|
"Source" form shall mean the preferred form for making modifications,
|
||||||
|
including but not limited to software source code, documentation
|
||||||
|
source, and configuration files.
|
||||||
|
|
||||||
|
"Object" form shall mean any form resulting from mechanical
|
||||||
|
transformation or translation of a Source form, including but
|
||||||
|
not limited to compiled object code, generated documentation,
|
||||||
|
and conversions to other media types.
|
||||||
|
|
||||||
|
"Work" shall mean the work of authorship, whether in Source or
|
||||||
|
Object form, made available under the License, as indicated by a
|
||||||
|
copyright notice that is included in or attached to the work
|
||||||
|
(an example is provided in the Appendix below).
|
||||||
|
|
||||||
|
"Derivative Works" shall mean any work, whether in Source or Object
|
||||||
|
form, that is based on (or derived from) the Work and for which the
|
||||||
|
editorial revisions, annotations, elaborations, or other modifications
|
||||||
|
represent, as a whole, an original work of authorship. For the purposes
|
||||||
|
of this License, Derivative Works shall not include works that remain
|
||||||
|
separable from, or merely link (or bind by name) to the interfaces of,
|
||||||
|
the Work and Derivative Works thereof.
|
||||||
|
|
||||||
|
"Contribution" shall mean any work of authorship, including
|
||||||
|
the original version of the Work and any modifications or additions
|
||||||
|
to that Work or Derivative Works thereof, that is intentionally
|
||||||
|
submitted to Licensor for inclusion in the Work by the copyright owner
|
||||||
|
or by an individual or Legal Entity authorized to submit on behalf of
|
||||||
|
the copyright owner. For the purposes of this definition, "submitted"
|
||||||
|
means any form of electronic, verbal, or written communication sent
|
||||||
|
to the Licensor or its representatives, including but not limited to
|
||||||
|
communication on electronic mailing lists, source code control systems,
|
||||||
|
and issue tracking systems that are managed by, or on behalf of, the
|
||||||
|
Licensor for the purpose of discussing and improving the Work, but
|
||||||
|
excluding communication that is conspicuously marked or otherwise
|
||||||
|
designated in writing by the copyright owner as "Not a Contribution."
|
||||||
|
|
||||||
|
"Contributor" shall mean Licensor and any individual or Legal Entity
|
||||||
|
on behalf of whom a Contribution has been received by Licensor and
|
||||||
|
subsequently incorporated within the Work.
|
||||||
|
|
||||||
|
2. Grant of Copyright License. Subject to the terms and conditions of
|
||||||
|
this License, each Contributor hereby grants to You a perpetual,
|
||||||
|
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
|
||||||
|
copyright license to reproduce, prepare Derivative Works of,
|
||||||
|
publicly display, publicly perform, sublicense, and distribute the
|
||||||
|
Work and such Derivative Works in Source or Object form.
|
||||||
|
|
||||||
|
3. Grant of Patent License. Subject to the terms and conditions of
|
||||||
|
this License, each Contributor hereby grants to You a perpetual,
|
||||||
|
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
|
||||||
|
(except as stated in this section) patent license to make, have made,
|
||||||
|
use, offer to sell, sell, import, and otherwise transfer the Work,
|
||||||
|
where such license applies only to those patent claims licensable
|
||||||
|
by such Contributor that are necessarily infringed by their
|
||||||
|
Contribution(s) alone or by combination of their Contribution(s)
|
||||||
|
with the Work to which such Contribution(s) was submitted. If You
|
||||||
|
institute patent litigation against any entity (including a
|
||||||
|
cross-claim or counterclaim in a lawsuit) alleging that the Work
|
||||||
|
or a Contribution incorporated within the Work constitutes direct
|
||||||
|
or contributory patent infringement, then any patent licenses
|
||||||
|
granted to You under this License for that Work shall terminate
|
||||||
|
as of the date such litigation is filed.
|
||||||
|
|
||||||
|
4. Redistribution. You may reproduce and distribute copies of the
|
||||||
|
Work or Derivative Works thereof in any medium, with or without
|
||||||
|
modifications, and in Source or Object form, provided that You
|
||||||
|
meet the following conditions:
|
||||||
|
|
||||||
|
(a) You must give any other recipients of the Work or
|
||||||
|
Derivative Works a copy of this License; and
|
||||||
|
|
||||||
|
(b) You must cause any modified files to carry prominent notices
|
||||||
|
stating that You changed the files; and
|
||||||
|
|
||||||
|
(c) You must retain, in the Source form of any Derivative Works
|
||||||
|
that You distribute, all copyright, patent, trademark, and
|
||||||
|
attribution notices from the Source form of the Work,
|
||||||
|
excluding those notices that do not pertain to any part of
|
||||||
|
the Derivative Works; and
|
||||||
|
|
||||||
|
(d) If the Work includes a "NOTICE" text file as part of its
|
||||||
|
distribution, then any Derivative Works that You distribute must
|
||||||
|
include a readable copy of the attribution notices contained
|
||||||
|
within such NOTICE file, excluding those notices that do not
|
||||||
|
pertain to any part of the Derivative Works, in at least one
|
||||||
|
of the following places: within a NOTICE text file distributed
|
||||||
|
as part of the Derivative Works; within the Source form or
|
||||||
|
documentation, if provided along with the Derivative Works; or,
|
||||||
|
within a display generated by the Derivative Works, if and
|
||||||
|
wherever such third-party notices normally appear. The contents
|
||||||
|
of the NOTICE file are for informational purposes only and
|
||||||
|
do not modify the License. You may add Your own attribution
|
||||||
|
notices within Derivative Works that You distribute, alongside
|
||||||
|
or as an addendum to the NOTICE text from the Work, provided
|
||||||
|
that such additional attribution notices cannot be construed
|
||||||
|
as modifying the License.
|
||||||
|
|
||||||
|
You may add Your own copyright statement to Your modifications and
|
||||||
|
may provide additional or different license terms and conditions
|
||||||
|
for use, reproduction, or distribution of Your modifications, or
|
||||||
|
for any such Derivative Works as a whole, provided Your use,
|
||||||
|
reproduction, and distribution of the Work otherwise complies with
|
||||||
|
the conditions stated in this License.
|
||||||
|
|
||||||
|
5. Submission of Contributions. Unless You explicitly state otherwise,
|
||||||
|
any Contribution intentionally submitted for inclusion in the Work
|
||||||
|
by You to the Licensor shall be under the terms and conditions of
|
||||||
|
this License, without any additional terms or conditions.
|
||||||
|
Notwithstanding the above, nothing herein shall supersede or modify
|
||||||
|
the terms of any separate license agreement you may have executed
|
||||||
|
with Licensor regarding such Contributions.
|
||||||
|
|
||||||
|
6. Trademarks. This License does not grant permission to use the trade
|
||||||
|
names, trademarks, service marks, or product names of the Licensor,
|
||||||
|
except as required for reasonable and customary use in describing the
|
||||||
|
origin of the Work and reproducing the content of the NOTICE file.
|
||||||
|
|
||||||
|
7. Disclaimer of Warranty. Unless required by applicable law or
|
||||||
|
agreed to in writing, Licensor provides the Work (and each
|
||||||
|
Contributor provides its Contributions) on an "AS IS" BASIS,
|
||||||
|
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
|
||||||
|
implied, including, without limitation, any warranties or conditions
|
||||||
|
of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
|
||||||
|
PARTICULAR PURPOSE. You are solely responsible for determining the
|
||||||
|
appropriateness of using or redistributing the Work and assume any
|
||||||
|
risks associated with Your exercise of permissions under this License.
|
||||||
|
|
||||||
|
8. Limitation of Liability. In no event and under no legal theory,
|
||||||
|
whether in tort (including negligence), contract, or otherwise,
|
||||||
|
unless required by applicable law (such as deliberate and grossly
|
||||||
|
negligent acts) or agreed to in writing, shall any Contributor be
|
||||||
|
liable to You for damages, including any direct, indirect, special,
|
||||||
|
incidental, or consequential damages of any character arising as a
|
||||||
|
result of this License or out of the use or inability to use the
|
||||||
|
Work (including but not limited to damages for loss of goodwill,
|
||||||
|
work stoppage, computer failure or malfunction, or any and all
|
||||||
|
other commercial damages or losses), even if such Contributor
|
||||||
|
has been advised of the possibility of such damages.
|
||||||
|
|
||||||
|
9. Accepting Warranty or Additional Liability. While redistributing
|
||||||
|
the Work or Derivative Works thereof, You may choose to offer,
|
||||||
|
and charge a fee for, acceptance of support, warranty, indemnity,
|
||||||
|
or other liability obligations and/or rights consistent with this
|
||||||
|
License. However, in accepting such obligations, You may act only
|
||||||
|
on Your own behalf and on Your sole responsibility, not on behalf
|
||||||
|
of any other Contributor, and only if You agree to indemnify,
|
||||||
|
defend, and hold each Contributor harmless for any liability
|
||||||
|
incurred by, or claims asserted against, such Contributor by reason
|
||||||
|
of your accepting any such warranty or additional liability.
|
||||||
|
|
||||||
|
END OF TERMS AND CONDITIONS
|
||||||
|
|
||||||
|
APPENDIX: How to apply the Apache License to your work.
|
||||||
|
|
||||||
|
To apply the Apache License to your work, attach the following
|
||||||
|
boilerplate notice, with the fields enclosed by brackets "[]"
|
||||||
|
replaced with your own identifying information. (Don't include
|
||||||
|
the brackets!) The text should be enclosed in the appropriate
|
||||||
|
comment syntax for the file format. We also recommend that a
|
||||||
|
file or class name and description of purpose be included on the
|
||||||
|
same "printed page" as the copyright notice for easier
|
||||||
|
identification within third-party archives.
|
||||||
|
|
||||||
|
Copyright [yyyy] [name of copyright owner]
|
||||||
|
|
||||||
|
Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
you may not use this file except in compliance with the License.
|
||||||
|
You may obtain a copy of the License at
|
||||||
|
|
||||||
|
http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
|
||||||
|
Unless required by applicable law or agreed to in writing, software
|
||||||
|
distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
See the License for the specific language governing permissions and
|
||||||
|
limitations under the License.
|
Binary file not shown.
Binary file not shown.
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue