From 27311afb3150b424d112b6a5d6647291ce6c200b Mon Sep 17 00:00:00 2001 From: Jan Prochazka Date: Sun, 6 Jun 2021 10:25:52 +0200 Subject: [PATCH] quick exports - basic skeleton working --- .../src/appobj/DatabaseObjectAppObject.svelte | 65 +++++++++++-------- packages/web/src/modals/DropDownMenu.svelte | 32 +++++++-- .../web/src/utility/exportElectronFile.ts | 53 ++++++++------- .../dbgate-plugin-csv/src/frontend/index.js | 4 +- .../dbgate-plugin-excel/src/frontend/index.js | 6 +- 5 files changed, 96 insertions(+), 64 deletions(-) diff --git a/packages/web/src/appobj/DatabaseObjectAppObject.svelte b/packages/web/src/appobj/DatabaseObjectAppObject.svelte index ac0196715..9578e9db2 100644 --- a/packages/web/src/appobj/DatabaseObjectAppObject.svelte +++ b/packages/web/src/appobj/DatabaseObjectAppObject.svelte @@ -47,15 +47,15 @@ { divider: true, }, + electron && { + label: 'Quick export', + isQuickExport: true, + functionName: 'tableReader', + }, { label: 'Export', isExport: true, }, - // electron && - { - label: 'Quick export', - isQuickExport: true, - }, { label: 'Open in free table editor', isOpenFreeTable: true, @@ -114,14 +114,14 @@ { divider: true, }, - { - label: 'Export', - isExport: true, - }, electron && { label: 'Quick export', isQuickExport: true, }, + { + label: 'Export', + isExport: true, + }, { label: 'Open in free table editor', isOpenFreeTable: true, @@ -175,14 +175,14 @@ { divider: true, }, - { - label: 'Export', - isExport: true, - }, electron && { label: 'Quick export', isQuickExport: true, }, + { + label: 'Export', + isExport: true, + }, { label: 'Open in free table editor', isOpenFreeTable: true, @@ -275,14 +275,14 @@ }, }, }, - { - label: 'Export', - isExport: true, - }, electron && { label: 'Quick export', isQuickExport: true, }, + { + label: 'Export', + isExport: true, + }, { divider: true, }, @@ -399,16 +399,26 @@ if (menu.isQuickExport) { return { text: menu.label, - submenu: [ - { - text: 'CSV file', - isQuickExport: true, + submenu: $extensions.quickExports.map(fmt => ({ + text: fmt.label, + onClick: async () => { + const coninfo = await getConnectionInfo(data); + exportElectronFile( + data.pureName, + { + functionName: menu.functionName, + props: { + connection: { + ..._.omit(coninfo, ['_id', 'displayName']), + ..._.pick(data, ['database']), + }, + ..._.pick(data, ['pureName', 'schemaName']), + }, + }, + fmt + ); }, - { - text: 'Excel', - isQuickExport: true, - }, - ], + })), }; } @@ -425,8 +435,6 @@ sourceList: [data.pureName], }, }); - } else if (menu.isQuickExport) { - exportElectronFile(data); } else if (menu.isOpenFreeTable) { const coninfo = await getConnectionInfo(data); openNewTab({ @@ -511,6 +519,7 @@ mapItem(x, $commandsCustomized))); $: filtered = compacted.filter(x => !x.disabled || !x.hideDisabled); + const handleClickOutside = event => { + // if (element && !element.contains(event.target) && !event.defaultPrevented) { + if (event.target.closest('ul.dropDownMenuMarker')) return; + + dispatch('close'); + }; + + onMount(() => { + document.addEventListener('mousedown', handleClickOutside, true); + return () => { + document.removeEventListener('mousedown', handleClickOutside, true); + }; + }); + -