]> git.proxmox.com Git - pve-manager.git/blobdiff - www/manager6/form/DiskStorageSelector.js
ui: fix duplicate references when using multiple disk storage selectors
[pve-manager.git] / www / manager6 / form / DiskStorageSelector.js
index 2067a6ca859443c9059aa4b9269e8c201e973885..860a3b3ca4410b2188479ff2ca89a9bd0d79a25f 100644 (file)
@@ -4,7 +4,7 @@ Ext.define('PVE.form.DiskStorageSelector', {
 
     layout: 'fit',
     defaults: {
-       margin: '0 0 5 0'
+       margin: '0 0 5 0',
     },
 
     // the fieldLabel for the storageselector
@@ -28,7 +28,10 @@ Ext.define('PVE.form.DiskStorageSelector', {
     // hides the size field (e.g, for the efi disk dialog)
     hideSize: false,
 
-    // sets the intial size value
+    // hides the format field (e.g. for TPM state)
+    hideFormat: false,
+
+    // sets the initial size value
     // string because else we get a type confusion
     defaultSize: '32',
 
@@ -54,17 +57,24 @@ Ext.define('PVE.form.DiskStorageSelector', {
            return;
        }
 
-       var selectformat = false;
+       let validFormats = {};
+       let selectFormat = 'raw';
        if (rec.data.format) {
-           var format = rec.data.format[0]; // 0 is the formats, 1 the default in the backend
-           delete format.subvol; // we never need subvol in the gui
-           selectformat = (Ext.Object.getSize(format) > 1);
+           validFormats = rec.data.format[0]; // 0 is the formats, 1 the default in the backend
+           delete validFormats.subvol; // we never need subvol in the gui
+           if (validFormats.qcow2) {
+               selectFormat = 'qcow2';
+           } else if (validFormats.raw) {
+               selectFormat = 'raw';
+           } else {
+               selectFormat = rec.data.format[1];
+           }
        }
 
        var select = !!rec.data.select_existing && !me.hideSelection;
 
-       formatsel.setDisabled(!selectformat);
-       formatsel.setValue(selectformat ? 'qcow2' : 'raw');
+       formatsel.setDisabled(me.hideFormat || Ext.Object.getSize(validFormats) <= 1);
+       formatsel.setValue(selectFormat);
 
        hdfilesel.setDisabled(!select);
        hdfilesel.setVisible(select);
@@ -76,6 +86,30 @@ Ext.define('PVE.form.DiskStorageSelector', {
        hdsizesel.setVisible(!select && !me.hideSize);
     },
 
+    setNodename: function(nodename) {
+       var me = this;
+       var hdstorage = me.getComponent('hdstorage');
+       var hdfilesel = me.getComponent('hdimage');
+
+       hdstorage.setNodename(nodename);
+       hdfilesel.setNodename(nodename);
+    },
+
+    setDisabled: function(value) {
+       var me = this;
+       var hdstorage = me.getComponent('hdstorage');
+
+       // reset on disable
+       if (value) {
+           hdstorage.setValue();
+       }
+       hdstorage.setDisabled(value);
+
+       // disabling does not always fire this event and we do not need
+       // the value of the validity
+       hdstorage.fireEvent('validitychange');
+    },
+
     initComponent: function() {
        var me = this;
 
@@ -84,58 +118,58 @@ Ext.define('PVE.form.DiskStorageSelector', {
                xtype: 'pveStorageSelector',
                itemId: 'hdstorage',
                name: 'hdstorage',
-               reference: 'hdstorage',
                fieldLabel: me.storageLabel,
                nodename: me.nodename,
                storageContent: me.storageContent,
+               disabled: me.disabled,
                autoSelect: me.autoSelect,
                allowBlank: me.allowBlank,
                emptyText: me.emptyText,
                listeners: {
                    change: {
                        fn: me.changeStorage,
-                       scope: me
-                   }
-               }
+                       scope: me,
+                   },
+               },
            },
            {
                xtype: 'pveFileSelector',
                name: 'hdimage',
-               reference: 'hdimage',
                itemId: 'hdimage',
                fieldLabel: gettext('Disk image'),
                nodename: me.nodename,
                disabled: true,
-               hidden: true
+               hidden: true,
            },
            {
                xtype: 'numberfield',
                itemId: 'disksize',
-               reference: 'disksize',
                name: 'disksize',
-               fieldLabel: gettext('Disk size') + ' (GB)',
+               fieldLabel: gettext('Disk size') + ' (GiB)',
                hidden: me.hideSize,
                disabled: me.hideSize,
                minValue: 0.001,
                maxValue: 128*1024,
                decimalPrecision: 3,
                value: me.defaultSize,
-               allowBlank: false
+               allowBlank: false,
            },
            {
                xtype: 'pveDiskFormatSelector',
                itemId: 'diskformat',
-               reference: 'diskformat',
                name: 'diskformat',
                fieldLabel: gettext('Format'),
                nodename: me.nodename,
                disabled: true,
-               hidden: me.storageContent === 'rootdir',
+               hidden: me.hideFormat || me.storageContent === 'rootdir',
                value: 'qcow2',
-               allowBlank: false
-           }
+               allowBlank: false,
+           },
        ];
 
+       // use it to disable the children but not ourself
+       me.disabled = false;
+
        me.callParent();
-    }
+    },
 });