diff --git a/packages/types/engines.d.ts b/packages/types/engines.d.ts index c7a5545fe..ab60bb2e6 100644 --- a/packages/types/engines.d.ts +++ b/packages/types/engines.d.ts @@ -47,6 +47,7 @@ export interface EngineDriver { title: string; defaultPort?: number; databaseEngineTypes: string[]; + supportedKeyTypes: { name: string; label: string }[]; 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 454a59704..b464a5c57 100644 --- a/packages/web/src/commands/stdCommands.ts +++ b/packages/web/src/commands/stdCommands.ts @@ -4,6 +4,7 @@ import { get } from 'svelte/store'; import { ThemeDefinition } from 'dbgate-types'; import ConnectionModal from '../modals/ConnectionModal.svelte'; import AboutModal from '../modals/AboutModal.svelte'; +import AddDbKeyModal from '../modals/AddDbKeyModal.svelte'; import SettingsModal from '../settings/SettingsModal.svelte'; import ImportExportModal from '../modals/ImportExportModal.svelte'; import SqlGeneratorModal from '../modals/SqlGeneratorModal.svelte'; @@ -217,6 +218,30 @@ registerCommand({ }, }); +registerCommand({ + id: 'new.dbKey', + category: 'New', + name: 'Key', + toolbar: true, + toolbarName: 'New key', + testEnabled: () => { + const driver = findEngineDriver(get(currentDatabase)?.connection, getExtensions()); + return !!get(currentDatabase) && driver?.databaseEngineTypes?.includes('keyvalue'); + }, + onClick: async () => { + const $currentDatabase = get(currentDatabase); + const connection = _.get($currentDatabase, 'connection') || {}; + const database = _.get($currentDatabase, 'name'); + const driver = findEngineDriver(get(currentDatabase)?.connection, getExtensions()); + + showModal(AddDbKeyModal, { + conid: connection._id, + database, + driver, + }); + }, +}); + registerCommand({ id: 'new.markdown', category: 'New', diff --git a/packages/web/src/datagrid/DbKeyTableControl.svelte b/packages/web/src/datagrid/DbKeyTableControl.svelte index f5e2d6497..22c32f16c 100644 --- a/packages/web/src/datagrid/DbKeyTableControl.svelte +++ b/packages/web/src/datagrid/DbKeyTableControl.svelte @@ -19,6 +19,9 @@ const oldIndexRef = createRef(null); async function loadNextRows() { + if (isLoadedAll) { + return; + } if (isLoading) { // console.log('ALREADY LOADING'); loadNextNeeded = true; @@ -79,7 +82,7 @@ header: 'num', width: '60px', }, - ...keyInfo.tableColumns.map(column => ({ + ...keyInfo.keyType.dbKeyFields.map(column => ({ fieldName: column.name, header: column.name, })), diff --git a/packages/web/src/dbkeyvalue/DbKeyItemDetail.svelte b/packages/web/src/dbkeyvalue/DbKeyItemDetail.svelte index 77bcdd446..1b6174d05 100644 --- a/packages/web/src/dbkeyvalue/DbKeyItemDetail.svelte +++ b/packages/web/src/dbkeyvalue/DbKeyItemDetail.svelte @@ -1,13 +1,13 @@
- {#each keyInfo.tableColumns as column} + {#each dbKeyFields as column}
{column.name}
+ import FormStyledButton from '../buttons/FormStyledButton.svelte'; + import DbKeyItemDetail from '../dbkeyvalue/DbKeyItemDetail.svelte'; + + import FormProvider from '../forms/FormProvider.svelte'; + import SelectField from '../forms/SelectField.svelte'; + import ModalBase from './ModalBase.svelte'; + import { closeCurrentModal } from './modalTools'; + + export let conid; + export let database; + export let driver; + export let onConfirm; + + let item = {}; + let type = driver.supportedKeyTypes[0].name; + + const handleSubmit = async () => { + closeCurrentModal(); + onConfirm(item); + }; + + + + + Add item + +
+ ({ value: t.name, label: t.label }))} + value={type} + on:change={e => { + type = e.detail; + }} + /> + + x.name == type).dbKeyFields} + {item} + onChangeItem={value => { + item = value; + }} + /> +
+ + + handleSubmit()} /> + + +
+
+ + diff --git a/packages/web/src/modals/DbKeyAddItemModal.svelte b/packages/web/src/modals/DbKeyAddItemModal.svelte index 57122c545..a6ed6de77 100644 --- a/packages/web/src/modals/DbKeyAddItemModal.svelte +++ b/packages/web/src/modals/DbKeyAddItemModal.svelte @@ -24,7 +24,7 @@
{ item = value; diff --git a/packages/web/src/tabs/DbKeyDetailTab.svelte b/packages/web/src/tabs/DbKeyDetailTab.svelte index e3f0b733b..830ee92f4 100644 --- a/packages/web/src/tabs/DbKeyDetailTab.svelte +++ b/packages/web/src/tabs/DbKeyDetailTab.svelte @@ -89,8 +89,8 @@ await apiCall('database-connections/call-method', { conid, database, - method: keyInfo.addMethod, - args: [keyInfo.key, ...keyInfo.tableColumns.map(col => row[col.name])], + method: keyInfo.keyType.addMethod, + args: [keyInfo.key, ...keyInfo.keyType.dbKeyFields.map(col => row[col.name])], }); refresh(); }, @@ -114,14 +114,14 @@ {#if keyInfo.type == 'string'} {/if} - {#if keyInfo.addMethod} + {#if keyInfo.keyType?.addMethod && keyInfo.keyType?.showItemList} addItem(keyInfo)} /> {/if}
- {#if keyInfo.tableColumns} + {#if keyInfo.keyType?.dbKeyFields && keyInfo.keyType?.showItemList} - + {:else} diff --git a/packages/web/src/widgets/DbKeysTree.svelte b/packages/web/src/widgets/DbKeysTree.svelte index 944c91540..207bc3055 100644 --- a/packages/web/src/widgets/DbKeysTree.svelte +++ b/packages/web/src/widgets/DbKeysTree.svelte @@ -1,6 +1,7 @@