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);