From: Hannes Laimer <h.laimer@proxmox.com>
To: Christian Ebner <c.ebner@proxmox.com>, pbs-devel@lists.proxmox.com
Subject: Re: [PATCH proxmox-backup v4 6/7] ui: add move group action
Date: Tue, 17 Mar 2026 12:48:24 +0100 [thread overview]
Message-ID: <e503d389-9adf-43c8-a6e5-f533e3c06278@proxmox.com> (raw)
In-Reply-To: <720f67da-1791-4b7b-8fb9-d567dd734d60@proxmox.com>
On 2026-03-17 12:43, Christian Ebner wrote:
> One comment inline.
>
> On 3/11/26 4:13 PM, Hannes Laimer wrote:
>> Signed-off-by: Hannes Laimer <h.laimer@proxmox.com>
>> ---
>> www/Makefile | 1 +
>> www/datastore/Content.js | 61 ++++++++++++++++++++++++++++++++++++++++
>> www/window/GroupMove.js | 56 ++++++++++++++++++++++++++++++++++++
>> 3 files changed, 118 insertions(+)
>> create mode 100644 www/window/GroupMove.js
>>
>> diff --git a/www/Makefile b/www/Makefile
>> index 9ebf0445..db775b64 100644
>> --- a/www/Makefile
>> +++ b/www/Makefile
>> @@ -77,6 +77,7 @@ JSSRC= \
>> window/ACLEdit.js \
>> window/BackupGroupChangeOwner.js \
>> window/CreateDirectory.js \
>> + window/GroupMove.js \
>> window/DataStoreEdit.js \
>> window/NamespaceEdit.js \
>> window/MaintenanceOptions.js \
>> diff --git a/www/datastore/Content.js b/www/datastore/Content.js
>> index a2aa1949..ccd48616 100644
>> --- a/www/datastore/Content.js
>> +++ b/www/datastore/Content.js
>> @@ -635,6 +635,50 @@ Ext.define('PBS.DataStoreContent', {
>> });
>> },
>> + moveNS: function () {
>> + let me = this;
>> + let view = me.getView();
>> + if (!view.namespace || view.namespace === '') {
>> + return;
>> + }
>> + let win = Ext.create('PBS.window.NamespaceMove', {
>> + datastore: view.datastore,
>> + namespace: view.namespace,
>> + taskDone: (success) => {
>> + if (success) {
>> + let newNs = win.getNewNamespace();
>> + view.down('pbsNamespaceSelector').store?.load();
>> + me.nsChange(null, newNs);
>> + }
>> + },
>> + });
>> + win.show();
>> + },
>> +
>> + moveGroup: function (data) {
>> + let me = this;
>> + let view = me.getView();
>> + let group = `${data.backup_type}/${data.backup_id}`;
>> + Ext.create('PBS.window.GroupMove', {
>> + datastore: view.datastore,
>> + namespace: view.namespace,
>> + backupType: data.backup_type,
>> + backupId: data.backup_id,
>> + group,
>> + taskDone: () => me.reload(),
>> + }).show();
>> + },
>> +
>> + onMove: function (table, rI, cI, item, e, { data }) {
>> + let me = this;
>> + if (data.ty === 'group') {
>> + me.moveGroup(data);
>> + } else if (data.ty === 'ns') {
>> + me.moveNS();
>> + }
>> + },
>> +
>> +
>> forgetGroup: function (data) {
>> let me = this;
>> let view = me.getView();
>> @@ -1080,6 +1124,23 @@ Ext.define('PBS.DataStoreContent', {
>> },
>> isActionDisabled: (v, r, c, i, rec) =>
>> rec.data.ty !== 'dir',
>> },
>> + {
>> + handler: 'onMove',
>> + getTip: (v, m, { data }) => {
>> + if (data.ty === 'group') {
>> + return Ext.String.format(gettext("Move
>> group '{0}'"), v);
>> + }
>> + return Ext.String.format(gettext("Move
>> namespace '{0}'"), v);
>> + },
>> + getClass: (v, m, { data }) => {
>> + if (data.ty === 'group') { return 'fa fa-
>> arrows'; }
>> + if (data.ty === 'ns' && !data.isRootNS &&
>> data.ns === undefined) {
>> + return 'fa fa-arrows';
>> + }
>> + return 'pmx-hidden';
>> + },
>> + isActionDisabled: (v, r, c, i, { data }) => false,
>> + },
>
> comment: placing this right before the prune icon is a bit dangerous
> (although a prune will ask for confirmation).
>
> Since the protected icons is not shown for groups and namespaces, it
> should rather be placed before that, right after the verification icon.
>
makes sense, will change in v5
> Further, what I missed is having this also in the context menu opened on
> right click of the group/namespace.
never right-clicked a group, didn't know we have a context menu there :)
will also add it there, thanks!
>
>> {
>> handler: 'onForget',
>> getTip: (v, m, { data }) => {
>> diff --git a/www/window/GroupMove.js b/www/window/GroupMove.js
>> new file mode 100644
>> index 00000000..f663c606
>> --- /dev/null
>> +++ b/www/window/GroupMove.js
>> @@ -0,0 +1,56 @@
>> +Ext.define('PBS.window.GroupMove', {
>> + extend: 'Proxmox.window.Edit',
>> + alias: 'widget.pbsGroupMove',
>> + mixins: ['Proxmox.Mixin.CBind'],
>> +
>> + onlineHelp: 'storage-namespaces',
>> +
>> + isCreate: true,
>> + submitText: gettext('Move'),
>> + showTaskViewer: true,
>> +
>> + cbind: {
>> + url: '/api2/extjs/admin/datastore/{datastore}/groups',
>> + title: (get) => Ext.String.format(gettext("Move Backup Group
>> '{0}'"), get('group')),
>> + },
>> + method: 'PUT',
>> +
>> + width: 400,
>> + fieldDefaults: {
>> + labelWidth: 120,
>> + },
>> +
>> + items: {
>> + xtype: 'inputpanel',
>> + onGetValues: function (values) {
>> + let win = this.up('window');
>> + let result = {
>> + 'backup-type': win.backupType,
>> + 'backup-id': win.backupId,
>> + 'new-ns': values['new-ns'] || '',
>> + };
>> + if (win.namespace && win.namespace !== '') {
>> + result.ns = win.namespace;
>> + }
>> + return result;
>> + },
>> + items: [
>> + {
>> + xtype: 'displayfield',
>> + fieldLabel: gettext('Group'),
>> + cbind: {
>> + value: '{group}',
>> + },
>> + },
>> + {
>> + xtype: 'pbsNamespaceSelector',
>> + name: 'new-ns',
>> + fieldLabel: gettext('Target Namespace'),
>> + allowBlank: true,
>> + cbind: {
>> + datastore: '{datastore}',
>> + },
>> + },
>> + ],
>> + },
>> +});
>
next prev parent reply other threads:[~2026-03-17 11:48 UTC|newest]
Thread overview: 21+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-03-11 15:13 [PATCH proxmox-backup v4 0/7] fixes #6195: add support for moving groups and namespaces Hannes Laimer
2026-03-11 15:13 ` [PATCH proxmox-backup v4 1/7] datastore: add namespace-level locking Hannes Laimer
2026-03-12 15:43 ` Christian Ebner
2026-03-13 7:40 ` Hannes Laimer
2026-03-13 7:56 ` Christian Ebner
2026-03-17 13:03 ` Christian Ebner
2026-03-11 15:13 ` [PATCH proxmox-backup v4 2/7] datastore: add move_group Hannes Laimer
2026-03-12 16:08 ` Christian Ebner
2026-03-13 7:28 ` Hannes Laimer
2026-03-13 7:52 ` Christian Ebner
2026-03-11 15:13 ` [PATCH proxmox-backup v4 3/7] datastore: add move_namespace Hannes Laimer
2026-03-11 15:13 ` [PATCH proxmox-backup v4 4/7] api: add PUT endpoint for move_group Hannes Laimer
2026-03-12 16:17 ` Christian Ebner
2026-03-11 15:13 ` [PATCH proxmox-backup v4 5/7] api: add PUT endpoint for move_namespace Hannes Laimer
2026-03-12 16:19 ` Christian Ebner
2026-03-11 15:13 ` [PATCH proxmox-backup v4 6/7] ui: add move group action Hannes Laimer
2026-03-17 11:43 ` Christian Ebner
2026-03-17 11:48 ` Hannes Laimer [this message]
2026-03-11 15:13 ` [PATCH proxmox-backup v4 7/7] ui: add move namespace action Hannes Laimer
2026-03-12 16:21 ` [PATCH proxmox-backup v4 0/7] fixes #6195: add support for moving groups and namespaces Christian Ebner
2026-03-17 13:47 ` Christian Ebner
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=e503d389-9adf-43c8-a6e5-f533e3c06278@proxmox.com \
--to=h.laimer@proxmox.com \
--cc=c.ebner@proxmox.com \
--cc=pbs-devel@lists.proxmox.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox