diff --git a/package.json b/package.json index fbd60a661..77ea51284 100644 --- a/package.json +++ b/package.json @@ -7,6 +7,7 @@ "scripts": { "start:api": "yarn workspace dbgate-api start", "start:api:portal": "yarn workspace dbgate-api start:portal", + "start:api:covid": "yarn workspace dbgate-api start:covid", "start:web": "yarn workspace dbgate-web start", "start:sqltree": "yarn workspace dbgate-sqltree start", "start:tools": "yarn workspace dbgate-tools start", diff --git a/packages/api/.covid-env b/packages/api/.covid-env new file mode 100644 index 000000000..d8b4c69f1 --- /dev/null +++ b/packages/api/.covid-env @@ -0,0 +1,10 @@ +CONNECTIONS=mysql + +LABEL_mysql=MySql +SERVER_mysql=dbgate.org +USER_mysql=reader +PASSWORD_mysql=CovidReader2020 +PORT_mysql=3326 +ENGINE_mysql=mysql@dbgate-plugin-mysql +SINGLE_CONNECTION=mysql +SINGLE_DATABASE=covid diff --git a/packages/api/package.json b/packages/api/package.json index 5edd9493f..f62cb079e 100644 --- a/packages/api/package.json +++ b/packages/api/package.json @@ -45,6 +45,7 @@ "scripts": { "start": "nodemon src/index.js", "start:portal": "env-cmd nodemon src/index.js", + "start:covid": "env-cmd -f .covid-env nodemon src/index.js", "ts": "tsc", "build": "webpack" }, diff --git a/packages/api/src/controllers/config.js b/packages/api/src/controllers/config.js index c4ddb3a19..c288d870f 100644 --- a/packages/api/src/controllers/config.js +++ b/packages/api/src/controllers/config.js @@ -15,6 +15,13 @@ module.exports = { runAsPortal: !!process.env.CONNECTIONS, toolbar, startupPages, + singleDatabase: + process.env.SINGLE_CONNECTION && process.env.SINGLE_DATABASE + ? { + conid: process.env.SINGLE_CONNECTION, + database: process.env.SINGLE_DATABASE, + } + : null, }; }, }; diff --git a/packages/web/src/utility/globalState.js b/packages/web/src/utility/globalState.js index 25a6c61a1..8975f6528 100644 --- a/packages/web/src/utility/globalState.js +++ b/packages/web/src/utility/globalState.js @@ -1,7 +1,7 @@ import _ from 'lodash'; import React from 'react'; import useStorage from './useStorage'; -import { useConnectionInfo, useConfig } from './metadataLoaders'; +import { useConnectionInfo, useConfig, getConnectionInfo } from './metadataLoaders'; import usePrevious from './usePrevious'; import useNewQuery from '../query/useNewQuery'; import useShowModal from '../modals/showModal'; @@ -48,11 +48,11 @@ function createStorageState(storageKey, defaultValue) { const [CurrentWidgetProvider, useCurrentWidget, useSetCurrentWidget] = createGlobalState('database'); export { CurrentWidgetProvider, useCurrentWidget, useSetCurrentWidget }; -const [CurrentDatabaseProvider, useCurrentDatabase, useSetCurrentDatabaseCore] = createGlobalState(null); +const [CurrentDatabaseProvider, useCurrentDatabaseCore, useSetCurrentDatabaseCore] = createGlobalState(null); function useSetCurrentDatabase() { const setDb = useSetCurrentDatabaseCore(); - const db = useCurrentDatabase(); + const db = useCurrentDatabaseCore(); return (value) => { if (_.get(db, 'name') !== _.get(value, 'name') || _.get(db, 'connection._id') != _.get(value, 'connection._id')) { setDb(value); @@ -60,6 +60,33 @@ function useSetCurrentDatabase() { }; } +function useCurrentDatabase() { + const config = useConfig(); + const db = useCurrentDatabaseCore(); + + const [connection, setConnection] = React.useState(null); + const loadSingleConnection = async () => { + if (config && config.singleDatabase) { + const conn = await getConnectionInfo({ conid: config.singleDatabase.conid }); + setConnection(conn); + } + }; + React.useEffect(() => { + loadSingleConnection(); + }, [config]); + + if (config && config.singleDatabase) { + if (connection) { + return { + connection, + name: config.singleDatabase.database, + }; + } + return null; + } + return db; +} + export { CurrentDatabaseProvider, useCurrentDatabase, useSetCurrentDatabase }; const [OpenedTabsProvider, useOpenedTabs, useSetOpenedTabs] = createStorageState('openedTabs', []); diff --git a/packages/web/src/widgets/DatabaseWidget.js b/packages/web/src/widgets/DatabaseWidget.js index 900b0cae4..cc3ba1b68 100644 --- a/packages/web/src/widgets/DatabaseWidget.js +++ b/packages/web/src/widgets/DatabaseWidget.js @@ -14,6 +14,7 @@ import { useServerStatus, useDatabaseStatus, useDatabaseInfo, + useConfig, } from '../utility/metadataLoaders'; import { SearchBoxWrapper, @@ -131,7 +132,11 @@ function SqlObjectListWrapper() { const db = useCurrentDatabase(); if (!db) { - return ; + return ( + + + + ); } const { name, connection } = db; @@ -141,11 +146,14 @@ function SqlObjectListWrapper() { } export default function DatabaseWidget() { + const config = useConfig(); return ( - - - + {!config.singleDatabase && ( + + + + )}