diff --git a/packages/web/src/modals/DatabaseLoginModal.svelte b/packages/web/src/modals/DatabaseLoginModal.svelte
index be683f410..b90d1c012 100644
--- a/packages/web/src/modals/DatabaseLoginModal.svelte
+++ b/packages/web/src/modals/DatabaseLoginModal.svelte
@@ -30,6 +30,11 @@
export let conid;
export let passwordMode;
+ export let testedConnection;
+ export let onConnect = null;
+ export let onCancel = null;
+
+ $: usedPasswordMode = testedConnection?.passwordMode ?? passwordMode;
const values = writable({});
let connection;
@@ -39,19 +44,24 @@
const testIdRef = createRef(0);
let engineTitle;
+ let closedWithOk = false;
currentModalConid = conid;
onMount(async () => {
- connection = await getConnectionInfo({ conid });
- if (passwordMode == 'askPassword') {
+ if (testedConnection) {
+ connection = testedConnection;
+ } else {
+ connection = await getConnectionInfo({ conid });
+ }
+ if (usedPasswordMode == 'askPassword') {
$values = {
...$values,
user: connection.user,
connectionLabel: getConnectionLabel(connection),
};
}
- if (passwordMode == 'askUser') {
+ if (usedPasswordMode == 'askUser') {
$values = {
...$values,
connectionLabel: getConnectionLabel(connection),
@@ -64,6 +74,7 @@
onDestroy(() => {
currentModalConid = null;
+ if (onCancel && !closedWithOk) onCancel();
});
function handleCancelTest() {
@@ -72,6 +83,17 @@
}
async function handleSubmit(ev) {
+ if (onConnect) {
+ closedWithOk = true;
+ onConnect({
+ ...testedConnection,
+ user: usedPasswordMode == 'askUser' ? $values['user'] : testedConnection.user,
+ password: $values['password'],
+ });
+ closeCurrentModal();
+ return;
+ }
+
isTesting = true;
testIdRef.update(x => x + 1);
const testid = testIdRef.get();
@@ -104,8 +126,8 @@
label="Username"
name="user"
autocomplete="username"
- disabled={passwordMode == 'askPassword'}
- focused={passwordMode == 'askUser'}
+ disabled={usedPasswordMode == 'askPassword'}
+ focused={usedPasswordMode == 'askUser'}
saveOnInput
data-testid="DatabaseLoginModal_username"
/>
@@ -113,7 +135,7 @@
label="Password"
name="password"
autocomplete="current-password"
- focused={passwordMode == 'askPassword'}
+ focused={usedPasswordMode == 'askPassword'}
saveOnInput
data-testid="DatabaseLoginModal_password"
/>
diff --git a/packages/web/src/tabs/ConnectionTab.svelte b/packages/web/src/tabs/ConnectionTab.svelte
index 8af3bdf54..380659861 100644
--- a/packages/web/src/tabs/ConnectionTab.svelte
+++ b/packages/web/src/tabs/ConnectionTab.svelte
@@ -34,6 +34,7 @@
import { disconnectDatabaseConnection } from '../appobj/DatabaseAppObject.svelte';
import { useConfig } from '../utility/metadataLoaders';
import ConnectionAdvancedDriverFields from '../settings/ConnectionAdvancedDriverFields.svelte';
+ import DatabaseLoginModal from '../modals/DatabaseLoginModal.svelte';
export let connection;
export let tabid;
@@ -63,11 +64,26 @@
const testIdRef = createRef(0);
- async function handleTest(e, requestDbList = false) {
+ function handleTest(requestDbList = false) {
+ const connection = getCurrentConnection();
+ return new Promise((resolve, reject) => {
+ if (connection.passwordMode == 'askPassword' || connection.passwordMode == 'askUser') {
+ showModal(DatabaseLoginModal, {
+ testedConnection: connection,
+ onConnect: conn => handleTestCore(conn, requestDbList).then(res => resolve(res)),
+ onCancel: () => resolve(null),
+ });
+ } else {
+ return handleTestCore(connection, requestDbList);
+ }
+ });
+ }
+
+ async function handleTestCore(connection, requestDbList = false) {
isTesting = true;
testIdRef.update(x => x + 1);
const testid = testIdRef.get();
- const resp = await apiCall('connections/test', { connection: getCurrentConnection(), requestDbList });
+ const resp = await apiCall('connections/test', { connection, requestDbList });
if (testIdRef.get() != testid) return;
isTesting = false;
@@ -207,7 +223,7 @@
// $: console.log('CONN VALUES', $values);
async function getDatabaseList() {
- const resp = await handleTest({ detail: getCurrentConnection() }, true);
+ const resp = await handleTest(true);
if (resp && resp.msgtype == 'connected') {
return resp.databases;
}
@@ -257,7 +273,11 @@
data-testid="ConnectionTab_buttonCancelTest"
/>
{:else}
-
+ handleTest(false)}
+ data-testid="ConnectionTab_buttonDisconnect"
+ />
{/if}
{:else if isConnected}
@@ -266,7 +286,7 @@
{#if isTesting}
{:else}
-
+ handleTest(false)} data-testid="ConnectionTab_buttonTest" />
{/if}
{/if}