diff --git a/api/src/controllers/serverConnections.js b/api/src/controllers/serverConnections.js
index 1c5d731ef..ae37849e3 100644
--- a/api/src/controllers/serverConnections.js
+++ b/api/src/controllers/serverConnections.js
@@ -6,21 +6,25 @@ module.exports = {
opened: [],
handle_databases(id, { databases }) {
- const existing = this.opened.find(x => x.connection.id == id);
+ const existing = this.opened.find(x => x.id == id);
if (!existing) return;
existing.databases = databases;
socket.emit(`database-list-changed-${id}`);
},
+ handle_error(id, { error }) {
+ console.log(error);
+ },
async ensureOpened(id) {
- const existing = this.opened.find(x => x.connection.id == id);
+ const existing = this.opened.find(x => x.id == id);
if (existing) return existing;
- const connection = await connections.get(id);
+ const connection = await connections.get({ id });
const subprocess = fork(`${__dirname}/../proc/serverConnectionProcess.js`);
const newOpened = {
id,
subprocess,
databases: [],
+ connection,
};
this.opened.push(newOpened);
subprocess.on('message', ({ msgtype, ...message }) => {
diff --git a/api/src/index.js b/api/src/index.js
index 7194c9f3e..fe5753ff1 100644
--- a/api/src/index.js
+++ b/api/src/index.js
@@ -6,6 +6,7 @@ const io = require('socket.io');
const useController = require('./utility/useController');
const connections = require('./controllers/connections');
+const serverConnections = require('./controllers/serverConnections');
const socket = require('./utility/socket');
const app = express();
@@ -21,5 +22,6 @@ app.get('/', (req, res) => {
});
useController(app, '/connections', connections);
+useController(app, '/server-connections', serverConnections);
server.listen(3000);
diff --git a/api/src/proc/serverConnectionProcess.js b/api/src/proc/serverConnectionProcess.js
index 0250d43da..8856b8c41 100644
--- a/api/src/proc/serverConnectionProcess.js
+++ b/api/src/proc/serverConnectionProcess.js
@@ -11,9 +11,11 @@ async function handleRefreshDatabases() {
async function handleConnect(connection) {
storedConnection = connection;
- const driver = require(`../engines/${storedConnection.engine}/index`);
+
+ const driver = engines(storedConnection);
systemConnection = await driver.connect(storedConnection);
- setInterval(handleRefreshDatabases, 30 * 1000);
+ handleRefreshDatabases();
+ // setInterval(handleRefreshDatabases, 30 * 1000);
}
const messageHandlers = {
diff --git a/web/src/appobj/AppObjectList.js b/web/src/appobj/AppObjectList.js
new file mode 100644
index 000000000..0e804978d
--- /dev/null
+++ b/web/src/appobj/AppObjectList.js
@@ -0,0 +1,20 @@
+import React from 'react';
+import styled from 'styled-components';
+import { showMenu } from '../modals/DropDownMenu';
+import { AppObjectCore } from './AppObjects';
+
+export function AppObjectList({ list, makeAppObj, SubItems }) {
+ return (list || []).map(x => {
+ const appobj = makeAppObj(x);
+ let res = ;
+ if (SubItems) {
+ res = (
+ <>
+ {res}
+
+ >
+ );
+ }
+ return res;
+ });
+}
diff --git a/web/src/appobj/AppObjects.js b/web/src/appobj/AppObjects.js
index 366d62fc8..d3122f74c 100644
--- a/web/src/appobj/AppObjects.js
+++ b/web/src/appobj/AppObjects.js
@@ -36,10 +36,3 @@ export function AppObjectControl({ data, makeAppObj }) {
const appobj = makeAppObj(data);
return ;
}
-
-export function AppObjectList({ list, makeAppObj }) {
- return (list || []).map(x => {
- const appobj = makeAppObj(x);
- return ;
- });
-}
diff --git a/web/src/appobj/databaseAppObject.js b/web/src/appobj/databaseAppObject.js
new file mode 100644
index 000000000..20a01e169
--- /dev/null
+++ b/web/src/appobj/databaseAppObject.js
@@ -0,0 +1,29 @@
+import React from 'react';
+import { MicrosoftIcon, SqliteIcon, PostgreSqlIcon, MySqlIcon, ServerIcon, DatabaseIcon } from '../icons';
+import { DropDownMenuItem } from '../modals/DropDownMenu';
+import showModal from '../modals/showModal';
+import ConnectionModal from '../modals/ConnectionModal';
+import axios from '../utility/axios';
+
+function Menu({ data, makeAppObj }) {
+ const handleEdit = () => {
+ showModal(modalState => );
+ };
+ const handleDelete = () => {
+ axios.post('connections/delete', data);
+ };
+ return (
+ <>
+ Edit
+ Delete
+ >
+ );
+}
+
+export default function databaseAppObject({ name }) {
+ const title = name;
+ const key = name;
+ const Icon = DatabaseIcon;
+
+ return { title, key, Icon, Menu };
+}
diff --git a/web/src/widgets/DatabaseWidget.js b/web/src/widgets/DatabaseWidget.js
index 15024ab8b..bb232e89a 100644
--- a/web/src/widgets/DatabaseWidget.js
+++ b/web/src/widgets/DatabaseWidget.js
@@ -2,8 +2,18 @@ import React from 'react';
import useModalState from '../modals/useModalState';
import ConnectionModal from '../modals/ConnectionModal';
import useFetch from '../utility/useFetch';
-import { AppObjectList } from '../appobj/AppObjects';
+import { AppObjectList } from '../appobj/AppObjectList';
import connectionAppObject from '../appobj/connectionAppObject';
+import databaseAppObject from '../appobj/databaseAppObject';
+
+function SubDatabaseList({ data }) {
+ const { _id } = data;
+ const databases = useFetch({
+ url: `server-connections/list-databases?id=${_id}`,
+ reloadTrigger: `database-list-changed-${_id}`,
+ });
+ return
+}
export default function DatabaseWidget() {
const modalState = useModalState();
@@ -15,7 +25,7 @@ export default function DatabaseWidget() {
<>
-
+
>
);
}