single database configuration

This commit is contained in:
Jan Prochazka
2020-12-10 11:11:03 +01:00
parent 3921913742
commit 698756b9d2
6 changed files with 61 additions and 7 deletions

View File

@@ -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",

10
packages/api/.covid-env Normal file
View File

@@ -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

View File

@@ -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"
},

View File

@@ -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,
};
},
};

View File

@@ -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', []);

View File

@@ -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 <ErrorInfo message="Database not selected" icon="img alert" />;
return (
<WidgetsInnerContainer>
<ErrorInfo message="Database not selected" icon="img alert" />
</WidgetsInnerContainer>
);
}
const { name, connection } = db;
@@ -141,11 +146,14 @@ function SqlObjectListWrapper() {
}
export default function DatabaseWidget() {
const config = useConfig();
return (
<WidgetColumnBar>
<WidgetColumnBarItem title="Connections" name="connections" height="50%">
<ConnectionList />
</WidgetColumnBarItem>
{!config.singleDatabase && (
<WidgetColumnBarItem title="Connections" name="connections" height="50%">
<ConnectionList />
</WidgetColumnBarItem>
)}
<WidgetColumnBarItem title="Tables, views, functions" name="dbObjects">
<SqlObjectListWrapper />
</WidgetColumnBarItem>