This commit is contained in:
Thomas E Lackey 2020-06-08 13:42:29 -05:00
parent 7f5f993758
commit d3772602c6
21 changed files with 74 additions and 76 deletions

View File

@ -22,7 +22,6 @@ export const graphqlApi = config => {
* @returns {ApolloClient} * @returns {ApolloClient}
*/ */
export const clientFactory = config => { export const clientFactory = config => {
// https://www.apollographql.com/docs/link/ // https://www.apollographql.com/docs/link/
const link = createHttpLink({ const link = createHttpLink({
uri: graphqlApi(config), uri: graphqlApi(config),

View File

@ -44,23 +44,23 @@ const AppBar = ({ config }) => {
return ( return (
<> <>
<MuiAppBar position="fixed"> <MuiAppBar position='fixed'>
<Toolbar> <Toolbar>
<Link href="/"> <Link href='/'>
<div className={classes.logo}> <div className={classes.logo}>
<DxOSIcon /> <DxOSIcon />
</div> </div>
</Link> </Link>
<div className={classes.title}> <div className={classes.title}>
<Typography variant="h6">{config.app.title}</Typography> <Typography variant='h6'>{config.app.title}</Typography>
</div> </div>
<div> <div>
<Link <Link
className={classes.link} className={classes.link}
href={graphqlApi(config)} href={graphqlApi(config)}
rel="noreferrer" rel='noreferrer'
target="_blank" target='_blank'
title="Console GraphQL" title='Console GraphQL'
> >
<GraphQLIcon /> <GraphQLIcon />
</Link> </Link>

View File

@ -12,19 +12,19 @@ const ControlButtons = ({ onStart, onStop, onOpen }) => {
return ( return (
<div> <div>
{onStart && ( {onStart && (
<IconButton onClick={onStart} title="Restart"> <IconButton onClick={onStart} title='Restart'>
<StartIcon /> <StartIcon />
</IconButton> </IconButton>
)} )}
{onStop && ( {onStop && (
<IconButton onClick={onStop} title="Stop"> <IconButton onClick={onStop} title='Stop'>
<StopIcon /> <StopIcon />
</IconButton> </IconButton>
)} )}
{onOpen && ( {onOpen && (
<IconButton onClick={onOpen} title="Open console"> <IconButton onClick={onOpen} title='Open console'>
<OpenIcon /> <OpenIcon />
</IconButton> </IconButton>
)} )}

View File

@ -38,7 +38,7 @@ const Error = ({ error, ...rest }) => {
TransitionProps={{ exit: false }} TransitionProps={{ exit: false }}
autoHideDuration={1000} autoHideDuration={1000}
> >
<Alert classes={{ root: classes.alert }} severity="error" {...rest} onClose={handleClose}> <Alert classes={{ root: classes.alert }} severity='error' {...rest} onClose={handleClose}>
<AlertTitle>Error</AlertTitle> <AlertTitle>Error</AlertTitle>
<div>{message}</div> <div>{message}</div>
</Alert> </Alert>

View File

@ -51,9 +51,9 @@ const Log = ({ log = [] }) => {
const classes = useStyles(); const classes = useStyles();
const levels = { const levels = {
'I': { label: 'INFO', className: classes.level_info }, I: { label: 'INFO', className: classes.level_info },
'W': { label: 'WARN', className: classes.level_warn }, W: { label: 'WARN', className: classes.level_warn },
'E': { label: 'ERROR', className: classes.level_error } E: { label: 'ERROR', className: classes.level_error }
}; };
// TODO(burdon): Parse in backend and normalize numbers. // TODO(burdon): Parse in backend and normalize numbers.
@ -84,7 +84,7 @@ const Log = ({ log = [] }) => {
const datetime = transform(rest).format('YYYY-MM-DD HH:mm:ss'); const datetime = transform(rest).format('YYYY-MM-DD HH:mm:ss');
const text = match[match.length - 1]; const text = match[match.length - 1];
const { label, className } = levels[level] || levels['I']; const { label, className } = levels[level] || levels.I;
const pkg = levels[level] ? '' : `[${level}]: `; const pkg = levels[level] ? '' : `[${level}]: `;
message = ( message = (

View File

@ -17,7 +17,7 @@ const PackageLink = ({ config, type, pkg }) => {
// TODO(burdon): Pass in expected arg types. // TODO(burdon): Pass in expected arg types.
if (typeof pkg === 'string') { if (typeof pkg === 'string') {
const ipfsUrl = getServiceUrl(config, 'ipfs.gateway', { path: `${pkg}` }); const ipfsUrl = getServiceUrl(config, 'ipfs.gateway', { path: `${pkg}` });
return <Link href={ipfsUrl} target="ipfs">{pkg}</Link>; return <Link href={ipfsUrl} target='ipfs'>{pkg}</Link>;
} }
// eslint-disable-next-line default-case // eslint-disable-next-line default-case
@ -34,7 +34,7 @@ const PackageLink = ({ config, type, pkg }) => {
key={`${cid}`} key={`${cid}`}
href={ipfsUrl} href={ipfsUrl}
title={cid} title={cid}
target="ipfs" target='ipfs'
> >
{platform}/{arch}: {cid} {platform}/{arch}: {cid}
</Link> </Link>

View File

@ -16,7 +16,7 @@ const useStyles = makeStyles(theme => ({
display: 'flex', display: 'flex',
flex: 1, flex: 1,
flexDirection: 'column', flexDirection: 'column',
justifyContent: 'space-between', justifyContent: 'space-between'
// backgroundColor: theme.palette.grey[100] // backgroundColor: theme.palette.grey[100]
}, },
@ -42,7 +42,7 @@ const Sidebar = ({ modules: { services, settings } }) => {
const isSelected = path => path === `/${module}`; const isSelected = path => path === `/${module}`;
const Modules = ({ modules }) => ( const Modules = ({ modules }) => (
<List aria-label="items" className={classes.list}> <List aria-label='items' className={classes.list}>
{modules.map(({ path, title, icon: Icon }) => ( {modules.map(({ path, title, icon: Icon }) => (
<ListItem button selected={isSelected(path)} key={path} onClick={() => history.push(path)}> <ListItem button selected={isSelected(path)} key={path} onClick={() => history.push(path)}>
<ListItemIcon classes={{ root: classes.icon }}> <ListItemIcon classes={{ root: classes.icon }}>

View File

@ -31,7 +31,7 @@ const Table = ({ children }) => {
return ( return (
<TableContainer className={classes.root}> <TableContainer className={classes.root}>
<MuiTable stickyHeader size="small" className={classes.table}> <MuiTable stickyHeader size='small' className={classes.table}>
{children} {children}
</MuiTable> </MuiTable>
</TableContainer> </TableContainer>

View File

@ -44,19 +44,19 @@ const Main = ({ config }) => {
<CssBaseline /> <CssBaseline />
<HashRouter> <HashRouter>
<Switch> <Switch>
<Route path="/:module"> <Route path='/:module'>
<Layout> <Layout>
<Route path="/apps" component={AppRecords} /> <Route path='/apps' component={AppRecords} />
<Route path="/bots" component={Bots} /> <Route path='/bots' component={Bots} />
<Route path="/config" component={Config} /> <Route path='/config' component={Config} />
<Route path="/ipfs" component={IPFS} /> <Route path='/ipfs' component={IPFS} />
<Route path="/metadata" component={Metadata} /> <Route path='/metadata' component={Metadata} />
<Route path="/signaling" component={Signaling} /> <Route path='/signaling' component={Signaling} />
<Route path="/status" component={Status} /> <Route path='/status' component={Status} />
<Route path="/wns" component={WNS} /> <Route path='/wns' component={WNS} />
</Layout> </Layout>
</Route> </Route>
<Redirect to="/status" /> <Redirect to='/status' />
</Switch> </Switch>
</HashRouter> </HashRouter>
</ThemeProvider> </ThemeProvider>

View File

@ -103,7 +103,7 @@ const StatusBar = () => {
<> <>
<Toolbar className={classes.root}> <Toolbar className={classes.root}>
<div className={classes.left}> <div className={classes.left}>
<Link className={classes.link} href={config.app.website} rel="noreferrer" target="_blank"> <Link className={classes.link} href={config.app.website} rel='noreferrer' target='_blank'>
<PublicIcon /> <PublicIcon />
</Link> </Link>
</div> </div>

View File

@ -13,8 +13,7 @@ const Signal = () => {
const classes = useStyles(); const classes = useStyles();
return ( return (
<div className={classes.root}> <div className={classes.root} />
</div>
); );
}; };

View File

@ -13,8 +13,7 @@ const Signaling = () => {
const classes = useStyles(); const classes = useStyles();
return ( return (
<div className={classes.root}> <div className={classes.root} />
</div>
); );
}; };

View File

@ -56,8 +56,8 @@ const AppRecords = () => {
<TableHead> <TableHead>
<TableRow> <TableRow>
<TableCell onClick={sortBy('name')}>Identifier</TableCell> <TableCell onClick={sortBy('name')}>Identifier</TableCell>
<TableCell onClick={sortBy('version')} size="small">Version</TableCell> <TableCell onClick={sortBy('version')} size='small'>Version</TableCell>
<TableCell onClick={sortBy('createTime')} size="small">Created</TableCell> <TableCell onClick={sortBy('createTime')} size='small'>Created</TableCell>
<TableCell onClick={sortBy('attributes.displayName')}>Name</TableCell> <TableCell onClick={sortBy('attributes.displayName')}>Name</TableCell>
<TableCell>Link</TableCell> <TableCell>Link</TableCell>
</TableRow> </TableRow>
@ -67,7 +67,7 @@ const AppRecords = () => {
const link = getAppUrl({ id, name, version, publicUrl }); const link = getAppUrl({ id, name, version, publicUrl });
return ( return (
<TableRow key={id} size="small"> <TableRow key={id} size='small'>
<TableCell monospace>{name}</TableCell> <TableCell monospace>{name}</TableCell>
<TableCell monospace>{version}</TableCell> <TableCell monospace>{version}</TableCell>
<TableCell>{moment.utc(createTime).fromNow()}</TableCell> <TableCell>{moment.utc(createTime).fromNow()}</TableCell>

View File

@ -19,6 +19,7 @@ const useStyles = makeStyles(theme => ({
})); }));
const Apps = () => { const Apps = () => {
// eslint-disable-next-line
const classes = useStyles(); const classes = useStyles();
const [tab, setTab] = useState(TAB_RECORDS); const [tab, setTab] = useState(TAB_RECORDS);
@ -27,7 +28,7 @@ const Apps = () => {
toolbar={ toolbar={
<Toolbar> <Toolbar>
<Tabs value={tab} onChange={(_, value) => setTab(value)}> <Tabs value={tab} onChange={(_, value) => setTab(value)}>
<Tab value={TAB_RECORDS} label="Records" /> <Tab value={TAB_RECORDS} label='Records' />
</Tabs> </Tabs>
</Toolbar> </Toolbar>
} }

View File

@ -36,8 +36,8 @@ const AppRecords = () => {
<TableHead> <TableHead>
<TableRow> <TableRow>
<TableCell onClick={sortBy('name')}>Identifier</TableCell> <TableCell onClick={sortBy('name')}>Identifier</TableCell>
<TableCell onClick={sortBy('version')} size="small">Version</TableCell> <TableCell onClick={sortBy('version')} size='small'>Version</TableCell>
<TableCell onClick={sortBy('createTime')} size="small">Created</TableCell> <TableCell onClick={sortBy('createTime')} size='small'>Created</TableCell>
<TableCell onClick={sortBy('attributes.displayName')}>Name</TableCell> <TableCell onClick={sortBy('attributes.displayName')}>Name</TableCell>
<TableCell /> <TableCell />
</TableRow> </TableRow>
@ -45,7 +45,7 @@ const AppRecords = () => {
<TableBody> <TableBody>
{records.sort(sorter).map(({ id, name, version, createTime, attributes: { displayName } }) => { {records.sort(sorter).map(({ id, name, version, createTime, attributes: { displayName } }) => {
return ( return (
<TableRow key={id} size="small"> <TableRow key={id} size='small'>
<TableCell monospace>{name}</TableCell> <TableCell monospace>{name}</TableCell>
<TableCell monospace>{version}</TableCell> <TableCell monospace>{version}</TableCell>
<TableCell>{moment.utc(createTime).fromNow()}</TableCell> <TableCell>{moment.utc(createTime).fromNow()}</TableCell>

View File

@ -19,6 +19,7 @@ const useStyles = makeStyles(theme => ({
})); }));
const Apps = () => { const Apps = () => {
// eslint-disable-next-line
const classes = useStyles(); const classes = useStyles();
const [tab, setTab] = useState(TAB_RECORDS); const [tab, setTab] = useState(TAB_RECORDS);
@ -27,7 +28,7 @@ const Apps = () => {
toolbar={ toolbar={
<Toolbar> <Toolbar>
<Tabs value={tab} onChange={(_, value) => setTab(value)}> <Tabs value={tab} onChange={(_, value) => setTab(value)}>
<Tab value={TAB_RECORDS} label="Records" /> <Tab value={TAB_RECORDS} label='Records' />
</Tabs> </Tabs>
</Toolbar> </Toolbar>
} }

View File

@ -48,9 +48,9 @@ const WNS = () => {
toolbar={ toolbar={
<Toolbar> <Toolbar>
<Tabs value={tab} onChange={(_, value) => setTab(value)}> <Tabs value={tab} onChange={(_, value) => setTab(value)}>
<Tab value={TAB_RECORDS} label="Records" /> <Tab value={TAB_RECORDS} label='Records' />
<Tab value={TAB_STATUS} label="Status" /> <Tab value={TAB_STATUS} label='Status' />
<Tab value={TAB_LOG} label="Log" /> <Tab value={TAB_LOG} label='Log' />
</Tabs> </Tabs>
{tab === TAB_RECORDS && ( {tab === TAB_RECORDS && (

View File

@ -2,9 +2,8 @@
// Copyright 2020 DxOS.org // Copyright 2020 DxOS.org
// //
import get from 'lodash.get';
import moment from 'moment'; import moment from 'moment';
import React, { useContext, useState } from 'react'; import React, { useContext } from 'react';
import { useQuery } from '@apollo/react-hooks'; import { useQuery } from '@apollo/react-hooks';
import { makeStyles } from '@material-ui/core'; import { makeStyles } from '@material-ui/core';
import ButtonGroup from '@material-ui/core/ButtonGroup'; import ButtonGroup from '@material-ui/core/ButtonGroup';
@ -45,10 +44,10 @@ export const WNSRecordType = ({ type = types[0].key, onChanged }) => {
<ButtonGroup <ButtonGroup
disableRipple disableRipple
disableFocusRipple disableFocusRipple
variant="outlined" variant='outlined'
color="primary" color='primary'
size="small" size='small'
aria-label="text primary button group" aria-label='text primary button group'
> >
{types.map(t => ( {types.map(t => (
<Button <Button
@ -81,10 +80,10 @@ const WNSRecords = ({ type }) => {
<Table> <Table>
<TableHead> <TableHead>
<TableRow> <TableRow>
<TableCell onClick={sortBy('type')} size="small">Type</TableCell> <TableCell onClick={sortBy('type')} size='small'>Type</TableCell>
<TableCell onClick={sortBy('name')}>Identifier</TableCell> <TableCell onClick={sortBy('name')}>Identifier</TableCell>
<TableCell onClick={sortBy('version')} size="small">Version</TableCell> <TableCell onClick={sortBy('version')} size='small'>Version</TableCell>
<TableCell onClick={sortBy('createTime')} size="small">Created</TableCell> <TableCell onClick={sortBy('createTime')} size='small'>Created</TableCell>
<TableCell onClick={sortBy('attributes.displayName')}>Name</TableCell> <TableCell onClick={sortBy('attributes.displayName')}>Name</TableCell>
<TableCell onClick={sortBy('attributes.package')}>Package Hash</TableCell> <TableCell onClick={sortBy('attributes.package')}>Package Hash</TableCell>
</TableRow> </TableRow>
@ -92,7 +91,7 @@ const WNSRecords = ({ type }) => {
<TableBody> <TableBody>
{records.sort(sorter) {records.sort(sorter)
.map(({ id, type, name, version, createTime, attributes: { displayName, package: pkg } }) => ( .map(({ id, type, name, version, createTime, attributes: { displayName, package: pkg } }) => (
<TableRow key={id} size="small"> <TableRow key={id} size='small'>
<TableCell monospace>{type}</TableCell> <TableCell monospace>{type}</TableCell>
<TableCell monospace>{name}</TableCell> <TableCell monospace>{name}</TableCell>
<TableCell monospace>{version}</TableCell> <TableCell monospace>{version}</TableCell>

View File

@ -6,31 +6,31 @@ import React from 'react';
import SvgIcon from '@material-ui/core/SvgIcon'; import SvgIcon from '@material-ui/core/SvgIcon';
const Icon = (props) => ( const Icon = (props) => (
<SvgIcon {...props} viewBox="0 0 512 256"> <SvgIcon {...props} viewBox='0 0 512 256'>
<g transform="matrix(1,0,0,1,-187.374,-7.5)"> <g transform='matrix(1,0,0,1,-187.374,-7.5)'>
<g transform="matrix(0.936373,0,0,0.906495,295.947,135.5)"> <g transform='matrix(0.936373,0,0,0.906495,295.947,135.5)'>
<path <path
d="M0,-0.233C0,-27.435 -16.74,-48.591 -48.359,-48.591L-76.722,-48.591L-76.722,48.358L-48.59,48.358C-17.902,48.358 0,26.271 0,-0.233M-109.736,77.419L-109.736,-77.652L-48.59,-77.652C0,-77.652 33.711,-46.731 33.711,-0.233C33.711,46.73 0,77.419 -48.359,77.419L-109.736,77.419Z" d='M0,-0.233C0,-27.435 -16.74,-48.591 -48.359,-48.591L-76.722,-48.591L-76.722,48.358L-48.59,48.358C-17.902,48.358 0,26.271 0,-0.233M-109.736,77.419L-109.736,-77.652L-48.59,-77.652C0,-77.652 33.711,-46.731 33.711,-0.233C33.711,46.73 0,77.419 -48.359,77.419L-109.736,77.419Z'
/> />
</g> </g>
<g transform="matrix(0.936373,0,0,0.906495,530.058,135.499)"> <g transform='matrix(0.936373,0,0,0.906495,530.058,135.499)'>
<path <path
d="M0,0.002C0,-29.06 -18.367,-50.914 -46.964,-50.914C-75.793,-50.914 -94.16,-29.06 -94.16,0.002C-94.16,28.83 -75.793,50.917 -46.964,50.917C-18.367,50.917 0,28.83 0,0.002M-128.104,0.002C-128.104,-46.729 -93.927,-80.208 -46.964,-80.208C-0.233,-80.208 33.942,-46.729 33.942,0.002C33.942,46.731 -0.233,80.21 -46.964,80.21C-93.927,80.21 -128.104,46.731 -128.104,0.002" d='M0,0.002C0,-29.06 -18.367,-50.914 -46.964,-50.914C-75.793,-50.914 -94.16,-29.06 -94.16,0.002C-94.16,28.83 -75.793,50.917 -46.964,50.917C-18.367,50.917 0,28.83 0,0.002M-128.104,0.002C-128.104,-46.729 -93.927,-80.208 -46.964,-80.208C-0.233,-80.208 33.942,-46.729 33.942,0.002C33.942,46.731 -0.233,80.21 -46.964,80.21C-93.927,80.21 -128.104,46.731 -128.104,0.002'
/> />
</g> </g>
<g transform="matrix(0.936373,0,0,0.906495,573.603,85.3412)"> <g transform='matrix(0.936373,0,0,0.906495,573.603,85.3412)'>
<path <path
d="M0,110.898L18.134,85.092C29.062,96.484 46.034,106.249 67.422,106.249C85.789,106.249 94.392,98.111 94.392,89.044C94.392,62.075 5.115,80.907 5.115,22.551C5.115,-3.255 27.434,-24.644 63.935,-24.644C88.579,-24.644 109.039,-17.204 124.383,-3.022L106.017,21.622C93.462,9.997 76.723,4.65 60.913,4.65C46.964,4.65 39.059,10.695 39.059,19.994C39.059,44.406 128.103,27.898 128.103,85.789C128.103,114.153 107.644,135.542 66.028,135.542C36.036,135.542 14.648,125.544 0,110.898" d='M0,110.898L18.134,85.092C29.062,96.484 46.034,106.249 67.422,106.249C85.789,106.249 94.392,98.111 94.392,89.044C94.392,62.075 5.115,80.907 5.115,22.551C5.115,-3.255 27.434,-24.644 63.935,-24.644C88.579,-24.644 109.039,-17.204 124.383,-3.022L106.017,21.622C93.462,9.997 76.723,4.65 60.913,4.65C46.964,4.65 39.059,10.695 39.059,19.994C39.059,44.406 128.103,27.898 128.103,85.789C128.103,114.153 107.644,135.542 66.028,135.542C36.036,135.542 14.648,125.544 0,110.898'
/> />
</g> </g>
<g transform="matrix(0.936373,0,0,0.906495,368.158,65.109)"> <g transform='matrix(0.936373,0,0,0.906495,368.158,65.109)'>
<path <path
d="M0,56.844L-36.496,0L36.496,0L0,56.844Z" d='M0,56.844L-36.496,0L36.496,0L0,56.844Z'
/> />
</g> </g>
<g transform="matrix(0.936373,0,0,0.906495,368.158,205.681)"> <g transform='matrix(0.936373,0,0,0.906495,368.158,205.681)'>
<path <path
d="M0,-56.845L-36.496,0L36.496,0L0,-56.845Z" d='M0,-56.845L-36.496,0L36.496,0L0,-56.845Z'
/> />
</g> </g>
</g> </g>

View File

@ -8,26 +8,26 @@ import SvgIcon from '@material-ui/core/SvgIcon';
// TODO(burdon): Fixed color? // TODO(burdon): Fixed color?
const Icon = (props) => ( const Icon = (props) => (
<SvgIcon {...props} viewBox="0 0 256 256"> <SvgIcon {...props} viewBox='0 0 256 256'>
<g transform="matrix(1,0,0,1,-160,-124)"> <g transform='matrix(1,0,0,1,-160,-124)'>
<path <path
d="M282.254,147.134L195.254,194.589C191.399,196.692 189,200.732 189,205.124L189,298.876C189,303.268 191.399,307.308 195.254,309.411L282.254,356.866C285.836,358.819 290.164,358.819 293.746,356.866L380.746,309.411C384.601,307.308 387,303.268 387,298.876L387,205.124C387,200.732 384.601,196.692 380.746,194.589L293.746,147.134C290.164,145.181 285.836,145.181 282.254,147.134Z" d='M282.254,147.134L195.254,194.589C191.399,196.692 189,200.732 189,205.124L189,298.876C189,303.268 191.399,307.308 195.254,309.411L282.254,356.866C285.836,358.819 290.164,358.819 293.746,356.866L380.746,309.411C384.601,307.308 387,303.268 387,298.876L387,205.124C387,200.732 384.601,196.692 380.746,194.589L293.746,147.134C290.164,145.181 285.836,145.181 282.254,147.134Z'
style={{ fill: 'none', fillRule: 'nonzero', stroke: 'rgb(0,68,121)', strokeWidth: '12px' }} style={{ fill: 'none', fillRule: 'nonzero', stroke: 'rgb(0,68,121)', strokeWidth: '12px' }}
/> />
<path <path
d="M288,252L216,216" d='M288,252L216,216'
style={{ fill: 'none', fillRule: 'nonzero', stroke: 'rgb(0,68,121)', strokeWidth: '8px', strokeLinejoin: 'round' }} style={{ fill: 'none', fillRule: 'nonzero', stroke: 'rgb(0,68,121)', strokeWidth: '8px', strokeLinejoin: 'round' }}
/> />
<path <path
d="M216,288L288,252" d='M216,288L288,252'
style={{ fill: 'none', fillRule: 'nonzero', stroke: 'rgb(0,68,121)', strokeWidth: '8px', strokeLinejoin: 'round' }} style={{ fill: 'none', fillRule: 'nonzero', stroke: 'rgb(0,68,121)', strokeWidth: '8px', strokeLinejoin: 'round' }}
/> />
<path <path
d="M360,288L288,252" d='M360,288L288,252'
style={{ fill: 'none', fillRule: 'nonzero', stroke: 'rgb(0,68,121)', strokeWidth: '8px', strokeLinejoin: 'round' }} style={{ fill: 'none', fillRule: 'nonzero', stroke: 'rgb(0,68,121)', strokeWidth: '8px', strokeLinejoin: 'round' }}
/> />
<path <path
d="M360,216L288,252" d='M360,216L288,252'
style={{ fill: 'none', fillRule: 'nonzero', stroke: 'rgb(0,68,121)', strokeWidth: '8px', strokeLinejoin: 'round' }} style={{ fill: 'none', fillRule: 'nonzero', stroke: 'rgb(0,68,121)', strokeWidth: '8px', strokeLinejoin: 'round' }}
/> />
</g> </g>

View File

@ -13,7 +13,7 @@ export const omitDeep = (value, key) => {
} }
return Object.assign({ return Object.assign({
[k]: omitDeep(value[k], key), [k]: omitDeep(value[k], key)
}, newObject); }, newObject);
}, {}); }, {});
} }