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}