datacenter.cfg returns an 'ordering' option. parse that and
use it to order the tags when viewing. default is alphabetical.

with alphabetical ordering, drag & drop when editing is disabled and the
tags will be inserted at the right place. when saving, the sorted
order will be written into the config

Signed-off-by: Dominik Csapak <d.csa...@proxmox.com>
---
 www/css/ext6-pve.css          |  5 +++++
 www/manager6/Utils.js         | 13 +++++++++++++
 www/manager6/dc/OptionView.js | 14 ++++++++++++++
 www/manager6/form/TagEdit.js  | 13 ++++++++++++-
 4 files changed, 44 insertions(+), 1 deletion(-)

diff --git a/www/css/ext6-pve.css b/www/css/ext6-pve.css
index 4fc83a878..b8c713c48 100644
--- a/www/css/ext6-pve.css
+++ b/www/css/ext6-pve.css
@@ -668,6 +668,11 @@ table.osds td:first-of-type {
     cursor: grab;
 }
 
+.hide-handles .pve-edit-tag > i.handle {
+    display: none;
+    padding-right: 0px;
+}
+
 .pve-edit-tag > i.action,
 .pve-add-tag > i.action {
     padding-left: 5px;
diff --git a/www/manager6/Utils.js b/www/manager6/Utils.js
index 940752469..8484372f2 100644
--- a/www/manager6/Utils.js
+++ b/www/manager6/Utils.js
@@ -1930,10 +1930,19 @@ Ext.define('PVE.Utils', {
        'none': Proxmox.Utils.NoneText,
     },
 
+    tagOrderOptions: {
+       '__default__': `${Proxmox.Utils.defaultText} 
(${gettext('Alphabetical')})`,
+       'config': gettext('Configuration'),
+       'alphabetical': gettext('Alphabetical'),
+    },
+
     renderTags: function(tagstext, overrides) {
        let text = '';
        if (tagstext) {
            let tags = (tagstext.split(/[,; ]/) || []).filter(t => !!t);
+           if (PVE.Utils.shouldSortTags()) {
+               tags = tags.sort();
+           }
            text += ' ';
            tags.forEach((tag) => {
                text += Proxmox.Utils.getTagElement(tag, overrides);
@@ -1942,6 +1951,10 @@ Ext.define('PVE.Utils', {
        return text;
     },
 
+    shouldSortTags: function() {
+       return !(PVE.UIOptions?.['tag-style']?.ordering === 'config');
+    },
+
     tagCharRegex: /^[a-z0-9+_.-]$/i,
 },
 
diff --git a/www/manager6/dc/OptionView.js b/www/manager6/dc/OptionView.js
index be9e2abb2..aeab024e4 100644
--- a/www/manager6/dc/OptionView.js
+++ b/www/manager6/dc/OptionView.js
@@ -323,6 +323,8 @@ Ext.define('PVE.dc.OptionView', {
                let shape = value.shape;
                let shapeText = PVE.Utils.tagTreeStyles[shape ?? '__default__'];
                let txt = Ext.String.format(gettext("Tree Shape: {0}"), 
shapeText);
+               let orderText = PVE.Utils.tagOrderOptions[value.ordering ?? 
'__default__'];
+               txt += `, ${Ext.String.format(gettext("Ordering: {0}"), 
orderText)}`;
                if (Object.keys(colors).length > 0) {
                    txt += ', ';
                }
@@ -361,6 +363,9 @@ Ext.define('PVE.dc.OptionView', {
                            if (values.shape) {
                                style.shape = values.shape;
                            }
+                           if (values.ordering) {
+                               style.ordering = values.ordering;
+                           }
                            let value = PVE.Parser.printPropertyString(style);
                            if (value === '') {
                                return {
@@ -380,6 +385,15 @@ Ext.define('PVE.dc.OptionView', {
                                defaultValue: '__default__',
                                deleteEmpty: true,
                            },
+                           {
+                               name: 'ordering',
+                               xtype: 'proxmoxKVComboBox',
+                               fieldLabel: gettext('Ordering'),
+                               comboItems: 
Object.entries(PVE.Utils.tagOrderOptions),
+                               defaultValue: '__default__',
+                               value: '__default__',
+                               deleteEmpty: true,
+                           },
                            {
                                xtype: 'displayfield',
                                fieldLabel: gettext('Color Overrides'),
diff --git a/www/manager6/form/TagEdit.js b/www/manager6/form/TagEdit.js
index a6e14349e..6325d39df 100644
--- a/www/manager6/form/TagEdit.js
+++ b/www/manager6/form/TagEdit.js
@@ -37,6 +37,8 @@ Ext.define('PVE.panel.TagEditContainer', {
        onRender: function(v) {
            let me = this;
            let view = me.getView();
+           view.toggleCls('hide-handles', PVE.Utils.shouldSortTags());
+
            view.dragzone = Ext.create('Ext.dd.DragZone', v.getEl(), {
                getDragData: function(e) {
                    let source = e.getTarget('.handle');
@@ -168,6 +170,14 @@ Ext.define('PVE.panel.TagEditContainer', {
            let view = me.getView();
            let vm = me.getViewModel();
            let index = view.items.indexOf(me.lookup('addTagBtn'));
+           if (PVE.Utils.shouldSortTags()) {
+               index = view.items.findIndexBy(tagField => {
+                   if (tagField.reference === 'addTagBtn') {
+                       return true;
+                   }
+                   return tagField.tag >= tag;
+               }, 1);
+           }
            view.insert(index, {
                xtype: 'pveTag',
                tag,
@@ -226,7 +236,8 @@ Ext.define('PVE.panel.TagEditContainer', {
            }
 
            me.mon(Ext.GlobalEvents, 'loadedUiOptions', () => {
-               me.loadTags(me.oldTags, true); // refresh tag colors
+               view.toggleCls('hide-handles', PVE.Utils.shouldSortTags());
+               me.loadTags(me.oldTags, true); // refresh tag colors and order
            });
        },
     },
-- 
2.30.2



_______________________________________________
pve-devel mailing list
pve-devel@lists.proxmox.com
https://lists.proxmox.com/cgi-bin/mailman/listinfo/pve-devel

Reply via email to