diff --git a/lerna.json b/lerna.json index 775d3d0..74f6dab 100644 --- a/lerna.json +++ b/lerna.json @@ -1,5 +1,5 @@ { - "version": "1.2.4", + "version": "1.2.5-alpha.1", "useWorkspaces": true, "npmClient": "yarn" } diff --git a/package.json b/package.json index c78cd30..f7f8834 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@dxos/console", - "version": "1.2.4-alpha.0", + "version": "1.2.5-alpha.0", "description": "Console", "main": "index.js", "private": true, diff --git a/packages/console-app/package.json b/packages/console-app/package.json index 36671a7..9addf3c 100644 --- a/packages/console-app/package.json +++ b/packages/console-app/package.json @@ -1,6 +1,6 @@ { "name": "@dxos/console-app", - "version": "1.2.4", + "version": "1.2.5-alpha.1", "description": "Kubenet Console Client", "repository": "https://github.com/dxos/console", "main": "dist/es/index.js", diff --git a/packages/console-app/src/components/Sidebar.js b/packages/console-app/src/components/Sidebar.js index fd81ea4..80a9337 100644 --- a/packages/console-app/src/components/Sidebar.js +++ b/packages/console-app/src/components/Sidebar.js @@ -4,13 +4,17 @@ import clsx from 'clsx'; import React from 'react'; +import { useQuery } from '@apollo/react-hooks'; import { useHistory, useParams } from 'react-router'; import { makeStyles } from '@material-ui/core'; import List from '@material-ui/core/List'; import ListItem from '@material-ui/core/ListItem'; import ListItemIcon from '@material-ui/core/ListItemIcon'; +import LinkIcon from '@material-ui/icons/ExitToApp'; import ListItemText from '@material-ui/core/ListItemText'; +import { useQueryStatusReducer } from '../hooks'; +import ADDON_LIST from '../gql/addon_list.graphql'; const useStyles = makeStyles(theme => ({ root: { @@ -39,6 +43,13 @@ const Sidebar = ({ modules: { services, settings } }) => { const history = useHistory(); const { module } = useParams(); + const { data: addonResponse } = useQueryStatusReducer(useQuery(ADDON_LIST)); + console.log(addonResponse); + if (!addonResponse) { + return null; + } + const addons = JSON.parse(addonResponse.addon_list.json); + const isSelected = path => path === `/${module}`; const Modules = ({ modules }) => ( @@ -54,9 +65,23 @@ const Sidebar = ({ modules: { services, settings } }) => { ); + const Addons = ({ addons }) => ( + + {addons.map(({ url, title }) => ( + { window.location = url; return true; }}> + + + + + + ))} + + ); + return (
+
); diff --git a/packages/console-app/src/gql/addon_list.graphql b/packages/console-app/src/gql/addon_list.graphql new file mode 100644 index 0000000..3079e1c --- /dev/null +++ b/packages/console-app/src/gql/addon_list.graphql @@ -0,0 +1,9 @@ +# +# Copyright 2020 DXOS.org +# + +query { + addon_list { + json + } +} diff --git a/packages/console-app/src/version.json b/packages/console-app/src/version.json index ef782c4..93851e5 100644 --- a/packages/console-app/src/version.json +++ b/packages/console-app/src/version.json @@ -1,7 +1,7 @@ { "build": { "name": "@dxos/console-app", - "buildDate": "2020-12-03T20:55:02.102Z", - "version": "1.2.4-alpha.3" + "buildDate": "2020-12-09T23:25:12.047Z", + "version": "1.2.5-alpha.0" } } diff --git a/packages/console-server/package.json b/packages/console-server/package.json index 5b60890..25a3462 100644 --- a/packages/console-server/package.json +++ b/packages/console-server/package.json @@ -1,6 +1,6 @@ { "name": "@dxos/console-server", - "version": "1.2.4", + "version": "1.2.5-alpha.1", "description": "Kubenet Console Server", "main": "dist/es/index.js", "bin": { @@ -31,7 +31,7 @@ "dependencies": { "@babel/polyfill": "^7.8.7", "@babel/runtime": "^7.8.7", - "@dxos/console-app": "^1.2.4", + "@dxos/console-app": "^1.2.5-alpha.1", "@wirelineio/wns-schema": "^0.1.1", "apollo-boost": "^0.4.9", "apollo-server-express": "^2.13.1", diff --git a/packages/console-server/src/gql/api.graphql b/packages/console-server/src/gql/api.graphql index 8ab636c..4f844b2 100644 --- a/packages/console-server/src/gql/api.graphql +++ b/packages/console-server/src/gql/api.graphql @@ -22,6 +22,7 @@ type Query { system_status: JSONResult! wns_status: JSONResult! bot_list: JSONResult! + addon_list: JSONResult! } type Mutation { diff --git a/packages/console-server/src/resolvers/addons.js b/packages/console-server/src/resolvers/addons.js new file mode 100644 index 0000000..2a90166 --- /dev/null +++ b/packages/console-server/src/resolvers/addons.js @@ -0,0 +1,37 @@ +// +// Copyright 2020 DXOS.org +// + +import childProcess from 'child_process'; + +// TODO(telackey): Make pluggable. +const ifRadicle = () => { + try { + const result = childProcess.execSync('docker ps -f "ancestor=dxos/radicle-seed-node" -q'); + if (result && result.toString()) { + return { title: 'Radicle', url: '/' }; + } + } catch (e) {} +}; + +// TODO(telackey): Use the local Sentry. +const ifSentry = () => { + return { + title: 'Sentry', + url: 'http://sentry.kube.dxos.network:9000/' + }; +}; + +export const addonResolvers = { + Query: { + addon_list: async (_, __, { config }) => { + return { + timestamp: new Date().toUTCString(), + json: JSON.stringify([ + ifRadicle(), + ifSentry() + ].filter(x => x)) + }; + } + } +}; diff --git a/packages/console-server/src/resolvers/index.js b/packages/console-server/src/resolvers/index.js index 65bd157..05f31bd 100644 --- a/packages/console-server/src/resolvers/index.js +++ b/packages/console-server/src/resolvers/index.js @@ -5,6 +5,7 @@ import debug from 'debug'; import defaultsDeep from 'lodash.defaultsdeep'; +import { addonResolvers } from './addons'; import { ipfsResolvers } from './ipfs'; import { systemResolvers } from './system'; import { logResolvers } from './log'; @@ -22,4 +23,4 @@ export const resolvers = defaultsDeep({ // TODO(burdon): Auth. // https://www.apollographql.com/docs/apollo-server/data/errors/#codes -}, ipfsResolvers, systemResolvers, logResolvers, botsResolvers); +}, ipfsResolvers, systemResolvers, logResolvers, botsResolvers, addonResolvers);