From 2d400ae7eb8334dcb49e318cee6bb80f707a486d Mon Sep 17 00:00:00 2001 From: "SPRINX0\\prochazka" Date: Mon, 23 Jun 2025 16:30:26 +0200 Subject: [PATCH] SYNC: folder administration modal --- packages/api/.env | 2 +- packages/api/src/controllers/cloud.js | 18 +++++ .../buttons/FormStyledDropDownButton.svelte | 78 +++++++++++++++++++ .../web/src/widgets/PrivateCloudWidget.svelte | 56 ++++++------- 4 files changed, 125 insertions(+), 29 deletions(-) create mode 100644 packages/web/src/buttons/FormStyledDropDownButton.svelte diff --git a/packages/api/.env b/packages/api/.env index 17fb6acc1..c979d16f1 100644 --- a/packages/api/.env +++ b/packages/api/.env @@ -4,7 +4,7 @@ ALLOW_DBGATE_PRIVATE_CLOUD=1 DEVWEB=1 # PROD_DBGATE_CLOUD=1 # PROD_DBGATE_IDENTITY=1 -# LOCAL_DBGATE_CLOUD=1 +LOCAL_DBGATE_CLOUD=1 # LOCAL_DBGATE_IDENTITY=1 # CLOUD_UPGRADE_FILE=c:\test\upg\upgrade.zip diff --git a/packages/api/src/controllers/cloud.js b/packages/api/src/controllers/cloud.js index 890f438d4..8dae42c00 100644 --- a/packages/api/src/controllers/cloud.js +++ b/packages/api/src/controllers/cloud.js @@ -258,4 +258,22 @@ module.exports = { await fs.writeFile(filePath, content); return true; }, + + folderUsers_meta: true, + async folderUsers({ folid }) { + const resp = await callCloudApiGet(`content-folders/users/${folid}`); + return resp; + }, + + setFolderUserRole_meta: true, + async setFolderUserRole({ folid, email, role }) { + const resp = await callCloudApiPost(`content-folders/set-user-role/${folid}`, { email, role }); + return resp; + }, + + removeFolderUser_meta: true, + async removeFolderUser({ folid, email }) { + const resp = await callCloudApiPost(`content-folders/remove-user/${folid}`, { email }); + return resp; + }, }; diff --git a/packages/web/src/buttons/FormStyledDropDownButton.svelte b/packages/web/src/buttons/FormStyledDropDownButton.svelte new file mode 100644 index 000000000..e8588d2e2 --- /dev/null +++ b/packages/web/src/buttons/FormStyledDropDownButton.svelte @@ -0,0 +1,78 @@ + + +
+ {value} + +
+ + diff --git a/packages/web/src/widgets/PrivateCloudWidget.svelte b/packages/web/src/widgets/PrivateCloudWidget.svelte index 24b5c60de..7221ae32c 100644 --- a/packages/web/src/widgets/PrivateCloudWidget.svelte +++ b/packages/web/src/widgets/PrivateCloudWidget.svelte @@ -40,6 +40,7 @@ import runCommand from '../commands/runCommand'; import SaveFileModal from '../modals/SaveFileModal.svelte'; import newQuery from '../query/newQuery'; + import ConfigureSharedFolderModal from '../modals/ConfigureSharedFolderModal.svelte'; let filter = ''; let domSqlObjectList = null; @@ -201,41 +202,40 @@ }); }; - const handleCopyInviteLink = async role => { - const { inviteToken } = await apiCall(`cloud/get-invite-token`, { - folid: folder, - role, - }); - if (inviteToken) { - const inviteLink = `dbgate://folder/v1/${inviteToken}?mode=${role}`; - navigator.clipboard.writeText(inviteLink); - showSnackbarInfo(`Invite link (${role}) copied to clipboard`); - } - }; - return [ contentGroupMap[folder]?.role == 'admin' && [ { text: 'Rename', onClick: handleRename }, { text: 'Delete', onClick: handleDelete }, ], - contentGroupMap[folder]?.role == 'admin' && + isProApp() && + contentGroupMap[folder]?.role == 'admin' && !contentGroupMap[folder]?.isPrivate && { - text: 'Copy invite link', - submenu: [ - { - text: 'Admin', - onClick: () => handleCopyInviteLink('admin'), - }, - { - text: 'Write', - onClick: () => handleCopyInviteLink('write'), - }, - { - text: 'Read', - onClick: () => handleCopyInviteLink('read'), - }, - ], + text: 'Administrate access', + onClick: () => { + showModal(ConfigureSharedFolderModal, { + folid: folder, + name: contentGroupMap[folder]?.name, + }); + }, }, + // contentGroupMap[folder]?.role == 'admin' && + // !contentGroupMap[folder]?.isPrivate && { + // text: 'Copy invite link', + // submenu: [ + // { + // text: 'Admin', + // onClick: () => handleCopyInviteLink('admin'), + // }, + // { + // text: 'Write', + // onClick: () => handleCopyInviteLink('write'), + // }, + // { + // text: 'Read', + // onClick: () => handleCopyInviteLink('read'), + // }, + // ], + // }, ]; }