Combine both dialogues. This not only helps to reuse code but also reduces storage choices from the Storage -> Add menu, and thus improves usability.
Signed-off-by: Thomas Lamprecht <t.lampre...@proxmox.com> --- changes v2 -> v3: * don't show pveceph checkbox when editing * address the issue that displayfields have no submitValue config getter/setter and thus cannot bind on those - as the bind mixin handles binding keys with null/undefined value poorly we need to actively diferrentiate between those cases, thus add a small closure helper www/manager6/Utils.js | 11 +-- www/manager6/dc/StorageView.js | 4 - www/manager6/storage/RBDEdit.js | 148 ++++++++++++++++++++++---------- 3 files changed, 104 insertions(+), 59 deletions(-) diff --git a/www/manager6/Utils.js b/www/manager6/Utils.js index ad5a0a61..db240eda 100644 --- a/www/manager6/Utils.js +++ b/www/manager6/Utils.js @@ -430,17 +430,12 @@ Ext.define('PVE.Utils', { utilities: { rbd: { name: 'RBD', ipanel: 'RBDInputPanel', - hideAdd: true, - faIcon: 'building' - }, - rbd_ext: { - name: 'RBD (external)', - ipanel: 'RBDInputPanel', faIcon: 'building' }, pveceph: { name: 'RBD (PVE)', - ipanel: 'PVERBDInputPanel', + ipanel: 'RBDInputPanel', + hideAdd: true, faIcon: 'building' }, zfs: { @@ -461,7 +456,7 @@ Ext.define('PVE.Utils', { utilities: { format_storage_type: function(value, md, record) { if (value === 'rbd' && record) { - value = (record.get('monhost')?'rbd_ext':'pveceph'); + value = (record.get('monhost') ? 'rbd' : 'pveceph'); } var schema = PVE.Utils.storageSchema[value]; diff --git a/www/manager6/dc/StorageView.js b/www/manager6/dc/StorageView.js index 57214b7f..cc1e3ed6 100644 --- a/www/manager6/dc/StorageView.js +++ b/www/manager6/dc/StorageView.js @@ -54,10 +54,6 @@ Ext.define('PVE.dc.StorageView', { var type = rec.data.type, sid = rec.data.storage; - if (type === 'rbd' && !rec.data.monhost) { - type = 'pveceph'; - } - me.createStorageEditWindow(type, sid); }; diff --git a/www/manager6/storage/RBDEdit.js b/www/manager6/storage/RBDEdit.js index d26a6ac3..e862f036 100644 --- a/www/manager6/storage/RBDEdit.js +++ b/www/manager6/storage/RBDEdit.js @@ -1,6 +1,44 @@ +/*jslint confusion: true*/ Ext.define('PVE.storage.RBDInputPanel', { extend: 'PVE.panel.StorageBase', + viewModel: { + parent: null, + data: { + pveceph: true + } + }, + + controller: { + xclass: 'Ext.app.ViewController', + control: { + 'textfield[name=username]': { + disable: 'resetField' + }, + 'textfield[name=monhost]': { + disable: 'disableMonField', + enable: 'enableMonField' + } + }, + resetField: function(field) { + field.reset(); + }, + enableMonField: function(field) { + field.setEmptyText(''); + }, + disableMonField: function(field) { + field.reset(); + field.setEmptyText(gettext('Autodetected')); + } + }, + + setValues: function(values) { + if (values.monhost) { + this.viewModel.set('pveceph', false); + } + this.callParent([values]); + }, + initComponent : function() { var me = this; @@ -9,48 +47,58 @@ Ext.define('PVE.storage.RBDInputPanel', { } me.type = 'rbd'; - me.column1 = []; + var getBinds = function (activeIfPVECeph, hide) { + var bind = { + disabled: activeIfPVECeph ? '{!pveceph}' : '{pveceph}' + }; - if (me.pveceph) { - me.column1.push( - { - xtype: me.isCreate ? 'pveCephPoolSelector' : 'displayfield', - nodename: me.nodename, - name: 'pool', - fieldLabel: gettext('Pool'), - allowBlank: false - } - ); - } else { - me.column1.push( - { - xtype: me.isCreate ? 'textfield' : 'displayfield', - name: 'pool', - value: 'rbd', - fieldLabel: gettext('Pool'), - allowBlank: false - }, - { - xtype: me.isCreate ? 'textfield' : 'displayfield', - name: 'monhost', - vtype: 'HostList', - value: '', - fieldLabel: 'Monitor(s)', - allowBlank: false - }, - { - xtype: me.isCreate ? 'textfield' : 'displayfield', - name: 'username', - value: me.isCreate ? 'admin': '', - fieldLabel: gettext('User name'), - allowBlank: true - } - ); - } + // displayfield has no submitValue and bind mixin cannot handle that + if (me.isCreate) { + bind.submitValue = activeIfPVECeph ? '{pveceph}' : '{!pveceph}'; + } + if (hide) { + bind.hidden = activeIfPVECeph ? '{!pveceph}' : '{pveceph}'; + } + + return bind; + }; + + me.column1 = [ + { + xtype: me.isCreate ? 'pveCephPoolSelector' : 'displayfield', + nodename: me.nodename, + name: 'pool', + bind: getBinds(true, true), + fieldLabel: gettext('Pool'), + allowBlank: false + }, + { + xtype: me.isCreate ? 'textfield' : 'displayfield', + name: 'pool', + value: 'rbd', + bind: getBinds(false, true), + fieldLabel: gettext('Pool'), + allowBlank: false + }, + { + xtype: 'textfield', + name: 'monhost', + vtype: 'HostList', + bind: getBinds(false), + value: '', + fieldLabel: 'Monitor(s)', + allowBlank: false + }, + { + xtype: me.isCreate ? 'textfield' : 'displayfield', + name: 'username', + bind: getBinds(false), + value: 'admin', + fieldLabel: gettext('User name'), + allowBlank: true + } + ]; - // here value is an array, - // while before it was a string - /*jslint confusion: true*/ me.column2 = [ { xtype: 'pveContentTypeSelector', @@ -68,14 +116,20 @@ Ext.define('PVE.storage.RBDInputPanel', { fieldLabel: 'KRBD' } ]; - /*jslint confusion: false*/ + + me.columnB = [{ + xtype: 'proxmoxcheckbox', + name: 'pveceph', + bind : { + value: '{pveceph}' + }, + checked: true, + uncheckedValue: 0, + submitValue: false, + hidden: !me.isCreate, + boxLabel: gettext('Use Proxmox VE Hyperconverged managed ceph pool') + }]; me.callParent(); } }); - -Ext.define('PVE.storage.PVERBDInputPanel', { - extend: 'PVE.storage.RBDInputPanel', - - pveceph: 1 -}); -- 2.17.1 _______________________________________________ pve-devel mailing list pve-devel@pve.proxmox.com https://pve.proxmox.com/cgi-bin/mailman/listinfo/pve-devel