add new key works

This commit is contained in:
Jan Prochazka
2022-03-24 17:58:54 +01:00
parent 38dfad4dfc
commit 1aecda6d9f
3 changed files with 46 additions and 10 deletions

View File

@@ -42,13 +42,22 @@ export interface NewObjectTemplate {
sql: string; sql: string;
} }
export interface SupportedDbKeyType {
name: string;
label: string;
dbKeyFields: { name: string }[];
addMethod: string;
keyColumn?: string;
showItemList?: boolean;
}
export interface EngineDriver { export interface EngineDriver {
engine: string; engine: string;
title: string; title: string;
defaultPort?: number; defaultPort?: number;
databaseEngineTypes: string[]; databaseEngineTypes: string[];
readOnlySessions: boolean; readOnlySessions: boolean;
supportedKeyTypes: { name: string; label: string }[]; supportedKeyTypes: SupportedDbKeyType[];
supportsDatabaseUrl?: boolean; supportsDatabaseUrl?: boolean;
isElectronOnly?: boolean; isElectronOnly?: boolean;
showConnectionField?: (field: string, values: any) => boolean; showConnectionField?: (field: string, values: any) => boolean;

View File

@@ -238,6 +238,16 @@ registerCommand({
conid: connection._id, conid: connection._id,
database, database,
driver, driver,
onConfirm: async item => {
const type = driver.supportedKeyTypes.find(x => x.name == item.type);
await apiCall('database-connections/call-method', {
conid: connection._id,
database,
method: type.addMethod,
args: [item.keyName, ...type.dbKeyFields.map(fld => item[fld.name])],
});
},
}); });
}, },
}); });

View File

@@ -1,9 +1,11 @@
<script lang="ts"> <script lang="ts">
import FormStyledButton from '../buttons/FormStyledButton.svelte'; import FormStyledButton from '../buttons/FormStyledButton.svelte';
import DbKeyItemDetail from '../dbkeyvalue/DbKeyItemDetail.svelte'; import DbKeyItemDetail from '../dbkeyvalue/DbKeyItemDetail.svelte';
import FormFieldTemplateLarge from '../forms/FormFieldTemplateLarge.svelte';
import FormProvider from '../forms/FormProvider.svelte'; import FormProvider from '../forms/FormProvider.svelte';
import SelectField from '../forms/SelectField.svelte'; import SelectField from '../forms/SelectField.svelte';
import TextField from '../forms/TextField.svelte';
import ModalBase from './ModalBase.svelte'; import ModalBase from './ModalBase.svelte';
import { closeCurrentModal } from './modalTools'; import { closeCurrentModal } from './modalTools';
@@ -13,11 +15,12 @@
export let onConfirm; export let onConfirm;
let item = {}; let item = {};
let keyName = '';
let type = driver.supportedKeyTypes[0].name; let type = driver.supportedKeyTypes[0].name;
const handleSubmit = async () => { const handleSubmit = async () => {
closeCurrentModal(); closeCurrentModal();
onConfirm(item); onConfirm({ type, keyName, ...item });
}; };
</script> </script>
@@ -26,16 +29,29 @@
<svelte:fragment slot="header">Add item</svelte:fragment> <svelte:fragment slot="header">Add item</svelte:fragment>
<div class="container"> <div class="container">
<SelectField <FormFieldTemplateLarge label="Type" type="combo">
options={driver.supportedKeyTypes.map(t => ({ value: t.name, label: t.label }))} <SelectField
value={type} options={driver.supportedKeyTypes.map(t => ({ value: t.name, label: t.label }))}
on:change={e => { value={type}
type = e.detail; isNative
}} on:change={e => {
/> type = e.detail;
}}
/>
</FormFieldTemplateLarge>
<FormFieldTemplateLarge label="Name" type="text">
<TextField
value={keyName}
on:change={e => {
// @ts-ignore
keyName = e.target.value;
}}
/>
</FormFieldTemplateLarge>
<DbKeyItemDetail <DbKeyItemDetail
dbKeyFields={driver.supportedKeyTypes.find(x => x.name == type).dbKeyFields} dbKeyFields={driver.supportedKeyTypes.find(x => x.name == type).dbKeyFields}
{item} {item}
onChangeItem={value => { onChangeItem={value => {
item = value; item = value;
@@ -53,6 +69,7 @@
<style> <style>
.container { .container {
display: flex; display: flex;
flex-direction: column;
height: 30vh; height: 30vh;
} }
</style> </style>