diff --git a/packages/api/src/controllers/connections.js b/packages/api/src/controllers/connections.js index 7ca5c67bb..58504e87d 100644 --- a/packages/api/src/controllers/connections.js +++ b/packages/api/src/controllers/connections.js @@ -283,6 +283,14 @@ module.exports = { return res; }, + batchChangeFolder_meta: true, + async batchChangeFolder({ folder, newFolder }, req) { + // const updated = await this.datastore.find(x => x.parent == folder); + const res = await this.datastore.updateAll(x => (x.parent == folder ? { ...x, parent: newFolder } : x)); + socket.emitChanged('connection-list-changed'); + return res; + }, + updateDatabase_meta: true, async updateDatabase({ conid, database, values }, req) { if (portalConnections) return; diff --git a/packages/api/src/utility/JsonLinesDatabase.js b/packages/api/src/utility/JsonLinesDatabase.js index 9f4243bbd..12de5cef3 100644 --- a/packages/api/src/utility/JsonLinesDatabase.js +++ b/packages/api/src/utility/JsonLinesDatabase.js @@ -90,6 +90,12 @@ class JsonLinesDatabase { return obj; } + async updateAll(mapFunction) { + await this._ensureLoaded(); + this.data = this.data.map(mapFunction); + await this._save(); + } + async patch(id, values) { await this._ensureLoaded(); this.data = this.data.map(x => (x._id == id ? { ...x, ...values } : x)); diff --git a/packages/web/src/appobj/AppObjectGroup.svelte b/packages/web/src/appobj/AppObjectGroup.svelte index bf52001ca..82ddc457d 100644 --- a/packages/web/src/appobj/AppObjectGroup.svelte +++ b/packages/web/src/appobj/AppObjectGroup.svelte @@ -4,6 +4,7 @@ import { plusExpandIcon } from '../icons/expandIcons'; import FontIcon from '../icons/FontIcon.svelte'; + import contextMenu from '../utility/contextMenu'; import AppObjectListItem from './AppObjectListItem.svelte'; @@ -16,6 +17,7 @@ export let disableContextMenu = false; export let passProps; export let onDropOnGroup = undefined; + export let groupContextMenu = null; let isExpanded = true; @@ -45,7 +47,12 @@ } -