diff --git a/packages/types/engines.d.ts b/packages/types/engines.d.ts index e4282af0a..69115d199 100644 --- a/packages/types/engines.d.ts +++ b/packages/types/engines.d.ts @@ -42,13 +42,22 @@ export interface NewObjectTemplate { sql: string; } +export interface SupportedDbKeyType { + name: string; + label: string; + dbKeyFields: { name: string }[]; + addMethod: string; + keyColumn?: string; + showItemList?: boolean; +} + export interface EngineDriver { engine: string; title: string; defaultPort?: number; databaseEngineTypes: string[]; readOnlySessions: boolean; - supportedKeyTypes: { name: string; label: string }[]; + supportedKeyTypes: SupportedDbKeyType[]; supportsDatabaseUrl?: boolean; isElectronOnly?: boolean; showConnectionField?: (field: string, values: any) => boolean; diff --git a/packages/web/src/commands/stdCommands.ts b/packages/web/src/commands/stdCommands.ts index 46d1ff008..bc7484191 100644 --- a/packages/web/src/commands/stdCommands.ts +++ b/packages/web/src/commands/stdCommands.ts @@ -238,6 +238,16 @@ registerCommand({ conid: connection._id, database, 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])], + }); + }, }); }, }); diff --git a/packages/web/src/modals/AddDbKeyModal.svelte b/packages/web/src/modals/AddDbKeyModal.svelte index 78453ad5d..aeff778c5 100644 --- a/packages/web/src/modals/AddDbKeyModal.svelte +++ b/packages/web/src/modals/AddDbKeyModal.svelte @@ -1,9 +1,11 @@ @@ -26,16 +29,29 @@ Add item
- ({ value: t.name, label: t.label }))} - value={type} - on:change={e => { - type = e.detail; - }} - /> + + ({ value: t.name, label: t.label }))} + value={type} + isNative + on:change={e => { + type = e.detail; + }} + /> + + + + { + // @ts-ignore + keyName = e.target.value; + }} + /> + x.name == type).dbKeyFields} + dbKeyFields={driver.supportedKeyTypes.find(x => x.name == type).dbKeyFields} {item} onChangeItem={value => { item = value; @@ -53,6 +69,7 @@