mirror of
https://github.com/DeNNiiInc/dbgate.git
synced 2026-05-02 05:33:59 +00:00
add new key works
This commit is contained in:
11
packages/types/engines.d.ts
vendored
11
packages/types/engines.d.ts
vendored
@@ -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;
|
||||||
|
|||||||
@@ -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])],
|
||||||
|
});
|
||||||
|
},
|
||||||
});
|
});
|
||||||
},
|
},
|
||||||
});
|
});
|
||||||
|
|||||||
@@ -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>
|
||||||
|
|||||||
Reference in New Issue
Block a user