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() { <> - + ); }