connection modal supports file database

This commit is contained in:
Jan Prochazka
2021-04-25 20:38:41 +02:00
parent d1bf2dbc4b
commit 3c089a5b81
3 changed files with 90 additions and 79 deletions

View File

@@ -16,12 +16,20 @@
import createRef from '../utility/createRef'; import createRef from '../utility/createRef';
import Link from '../elements/Link.svelte'; import Link from '../elements/Link.svelte';
import ErrorMessageModal from './ErrorMessageModal.svelte'; import ErrorMessageModal from './ErrorMessageModal.svelte';
import { writable } from 'svelte/store';
import FormProviderCore from '../forms/FormProviderCore.svelte';
import { extensions } from '../stores';
export let connection; export let connection;
let isTesting; let isTesting;
let sqlConnectResult; let sqlConnectResult;
const values = writable(connection || { server: 'localhost', engine: 'mssql@dbgate-plugin-mssql' });
$: engine = $values.engine;
$: driver = $extensions.drivers.find(x => x.engine == engine);
const testIdRef = createRef(0); const testIdRef = createRef(0);
async function handleTest(e) { async function handleTest(e) {
@@ -49,10 +57,7 @@
} }
</script> </script>
<FormProvider <FormProviderCore template={FormFieldTemplateLarge} {values}>
template={FormFieldTemplateLarge}
initialValues={connection || { server: 'localhost', engine: 'mssql@dbgate-plugin-mssql' }}
>
<ModalBase {...$$restProps} noPadding> <ModalBase {...$$restProps} noPadding>
<div slot="header">Add connection</div> <div slot="header">Add connection</div>
@@ -63,11 +68,11 @@
label: 'Main', label: 'Main',
component: ConnectionModalDriverFields, component: ConnectionModalDriverFields,
}, },
{ !driver?.isFileDatabase && {
label: 'SSH Tunnel', label: 'SSH Tunnel',
component: ConnectionModalSshTunnelFields, component: ConnectionModalSshTunnelFields,
}, },
{ !driver?.isFileDatabase && {
label: 'SSL', label: 'SSL',
component: ConnectionModalSslFields, component: ConnectionModalSslFields,
}, },
@@ -114,7 +119,7 @@
</div> </div>
</div> </div>
</ModalBase> </ModalBase>
</FormProvider> </FormProviderCore>
<style> <style>
.buttons { .buttons {

View File

@@ -1,5 +1,6 @@
<script lang="ts"> <script lang="ts">
import FormCheckboxField from '../forms/FormCheckboxField.svelte'; import FormCheckboxField from '../forms/FormCheckboxField.svelte';
import FormElectronFileSelector from '../forms/FormElectronFileSelector.svelte';
import FormPasswordField from '../forms/FormPasswordField.svelte'; import FormPasswordField from '../forms/FormPasswordField.svelte';
@@ -9,7 +10,7 @@
import FormTextField from '../forms/FormTextField.svelte'; import FormTextField from '../forms/FormTextField.svelte';
import { extensions } from '../stores'; import { extensions } from '../stores';
import getElectron from '../utility/getElectron'; import getElectron from '../utility/getElectron';
import { useAuthTypes } from '../utility/metadataLoaders'; import { useAuthTypes } from '../utility/metadataLoaders';
const { values } = getFormContext(); const { values } = getFormContext();
@@ -39,87 +40,91 @@ import getElectron from '../utility/getElectron';
]} ]}
/> />
{#if driver?.supportsDatabaseUrl} {#if driver?.isFileDatabase}
<div class="radio"> <FormElectronFileSelector label="Database file" name="databaseFile" disabled={!electron} />
<FormRadioGroupField
name="useDatabaseUrl"
options={[
{ label: 'Fill database connection details', value: '', default: true },
{ label: 'Use database URL', value: '1' },
]}
/>
</div>
{/if}
{#if driver?.supportsDatabaseUrl && useDatabaseUrl}
<FormTextField label="Database URL" name="databaseUrl" placeholder={driver?.databaseUrlPlaceholder} />
{:else} {:else}
{#if $authTypes} {#if driver?.supportsDatabaseUrl}
<FormSelectField <div class="radio">
label="Authentication" <FormRadioGroupField
name="authType" name="useDatabaseUrl"
options={$authTypes.map(auth => ({ options={[
value: auth.name, { label: 'Fill database connection details', value: '', default: true },
label: auth.title, { label: 'Use database URL', value: '1' },
}))} ]}
/> />
</div>
{/if} {/if}
<div class="row"> {#if driver?.supportsDatabaseUrl && useDatabaseUrl}
<div class="col-9 mr-1"> <FormTextField label="Database URL" name="databaseUrl" placeholder={driver?.databaseUrlPlaceholder} />
<FormTextField {:else}
label="Server" {#if $authTypes}
name="server" <FormSelectField
disabled={disabledFields.includes('server')} label="Authentication"
templateProps={{ noMargin: true }} name="authType"
options={$authTypes.map(auth => ({
value: auth.name,
label: auth.title,
}))}
/> />
</div> {/if}
<div class="col-3 mr-1">
<FormTextField
label="Port"
name="port"
disabled={disabledFields.includes('port')}
templateProps={{ noMargin: true }}
placeholder={driver && driver.defaultPort}
/>
</div>
</div>
<div class="row"> <div class="row">
<div class="col-6 mr-1"> <div class="col-9 mr-1">
<FormTextField <FormTextField
label="User" label="Server"
name="user" name="server"
disabled={disabledFields.includes('user')} disabled={disabledFields.includes('server')}
templateProps={{ noMargin: true }} templateProps={{ noMargin: true }}
/> />
</div>
<div class="col-3 mr-1">
<FormTextField
label="Port"
name="port"
disabled={disabledFields.includes('port')}
templateProps={{ noMargin: true }}
placeholder={driver && driver.defaultPort}
/>
</div>
</div> </div>
<div class="col-6 mr-1">
<FormPasswordField
label="Password"
name="password"
disabled={disabledFields.includes('password')}
templateProps={{ noMargin: true }}
/>
</div>
</div>
{#if !disabledFields.includes('password')} <div class="row">
<FormSelectField <div class="col-6 mr-1">
label="Password mode" <FormTextField
name="passwordMode" label="User"
options={[ name="user"
{ value: 'saveEncrypted', label: 'Save and encrypt' }, disabled={disabledFields.includes('user')}
{ value: 'saveRaw', label: 'Save raw (UNSAFE!!)' }, templateProps={{ noMargin: true }}
]} />
/> </div>
<div class="col-6 mr-1">
<FormPasswordField
label="Password"
name="password"
disabled={disabledFields.includes('password')}
templateProps={{ noMargin: true }}
/>
</div>
</div>
{#if !disabledFields.includes('password')}
<FormSelectField
label="Password mode"
name="passwordMode"
options={[
{ value: 'saveEncrypted', label: 'Save and encrypt' },
{ value: 'saveRaw', label: 'Save raw (UNSAFE!!)' },
]}
/>
{/if}
{/if} {/if}
{/if}
<FormTextField label="Default database" name="defaultDatabase" /> <FormTextField label="Default database" name="defaultDatabase" />
{#if defaultDatabase} {#if defaultDatabase}
<FormCheckboxField label={`Use only database ${defaultDatabase}`} name="singleDatabase" /> <FormCheckboxField label={`Use only database ${defaultDatabase}`} name="singleDatabase" />
{/if}
{/if} {/if}
<FormTextField label="Display name" name="displayName" /> <FormTextField label="Display name" name="displayName" />

View File

@@ -11,6 +11,7 @@
import getElectron from '../utility/getElectron'; import getElectron from '../utility/getElectron';
import { usePlatformInfo } from '../utility/metadataLoaders'; import { usePlatformInfo } from '../utility/metadataLoaders';
import FontIcon from '../icons/FontIcon.svelte'; import FontIcon from '../icons/FontIcon.svelte';
import { extensions } from '../stores';
const { values, setFieldValue } = getFormContext(); const { values, setFieldValue } = getFormContext();
const electron = getElectron(); const electron = getElectron();