From c69fcd5eff13a9b245ca54bd30d03da03598de25 Mon Sep 17 00:00:00 2001 From: Quentin Laffont Date: Thu, 3 Nov 2022 08:35:49 +0100 Subject: [PATCH 1/4] feat(connections): able to save parent Id --- packages/api/src/controllers/connections.js | 1 + 1 file changed, 1 insertion(+) diff --git a/packages/api/src/controllers/connections.js b/packages/api/src/controllers/connections.js index 63b3c872c..86e8a9828 100644 --- a/packages/api/src/controllers/connections.js +++ b/packages/api/src/controllers/connections.js @@ -62,6 +62,7 @@ function getPortalCollections() { displayName: process.env[`LABEL_${id}`], isReadOnly: process.env[`READONLY_${id}`], databases: process.env[`DBCONFIG_${id}`] ? safeJsonParse(process.env[`DBCONFIG_${id}`]) : null, + parentId: process.env[`PARENT_${id}`] || undefined, // SSH tunnel useSshTunnel: process.env[`USE_SSH_${id}`], From 8ed73195c559e8b4d7cc3b65e8dcc2109fcd8209 Mon Sep 17 00:00:00 2001 From: Quentin Laffont Date: Thu, 3 Nov 2022 09:13:54 +0100 Subject: [PATCH 2/4] chore(app): add node version --- .node-version | 1 + 1 file changed, 1 insertion(+) create mode 100644 .node-version diff --git a/.node-version b/.node-version new file mode 100644 index 000000000..d9f880069 --- /dev/null +++ b/.node-version @@ -0,0 +1 @@ +16.14.2 From b0d61f974c1df1d739de43970b68022b84be6e79 Mon Sep 17 00:00:00 2001 From: Quentin Laffont Date: Fri, 4 Nov 2022 10:05:17 +0100 Subject: [PATCH 3/4] feat(app): able to set a parent --- packages/api/src/controllers/connections.js | 2 +- packages/web/src/appobj/AppObjectGroup.svelte | 3 +- packages/web/src/appobj/AppObjectList.svelte | 3 ++ .../settings/ConnectionDriverFields.svelte | 13 +++++++ .../web/src/widgets/ConnectionList.svelte | 35 ++++++++++++++++++- 5 files changed, 53 insertions(+), 3 deletions(-) diff --git a/packages/api/src/controllers/connections.js b/packages/api/src/controllers/connections.js index 86e8a9828..5447a6f4d 100644 --- a/packages/api/src/controllers/connections.js +++ b/packages/api/src/controllers/connections.js @@ -62,7 +62,7 @@ function getPortalCollections() { displayName: process.env[`LABEL_${id}`], isReadOnly: process.env[`READONLY_${id}`], databases: process.env[`DBCONFIG_${id}`] ? safeJsonParse(process.env[`DBCONFIG_${id}`]) : null, - parentId: process.env[`PARENT_${id}`] || undefined, + parent: process.env[`PARENT_${id}`] || undefined, // SSH tunnel useSshTunnel: process.env[`USE_SSH_${id}`], diff --git a/packages/web/src/appobj/AppObjectGroup.svelte b/packages/web/src/appobj/AppObjectGroup.svelte index 09d4ca740..97d04a834 100644 --- a/packages/web/src/appobj/AppObjectGroup.svelte +++ b/packages/web/src/appobj/AppObjectGroup.svelte @@ -10,6 +10,7 @@ export let group; export let groupFunc; export let items; + export let groupIconFunc = plusExpandIcon; export let module; export let checkedObjectsStore = null; export let disableContextMenu = false; @@ -37,7 +38,7 @@
(isExpanded = !isExpanded)}> - + {group} diff --git a/packages/web/src/appobj/AppObjectList.svelte b/packages/web/src/appobj/AppObjectList.svelte index 7644d5469..c301a168f 100644 --- a/packages/web/src/appobj/AppObjectList.svelte +++ b/packages/web/src/appobj/AppObjectList.svelte @@ -2,6 +2,7 @@ import _ from 'lodash'; import { asyncFilter } from '../utility/common'; import AppObjectGroup from './AppObjectGroup.svelte'; + import { plusExpandIcon } from '../icons/expandIcons'; import AppObjectListItem from './AppObjectListItem.svelte'; @@ -18,6 +19,7 @@ export let getIsExpanded = null; export let setIsExpanded = null; + export let groupIconFunc = plusExpandIcon; export let groupFunc = undefined; $: filtered = !groupFunc @@ -71,6 +73,7 @@ {module} items={groups[group]} {expandIconFunc} + {groupIconFunc} {isExpandable} {subItemsComponent} {checkedObjectsStore} diff --git a/packages/web/src/settings/ConnectionDriverFields.svelte b/packages/web/src/settings/ConnectionDriverFields.svelte index ebe5e5186..53061a680 100644 --- a/packages/web/src/settings/ConnectionDriverFields.svelte +++ b/packages/web/src/settings/ConnectionDriverFields.svelte @@ -217,6 +217,19 @@ disabled={isConnected} />
+ + {/if} + +{#if driver} +
+
+ + +
{/if} diff --git a/packages/web/src/widgets/ConnectionList.svelte b/packages/web/src/widgets/ConnectionList.svelte index cf7633878..9e9a7d3cf 100644 --- a/packages/web/src/widgets/ConnectionList.svelte +++ b/packages/web/src/widgets/ConnectionList.svelte @@ -25,6 +25,7 @@ import { apiCall } from '../utility/api'; import LargeButton from '../buttons/LargeButton.svelte'; import { matchingProps } from '../tabs/TableDataTab.svelte'; + import { plusExpandIcon, chevronExpandIcon } from '../icons/expandIcons'; const connections = useConnectionList(); const serverStatus = useServerStatus(); @@ -40,6 +41,9 @@ x => !x.unsaved || $openedConnections.includes(x._id) || $openedSingleDatabaseConnections.includes(x._id) ); + $: connectionsWithParent = connectionsWithStatusFiltered ? connectionsWithStatusFiltered?.filter((x) => x.parent !== undefined && x.parent !== null && x.parent.length !== 0) : []; + $: connectionsWithoutParent = connectionsWithStatusFiltered ? connectionsWithStatusFiltered?.filter((x) => x.parent === undefined || x.parent === null || x.parent.length === 0) : []; + const handleRefreshConnections = () => { for (const conid of $openedConnections) { apiCall('server-connections/refresh', { conid }); @@ -63,7 +67,26 @@ (getConnectionLabel(connection) || '').toUpperCase())} + list={_.sortBy(connectionsWithParent, connection => (getConnectionLabel(connection) || '').toUpperCase())} + module={connectionAppObject} + subItemsComponent={SubDatabaseList} + expandOnClick + isExpandable={data => $openedConnections.includes(data._id) && !data.singleDatabase} + {filter} + passProps={{ connectionColorFactory: $connectionColorFactory, showPinnedInsteadOfUnpin: true }} + getIsExpanded={data => $expandedConnections.includes(data._id) && !data.singleDatabase} + setIsExpanded={(data, value) => { + expandedConnections.update(old => (value ? [...old, data._id] : old.filter(x => x != data._id))); + }} + groupIconFunc={chevronExpandIcon} + groupFunc={data => data.parent} + expandIconFunc={plusExpandIcon} + /> + {#if connectionsWithParent?.length > 0 && connectionsWithoutParent?.length > 0} +
+ {/if} + (getConnectionLabel(connection) || '').toUpperCase())} module={connectionAppObject} subItemsComponent={SubDatabaseList} expandOnClick @@ -84,3 +107,13 @@ --> {/if} + + + + From cb619a0fe04dc9028174e6432d6c43dce744d242 Mon Sep 17 00:00:00 2001 From: Jan Prochazka Date: Sat, 5 Nov 2022 10:36:41 +0100 Subject: [PATCH 4/4] drag & drop into/from connection folder --- packages/web/src/appobj/AppObjectGroup.svelte | 13 +++++++- packages/web/src/appobj/AppObjectList.svelte | 2 ++ .../web/src/widgets/ConnectionList.svelte | 33 +++++++++++++++---- .../src/widgets/WidgetsInnerContainer.svelte | 2 +- 4 files changed, 42 insertions(+), 8 deletions(-) diff --git a/packages/web/src/appobj/AppObjectGroup.svelte b/packages/web/src/appobj/AppObjectGroup.svelte index 97d04a834..e7f791602 100644 --- a/packages/web/src/appobj/AppObjectGroup.svelte +++ b/packages/web/src/appobj/AppObjectGroup.svelte @@ -15,6 +15,7 @@ export let checkedObjectsStore = null; export let disableContextMenu = false; export let passProps; + export let onDropOnGroup = undefined; let isExpanded = true; @@ -36,7 +37,17 @@ } -
(isExpanded = !isExpanded)}> +
(isExpanded = !isExpanded)} + on:drop={e => { + var data = e.dataTransfer.getData('app_object_drag_data'); + if (data && onDropOnGroup) { + e.stopPropagation(); + onDropOnGroup(data, group); + } + }} +> diff --git a/packages/web/src/appobj/AppObjectList.svelte b/packages/web/src/appobj/AppObjectList.svelte index c301a168f..d95b14f23 100644 --- a/packages/web/src/appobj/AppObjectList.svelte +++ b/packages/web/src/appobj/AppObjectList.svelte @@ -21,6 +21,7 @@ export let groupIconFunc = plusExpandIcon; export let groupFunc = undefined; + export let onDropOnGroup = undefined; $: filtered = !groupFunc ? list.filter(data => { @@ -83,6 +84,7 @@ {passProps} {getIsExpanded} {setIsExpanded} + {onDropOnGroup} /> {/each} {:else} diff --git a/packages/web/src/widgets/ConnectionList.svelte b/packages/web/src/widgets/ConnectionList.svelte index 9e9a7d3cf..f6e5e5d25 100644 --- a/packages/web/src/widgets/ConnectionList.svelte +++ b/packages/web/src/widgets/ConnectionList.svelte @@ -26,6 +26,7 @@ import LargeButton from '../buttons/LargeButton.svelte'; import { matchingProps } from '../tabs/TableDataTab.svelte'; import { plusExpandIcon, chevronExpandIcon } from '../icons/expandIcons'; + import { safeJsonParse } from 'dbgate-tools'; const connections = useConnectionList(); const serverStatus = useServerStatus(); @@ -41,8 +42,12 @@ x => !x.unsaved || $openedConnections.includes(x._id) || $openedSingleDatabaseConnections.includes(x._id) ); - $: connectionsWithParent = connectionsWithStatusFiltered ? connectionsWithStatusFiltered?.filter((x) => x.parent !== undefined && x.parent !== null && x.parent.length !== 0) : []; - $: connectionsWithoutParent = connectionsWithStatusFiltered ? connectionsWithStatusFiltered?.filter((x) => x.parent === undefined || x.parent === null || x.parent.length === 0) : []; + $: connectionsWithParent = connectionsWithStatusFiltered + ? connectionsWithStatusFiltered?.filter(x => x.parent !== undefined && x.parent !== null && x.parent.length !== 0) + : []; + $: connectionsWithoutParent = connectionsWithStatusFiltered + ? connectionsWithStatusFiltered?.filter(x => x.parent === undefined || x.parent === null || x.parent.length === 0) + : []; const handleRefreshConnections = () => { for (const conid of $openedConnections) { @@ -50,6 +55,16 @@ } }; + const handleDropOnGroup = (data, group) => { + const json = safeJsonParse(data); + if (json?._id) { + apiCall('connections/update', { + _id: json?._id, + values: { parent: group }, + }); + } + }; + const connectionColorFactory = useConnectionColorFactory(3); @@ -65,7 +80,14 @@ - + { + var data = e.dataTransfer.getData('app_object_drag_data'); + if (data) { + handleDropOnGroup(data, ''); + } + }} +> (getConnectionLabel(connection) || '').toUpperCase())} module={connectionAppObject} @@ -81,9 +103,10 @@ groupIconFunc={chevronExpandIcon} groupFunc={data => data.parent} expandIconFunc={plusExpandIcon} + onDropOnGroup={handleDropOnGroup} /> {#if connectionsWithParent?.length > 0 && connectionsWithoutParent?.length > 0} -
+
{/if} (getConnectionLabel(connection) || '').toUpperCase())} @@ -108,8 +131,6 @@ {/if} - -