diff --git a/packages/api/src/controllers/connections.js b/packages/api/src/controllers/connections.js
index 8480c24a6..4252cc4a5 100644
--- a/packages/api/src/controllers/connections.js
+++ b/packages/api/src/controllers/connections.js
@@ -222,7 +222,7 @@ module.exports = {
},
test_meta: true,
- test(connection) {
+ test({ connection, requestDbList }) {
const subprocess = fork(
global['API_PACKAGE'] || process.argv[1],
[
@@ -237,7 +237,7 @@ module.exports = {
}
);
pipeForkLogs(subprocess);
- subprocess.send(connection);
+ subprocess.send({ connection, requestDbList });
return new Promise(resolve => {
subprocess.on('message', resp => {
if (handleProcessCommunication(resp, subprocess)) return;
diff --git a/packages/api/src/proc/connectProcess.js b/packages/api/src/proc/connectProcess.js
index f575acdd4..a0dbf910c 100644
--- a/packages/api/src/proc/connectProcess.js
+++ b/packages/api/src/proc/connectProcess.js
@@ -16,13 +16,19 @@ Platform: ${process.platform}
function start() {
childProcessChecker();
- process.on('message', async connection => {
+ process.on('message', async args => {
+ // @ts-ignore
+ const { connection, requestDbList } = args;
if (handleProcessCommunication(connection)) return;
try {
const driver = requireEngineDriver(connection);
const dbhan = await connectUtility(driver, connection, 'app');
const res = await driver.getVersion(dbhan);
- process.send({ msgtype: 'connected', ...res });
+ let databases = undefined;
+ if (requestDbList) {
+ databases = await driver.listDatabases(dbhan);
+ }
+ process.send({ msgtype: 'connected', ...res, databases });
await driver.close(dbhan);
} catch (e) {
console.error(e);
diff --git a/packages/web/src/buttons/DropDownButton.svelte b/packages/web/src/buttons/DropDownButton.svelte
index 07b339022..beb4a0c81 100644
--- a/packages/web/src/buttons/DropDownButton.svelte
+++ b/packages/web/src/buttons/DropDownButton.svelte
@@ -7,21 +7,32 @@
export let icon = 'icon chevron-down';
export let menu;
+ export let asyncMenu = undefined;
export let narrow = false;
export let square = true;
export let disabled = false;
- let domButton;
- function handleClick() {
+ let domButton;
+ let isLoading = false;
+
+ async function handleClick() {
if (disabled) return;
+ let items = menu;
+
+ if (asyncMenu) {
+ isLoading = true;
+ items = await asyncMenu();
+ isLoading = false;
+ }
+
const rect = domButton.getBoundingClientRect();
const left = rect.left;
const top = rect.bottom;
- currentDropDownMenu.set({ left, top, items: menu });
+ currentDropDownMenu.set({ left, top, items });
}