From 64c8d4bdca51b9c4844dcf6effa72bbe045e2b5b Mon Sep 17 00:00:00 2001 From: Jan Prochazka Date: Thu, 10 Mar 2022 08:48:52 +0100 Subject: [PATCH 01/11] vfk editor - auto select PK --- .../tableeditor/VirtualForeignKeyEditorModal.svelte | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/packages/web/src/tableeditor/VirtualForeignKeyEditorModal.svelte b/packages/web/src/tableeditor/VirtualForeignKeyEditorModal.svelte index c1647c39b..a2052ce41 100644 --- a/packages/web/src/tableeditor/VirtualForeignKeyEditorModal.svelte +++ b/packages/web/src/tableeditor/VirtualForeignKeyEditorModal.svelte @@ -50,6 +50,7 @@ // $: console.log('conid, database', conid, database); // $: console.log('$dbInfo?.tables', $dbInfo?.tables); + // $: console.log('tableList', tableList); @@ -73,6 +74,17 @@ const name = fullNameFromString(e.detail); refTableName = name.pureName; refSchemaName = name.schemaName; + if (columns?.length == 1) { + const table = $dbInfo?.tables?.find(x => x.pureName == refTableName && x.schemaName == refSchemaName); + if (table?.primaryKey?.columns?.length == 1) { + columns = [ + { + ...columns[0], + refColumnName: table.primaryKey.columns[0].columnName, + }, + ]; + } + } } }} /> From f57624ef24767182f4572dcdea42967864e85f8f Mon Sep 17 00:00:00 2001 From: Jan Prochazka Date: Thu, 10 Mar 2022 08:49:09 +0100 Subject: [PATCH 02/11] tabs panel style fix --- packages/web/src/widgets/TabsPanel.svelte | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/packages/web/src/widgets/TabsPanel.svelte b/packages/web/src/widgets/TabsPanel.svelte index b82fedd82..17220e4bf 100644 --- a/packages/web/src/widgets/TabsPanel.svelte +++ b/packages/web/src/widgets/TabsPanel.svelte @@ -387,7 +387,7 @@ draggingDbGroupTarget = null; }} > - + {tabGroup.tabDbName} Date: Thu, 10 Mar 2022 09:17:03 +0100 Subject: [PATCH 03/11] vfk editor fix (svelte bug) --- .../VirtualForeignKeyEditorModal.svelte | 21 ++++++++++++++----- 1 file changed, 16 insertions(+), 5 deletions(-) diff --git a/packages/web/src/tableeditor/VirtualForeignKeyEditorModal.svelte b/packages/web/src/tableeditor/VirtualForeignKeyEditorModal.svelte index a2052ce41..1eeee3a50 100644 --- a/packages/web/src/tableeditor/VirtualForeignKeyEditorModal.svelte +++ b/packages/web/src/tableeditor/VirtualForeignKeyEditorModal.svelte @@ -9,7 +9,7 @@ import SelectField from '../forms/SelectField.svelte'; import _ from 'lodash'; import { useDatabaseInfo, useTableInfo } from '../utility/metadataLoaders'; - import { onMount } from 'svelte'; + import { onMount, tick } from 'svelte'; import TargetApplicationSelect from '../forms/TargetApplicationSelect.svelte'; import { apiCall } from '../utility/api'; import { saveDbToApp } from '../utility/appTools'; @@ -34,6 +34,19 @@ // ..._.sortBy($dbInfo?.views || [], ['schemaName', 'pureName']), ]; + let tableOptions = []; + + $: (async () => { + // without this has svelte problem, doesn't invalidate SelectField options + await tick(); + // to replicate try to invoke VFK editor after page refresh, when active widget without DB, eg. application layers + // and comment line above. Tables list in vFK editor will be empty + + tableOptions = tableList.map(tbl => ({ + label: fullNameToLabel(tbl), + value: fullNameToString(tbl), + })); + })(); $: refTableInfo = tableList.find(x => x.pureName == refTableName && x.schemaName == refSchemaName); // $dbInfo?.views?.find(x => x.pureName == refTableName && x.schemaName == refSchemaName); @@ -51,6 +64,7 @@ // $: console.log('conid, database', conid, database); // $: console.log('$dbInfo?.tables', $dbInfo?.tables); // $: console.log('tableList', tableList); + // $: console.log('tableOptions', tableOptions); @@ -65,10 +79,7 @@ value={fullNameToString({ pureName: refTableName, schemaName: refSchemaName })} isNative notSelected - options={tableList.map(tbl => ({ - label: fullNameToLabel(tbl), - value: fullNameToString(tbl), - }))} + options={tableOptions} on:change={e => { if (e.detail) { const name = fullNameFromString(e.detail); From c4b0b185e63d70645e7c0be02878783016a0b9a3 Mon Sep 17 00:00:00 2001 From: Jan Prochazka Date: Thu, 10 Mar 2022 09:24:19 +0100 Subject: [PATCH 04/11] find by schema name in db widget --- packages/web/src/appobj/DatabaseObjectAppObject.svelte | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/web/src/appobj/DatabaseObjectAppObject.svelte b/packages/web/src/appobj/DatabaseObjectAppObject.svelte index 8e264d051..d1d74a883 100644 --- a/packages/web/src/appobj/DatabaseObjectAppObject.svelte +++ b/packages/web/src/appobj/DatabaseObjectAppObject.svelte @@ -1,6 +1,6 @@ diff --git a/packages/web/src/datagrid/SqlDataGridCore.svelte b/packages/web/src/datagrid/SqlDataGridCore.svelte index aba9182a3..35f4005a1 100644 --- a/packages/web/src/datagrid/SqlDataGridCore.svelte +++ b/packages/web/src/datagrid/SqlDataGridCore.svelte @@ -66,12 +66,11 @@ diff --git a/packages/web/src/tabs/TableDataTab.svelte b/packages/web/src/tabs/TableDataTab.svelte index 764c8a336..35ade672e 100644 --- a/packages/web/src/tabs/TableDataTab.svelte +++ b/packages/web/src/tabs/TableDataTab.svelte @@ -50,14 +50,11 @@ import { showSnackbarSuccess } from '../utility/snackbar'; import StatusBarTabItem from '../widgets/StatusBarTabItem.svelte'; import openNewTab from '../utility/openNewTab'; - import { getBoolSettingsValue } from '../settings/settingsTools'; import { setContext } from 'svelte'; import { apiCall } from '../utility/api'; import { getLocalStorage, setLocalStorage } from '../utility/storageCache'; import ToolStripContainer from '../buttons/ToolStripContainer.svelte'; import ToolStripCommandButton from '../buttons/ToolStripCommandButton.svelte'; - import ToolStripDropDownButton from '../buttons/ToolStripDropDownButton.svelte'; - import { createQuickExportMenuItems } from '../utility/createQuickExportMenu'; import ToolStripExportButton, { createQuickExportHandlerRef } from '../buttons/ToolStripExportButton.svelte'; export let tabid; diff --git a/packages/web/src/utility/createQuickExportMenu.ts b/packages/web/src/utility/createQuickExportMenu.ts index 5872ade54..3d860a2e9 100644 --- a/packages/web/src/utility/createQuickExportMenu.ts +++ b/packages/web/src/utility/createQuickExportMenu.ts @@ -1,30 +1,27 @@ import { ExtensionsDirectory, QuickExportDefinition } from 'dbgate-types'; +import { getExtensions } from '../stores'; import getElectron from './getElectron'; -export function createQuickExportMenuItems( - extensions: ExtensionsDirectory, - handler: (fmt: QuickExportDefinition) => Function -) { - const electron = getElectron(); - if (!electron) { - return null; - } +export function createQuickExportMenuItems(handler: (fmt: QuickExportDefinition) => Function) { + // const electron = getElectron(); + // if (!electron) { + // return null; + // } + const extensions = getExtensions(); + console.log('extensions', extensions); return extensions.quickExports.map(fmt => ({ text: fmt.label, onClick: handler(fmt), })); } -export default function createQuickExportMenu( - extensions: ExtensionsDirectory, - handler: (fmt: QuickExportDefinition) => Function -) { - const electron = getElectron(); - if (!electron) { - return { _skip: true }; - } +export default function createQuickExportMenu(handler: (fmt: QuickExportDefinition) => Function) { + // const electron = getElectron(); + // if (!electron) { + // return { _skip: true }; + // } return { text: 'Quick export', - submenu: createQuickExportMenuItems(extensions, handler), + submenu: createQuickExportMenuItems(handler), }; } diff --git a/packages/web/src/utility/exportFileTools.ts b/packages/web/src/utility/exportFileTools.ts index 2bb288d5c..1fd8588d9 100644 --- a/packages/web/src/utility/exportFileTools.ts +++ b/packages/web/src/utility/exportFileTools.ts @@ -6,14 +6,21 @@ import { apiCall, apiOff, apiOn } from './api'; export async function exportElectronFile(dataName, reader, format) { const electron = getElectron(); - const filters = [{ name: format.label, extensions: [format.extension] }]; - const filePath = await electron.showSaveDialog({ - filters, - defaultPath: `${dataName}.${format.extension}`, - properties: ['showOverwriteConfirmation'], - }); - if (!filePath) return; + let filePath; + let pureFileName; + if (electron) { + const filters = [{ name: format.label, extensions: [format.extension] }]; + filePath = electron.showSaveDialog({ + filters, + defaultPath: `${dataName}.${format.extension}`, + properties: ['showOverwriteConfirmation'], + }); + } else { + const resp = await apiCall('files/generate-uploads-file'); + filePath = resp.filePath; + pureFileName = resp.fileName; + } const script = new ScriptWriter(); @@ -50,6 +57,10 @@ export async function exportElectronFile(dataName, reader, format) { apiOff(`runner-done-${runid}`, handleRunnerDone); if (isCanceled) showSnackbarError(`Export ${dataName} canceled`); else showSnackbarInfo(`Export ${dataName} finished`); + + if (!electron) { + window.open(`${resolveApi()}/uploads/get?file=${pureFileName}`, '_blank'); + } } apiOn(`runner-done-${runid}`, handleRunnerDone); From c26bc6d0e9a4429ac538f802f01785ec7c77d6f4 Mon Sep 17 00:00:00 2001 From: Jan Prochazka Date: Thu, 10 Mar 2022 10:23:18 +0100 Subject: [PATCH 08/11] xml export fix --- plugins/dbgate-plugin-xml/src/backend/writer.js | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/plugins/dbgate-plugin-xml/src/backend/writer.js b/plugins/dbgate-plugin-xml/src/backend/writer.js index e5abab255..8b87016d8 100644 --- a/plugins/dbgate-plugin-xml/src/backend/writer.js +++ b/plugins/dbgate-plugin-xml/src/backend/writer.js @@ -47,6 +47,10 @@ class StringifyStream extends stream.Transform { } _transform(chunk, encoding, done) { + if (chunk.__isStreamHeader) { + done(); + return; + } this.startElement(this.itemElementName); this.push('\n'); for (const key of Object.keys(chunk)) { From ddff3d2b893240e283aee0f672382c84613edf2b Mon Sep 17 00:00:00 2001 From: Jan Prochazka Date: Thu, 10 Mar 2022 10:23:33 +0100 Subject: [PATCH 09/11] quick export on web --- packages/api/src/controllers/files.js | 4 ++-- packages/web/src/appobj/ArchiveFileAppObject.svelte | 4 ++-- packages/web/src/appobj/DatabaseObjectAppObject.svelte | 4 ++-- packages/web/src/datagrid/CollectionDataGridCore.svelte | 4 ++-- packages/web/src/datagrid/JslDataGridCore.svelte | 6 +++--- packages/web/src/datagrid/SqlDataGridCore.svelte | 4 ++-- packages/web/src/utility/exportFileTools.ts | 4 ++-- 7 files changed, 15 insertions(+), 15 deletions(-) diff --git a/packages/api/src/controllers/files.js b/packages/api/src/controllers/files.js index 14ea526a5..6d82c2e29 100644 --- a/packages/api/src/controllers/files.js +++ b/packages/api/src/controllers/files.js @@ -141,8 +141,8 @@ module.exports = { }, generateUploadsFile_meta: true, - async generateUploadsFile() { - const fileName = `${uuidv1()}.html`; + async generateUploadsFile({ extension }) { + const fileName = `${uuidv1()}.${extension || 'html'}`; return { fileName, filePath: path.join(uploadsdir(), fileName), diff --git a/packages/web/src/appobj/ArchiveFileAppObject.svelte b/packages/web/src/appobj/ArchiveFileAppObject.svelte index cb2072222..ecb13d8ff 100644 --- a/packages/web/src/appobj/ArchiveFileAppObject.svelte +++ b/packages/web/src/appobj/ArchiveFileAppObject.svelte @@ -70,7 +70,7 @@ import { archiveFilesAsDataSheets, currentArchive, extensions, getCurrentDatabase } from '../stores'; import createQuickExportMenu from '../utility/createQuickExportMenu'; - import { exportElectronFile } from '../utility/exportFileTools'; + import { exportQuickExportFile } from '../utility/exportFileTools'; import openNewTab from '../utility/openNewTab'; import AppObjectCore from './AppObjectCore.svelte'; import getConnectionLabel from '../utility/getConnectionLabel'; @@ -170,7 +170,7 @@ { text: 'Rename', onClick: handleRename }, data.fileType == 'jsonl' && createQuickExportMenu(fmt => async () => { - exportElectronFile( + exportQuickExportFile( data.fileName, { functionName: 'archiveReader', diff --git a/packages/web/src/appobj/DatabaseObjectAppObject.svelte b/packages/web/src/appobj/DatabaseObjectAppObject.svelte index 60f0586d2..fd4cb4154 100644 --- a/packages/web/src/appobj/DatabaseObjectAppObject.svelte +++ b/packages/web/src/appobj/DatabaseObjectAppObject.svelte @@ -414,7 +414,7 @@ if (menu.isQuickExport) { return createQuickExportMenu(fmt => async () => { const coninfo = await getConnectionInfo(data); - exportElectronFile( + exportQuickExportFile( data.pureName, { functionName: menu.functionName, @@ -620,7 +620,7 @@ import SqlGeneratorModal from '../modals/SqlGeneratorModal.svelte'; import getConnectionLabel from '../utility/getConnectionLabel'; import getElectron from '../utility/getElectron'; - import { exportElectronFile } from '../utility/exportFileTools'; + import { exportQuickExportFile } from '../utility/exportFileTools'; import createQuickExportMenu from '../utility/createQuickExportMenu'; import ConfirmSqlModal from '../modals/ConfirmSqlModal.svelte'; import { alterDatabaseDialog, renameDatabaseObjectDialog } from '../utility/alterDatabaseTools'; diff --git a/packages/web/src/datagrid/CollectionDataGridCore.svelte b/packages/web/src/datagrid/CollectionDataGridCore.svelte index f9040c97b..b7ac7db1c 100644 --- a/packages/web/src/datagrid/CollectionDataGridCore.svelte +++ b/packages/web/src/datagrid/CollectionDataGridCore.svelte @@ -122,7 +122,7 @@ import { registerMenu } from '../utility/contextMenu'; import createActivator, { getActiveComponent } from '../utility/createActivator'; import createQuickExportMenu from '../utility/createQuickExportMenu'; - import { exportElectronFile } from '../utility/exportFileTools'; + import { exportQuickExportFile } from '../utility/exportFileTools'; import { getConnectionInfo } from '../utility/metadataLoaders'; import openNewTab from '../utility/openNewTab'; import ChangeSetGrider from './ChangeSetGrider'; @@ -196,7 +196,7 @@ const quickExportHandler = fmt => async () => { const coninfo = await getConnectionInfo({ conid }); - exportElectronFile( + exportQuickExportFile( pureName || 'Data', { functionName: 'queryReader', diff --git a/packages/web/src/datagrid/JslDataGridCore.svelte b/packages/web/src/datagrid/JslDataGridCore.svelte index 337eb6eba..a188b75d0 100644 --- a/packages/web/src/datagrid/JslDataGridCore.svelte +++ b/packages/web/src/datagrid/JslDataGridCore.svelte @@ -48,7 +48,7 @@ import { registerMenu } from '../utility/contextMenu'; import createActivator, { getActiveComponent } from '../utility/createActivator'; import createQuickExportMenu from '../utility/createQuickExportMenu'; - import { exportElectronFile } from '../utility/exportFileTools'; + import { exportQuickExportFile } from '../utility/exportFileTools'; import useEffect from '../utility/useEffect'; import LoadingDataGridCore from './LoadingDataGridCore.svelte'; @@ -104,7 +104,7 @@ const quickExportHandler = fmt => async () => { const archiveMatch = jslid.match(/^archive:\/\/([^/]+)\/(.*)$/); if (archiveMatch) { - exportElectronFile( + exportQuickExportFile( archiveMatch[2], { functionName: 'archiveReader', @@ -116,7 +116,7 @@ fmt ); } else { - exportElectronFile( + exportQuickExportFile( 'Query', { functionName: 'jslDataReader', diff --git a/packages/web/src/datagrid/SqlDataGridCore.svelte b/packages/web/src/datagrid/SqlDataGridCore.svelte index 35f4005a1..c0fb43667 100644 --- a/packages/web/src/datagrid/SqlDataGridCore.svelte +++ b/packages/web/src/datagrid/SqlDataGridCore.svelte @@ -76,7 +76,7 @@ import { registerMenu } from '../utility/contextMenu'; import createActivator, { getActiveComponent } from '../utility/createActivator'; import createQuickExportMenu from '../utility/createQuickExportMenu'; - import { exportElectronFile } from '../utility/exportFileTools'; + import { exportQuickExportFile } from '../utility/exportFileTools'; import { getConnectionInfo } from '../utility/metadataLoaders'; import openNewTab from '../utility/openNewTab'; import ChangeSetGrider from './ChangeSetGrider'; @@ -181,7 +181,7 @@ const quickExportHandler = fmt => async () => { const coninfo = await getConnectionInfo({ conid }); - exportElectronFile( + exportQuickExportFile( pureName || 'Data', { functionName: 'queryReader', diff --git a/packages/web/src/utility/exportFileTools.ts b/packages/web/src/utility/exportFileTools.ts index 1fd8588d9..91cf2c798 100644 --- a/packages/web/src/utility/exportFileTools.ts +++ b/packages/web/src/utility/exportFileTools.ts @@ -4,7 +4,7 @@ import { showSnackbar, showSnackbarInfo, showSnackbarError, closeSnackbar } from import resolveApi from './resolveApi'; import { apiCall, apiOff, apiOn } from './api'; -export async function exportElectronFile(dataName, reader, format) { +export async function exportQuickExportFile(dataName, reader, format) { const electron = getElectron(); let filePath; @@ -17,7 +17,7 @@ export async function exportElectronFile(dataName, reader, format) { properties: ['showOverwriteConfirmation'], }); } else { - const resp = await apiCall('files/generate-uploads-file'); + const resp = await apiCall('files/generate-uploads-file', { extension: format.extension }); filePath = resp.filePath; pureFileName = resp.fileName; } From 35792a024a25d92452323191450c0805f3657fa8 Mon Sep 17 00:00:00 2001 From: Jan Prochazka Date: Thu, 10 Mar 2022 11:13:25 +0100 Subject: [PATCH 10/11] export menu refactor --- .../src/appobj/ArchiveFileAppObject.svelte | 48 ++++++------ .../src/appobj/DatabaseObjectAppObject.svelte | 77 +++++++++---------- .../src/buttons/ToolStripExportButton.svelte | 14 ++-- .../datagrid/CollectionDataGridCore.svelte | 13 +--- .../web/src/datagrid/JslDataGridCore.svelte | 11 +-- .../web/src/datagrid/SqlDataGridCore.svelte | 5 +- .../web/src/utility/createQuickExportMenu.ts | 38 ++++----- 7 files changed, 95 insertions(+), 111 deletions(-) diff --git a/packages/web/src/appobj/ArchiveFileAppObject.svelte b/packages/web/src/appobj/ArchiveFileAppObject.svelte index ecb13d8ff..02c92fbdf 100644 --- a/packages/web/src/appobj/ArchiveFileAppObject.svelte +++ b/packages/web/src/appobj/ArchiveFileAppObject.svelte @@ -169,31 +169,33 @@ { text: 'Delete', onClick: handleDelete }, { text: 'Rename', onClick: handleRename }, data.fileType == 'jsonl' && - createQuickExportMenu(fmt => async () => { - exportQuickExportFile( - data.fileName, - { - functionName: 'archiveReader', - props: { - fileName: data.fileName, - folderName: data.folderName, + createQuickExportMenu( + fmt => async () => { + exportQuickExportFile( + data.fileName, + { + functionName: 'archiveReader', + props: { + fileName: data.fileName, + folderName: data.folderName, + }, }, + fmt + ); + }, + { + text: 'Export', + onClick: () => { + showModal(ImportExportModal, { + initialValues: { + sourceStorageType: 'archive', + sourceArchiveFolder: data.folderName, + sourceList: [data.fileName], + }, + }); }, - fmt - ); - }), - data.fileType == 'jsonl' && { - text: 'Export', - onClick: () => { - showModal(ImportExportModal, { - initialValues: { - sourceStorageType: 'archive', - sourceArchiveFolder: data.folderName, - sourceList: [data.fileName], - }, - }); - }, - }, + } + ), data.fileType.endsWith('.sql') && { text: 'Open SQL', onClick: handleOpenSqlFile }, data.fileType.endsWith('.yaml') && { text: 'Open YAML', onClick: handleOpenYamlFile }, ]; diff --git a/packages/web/src/appobj/DatabaseObjectAppObject.svelte b/packages/web/src/appobj/DatabaseObjectAppObject.svelte index fd4cb4154..c7bb2c01f 100644 --- a/packages/web/src/appobj/DatabaseObjectAppObject.svelte +++ b/packages/web/src/appobj/DatabaseObjectAppObject.svelte @@ -60,12 +60,9 @@ { divider: true, }, - { - isQuickExport: true, - functionName: 'tableReader', - }, { label: 'Export', + functionName: 'tableReader', isExport: true, }, { @@ -131,13 +128,10 @@ { divider: true, }, - { - isQuickExport: true, - functionName: 'tableReader', - }, { label: 'Export', isExport: true, + functionName: 'tableReader', }, { label: 'Open as data sheet', @@ -196,13 +190,10 @@ { divider: true, }, - { - isQuickExport: true, - functionName: 'tableReader', - }, { label: 'Export', isExport: true, + functionName: 'tableReader', }, { label: 'Open as data sheet', @@ -304,13 +295,10 @@ }, }, }, - { - isQuickExport: true, - functionName: 'tableReader', - }, { label: 'Export', isExport: true, + functionName: 'tableReader', }, { label: 'Drop collection', @@ -411,40 +399,45 @@ .map(menu => { if (menu.divider) return menu; - if (menu.isQuickExport) { - return createQuickExportMenu(fmt => async () => { - const coninfo = await getConnectionInfo(data); - exportQuickExportFile( - data.pureName, - { - functionName: menu.functionName, - props: { - connection: { - ..._.omit(coninfo, ['_id', 'displayName']), - ..._.pick(data, ['database']), + if (menu.isExport) { + return createQuickExportMenu( + fmt => async () => { + const coninfo = await getConnectionInfo(data); + exportQuickExportFile( + data.pureName, + { + functionName: menu.functionName, + props: { + connection: { + ..._.omit(coninfo, ['_id', 'displayName']), + ..._.pick(data, ['database']), + }, + ..._.pick(data, ['pureName', 'schemaName']), }, - ..._.pick(data, ['pureName', 'schemaName']), }, + fmt + ); + }, + { + onClick: () => { + showModal(ImportExportModal, { + initialValues: { + sourceStorageType: 'database', + sourceConnectionId: data.conid, + sourceDatabaseName: data.database, + sourceSchemaName: data.schemaName, + sourceList: [data.pureName], + }, + }); }, - fmt - ); - }); + } + ); } return { text: menu.label, onClick: async () => { - if (menu.isExport) { - showModal(ImportExportModal, { - initialValues: { - sourceStorageType: 'database', - sourceConnectionId: data.conid, - sourceDatabaseName: data.database, - sourceSchemaName: data.schemaName, - sourceList: [data.pureName], - }, - }); - } else if (menu.isOpenFreeTable) { + if (menu.isOpenFreeTable) { const coninfo = await getConnectionInfo(data); openNewTab({ title: data.pureName, diff --git a/packages/web/src/buttons/ToolStripExportButton.svelte b/packages/web/src/buttons/ToolStripExportButton.svelte index bbbbb4f1d..4e6311e52 100644 --- a/packages/web/src/buttons/ToolStripExportButton.svelte +++ b/packages/web/src/buttons/ToolStripExportButton.svelte @@ -23,23 +23,21 @@ import ToolStripCommandButton from './ToolStripCommandButton.svelte'; import ToolStripDropDownButton from './ToolStripDropDownButton.svelte'; - const electron = getElectron(); - export let quickExportHandlerRef = null; export let command = 'sqlDataGrid.export'; - export let label = 'Advanced settings'; + export let label = 'Export'; function getExportMenu() { return [ - quickExportHandlerRef?.value ? createQuickExportMenuItems(quickExportHandlerRef?.value) : null, - { divider: true }, - { command, text: label }, + quickExportHandlerRef?.value + ? createQuickExportMenuItems(quickExportHandlerRef?.value, { command }) + : { command }, ]; } -{#if quickExportHandlerRef && electron} - +{#if quickExportHandlerRef} + {:else} {/if} diff --git a/packages/web/src/datagrid/CollectionDataGridCore.svelte b/packages/web/src/datagrid/CollectionDataGridCore.svelte index b7ac7db1c..a3f798ba2 100644 --- a/packages/web/src/datagrid/CollectionDataGridCore.svelte +++ b/packages/web/src/datagrid/CollectionDataGridCore.svelte @@ -214,15 +214,10 @@ registerQuickExportHandler(quickExportHandler); - registerMenu( - { command: 'collectionDataGrid.openQuery', tag: 'export' }, - () => ({ - ...createQuickExportMenu(quickExportHandler), - tag: 'export', - }), - - { command: 'collectionDataGrid.export', tag: 'export' } - ); + registerMenu({ command: 'collectionDataGrid.openQuery', tag: 'export' }, () => ({ + ...createQuickExportMenu(quickExportHandler, { command: 'collectionDataGrid.export' }), + tag: 'export', + })); ({ - ...createQuickExportMenu(quickExportHandler), - tag: 'export', - }), - { command: 'jslTableGrid.export', tag: 'export' } - ); + registerMenu(() => ({ + ...createQuickExportMenu(quickExportHandler, { command: 'jslTableGrid.export' }), + tag: 'export', + })); ({ - ...createQuickExportMenu(quickExportHandler), + ...createQuickExportMenu(quickExportHandler, { command: 'sqlDataGrid.export' }), tag: 'export', - }), - { command: 'sqlDataGrid.export', tag: 'export' } + }) ); diff --git a/packages/web/src/utility/createQuickExportMenu.ts b/packages/web/src/utility/createQuickExportMenu.ts index 3d860a2e9..b304881c9 100644 --- a/packages/web/src/utility/createQuickExportMenu.ts +++ b/packages/web/src/utility/createQuickExportMenu.ts @@ -1,27 +1,27 @@ -import { ExtensionsDirectory, QuickExportDefinition } from 'dbgate-types'; +import { QuickExportDefinition } from 'dbgate-types'; import { getExtensions } from '../stores'; -import getElectron from './getElectron'; -export function createQuickExportMenuItems(handler: (fmt: QuickExportDefinition) => Function) { - // const electron = getElectron(); - // if (!electron) { - // return null; - // } +export function createQuickExportMenuItems(handler: (fmt: QuickExportDefinition) => Function, advancedExportMenuItem) { const extensions = getExtensions(); - console.log('extensions', extensions); - return extensions.quickExports.map(fmt => ({ - text: fmt.label, - onClick: handler(fmt), - })); + return [ + ...extensions.quickExports.map(fmt => ({ + text: fmt.label, + onClick: handler(fmt), + })), + { divider: true }, + { + text: 'More...', + ...advancedExportMenuItem, + }, + ]; } -export default function createQuickExportMenu(handler: (fmt: QuickExportDefinition) => Function) { - // const electron = getElectron(); - // if (!electron) { - // return { _skip: true }; - // } +export default function createQuickExportMenu( + handler: (fmt: QuickExportDefinition) => Function, + advancedExportMenuItem +) { return { - text: 'Quick export', - submenu: createQuickExportMenuItems(handler), + text: 'Export', + submenu: createQuickExportMenuItems(handler, advancedExportMenuItem), }; } From 0b6042c3cbf28a6a8809fe0a15a71635f531881d Mon Sep 17 00:00:00 2001 From: Jan Prochazka Date: Thu, 10 Mar 2022 11:16:39 +0100 Subject: [PATCH 11/11] v4.7.3-beta.1 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 2ff061c5f..f3f391254 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "private": true, - "version": "4.7.2", + "version": "4.7.3-beta.1", "name": "dbgate-all", "workspaces": [ "packages/*",