[pve-devel] [PATCH v3 manager] gui: add revert button for lxc pending changes

Thomas Lamprecht t.lamprecht at proxmox.com
Wed Oct 30 11:49:11 CET 2019


On 10/29/19 3:38 PM, Oguz Bektas wrote:
> adds the pending button for Resources, Options and DNS screens.
> 
> Co-developed-by: Dominik Csapak <d.csapak at proxmox.com>
> Signed-off-by: Oguz Bektas <o.bektas at proxmox.com>
> ---
> 
> v2->v3:
> * use getStore() instead of rstore while checking for datachanged, in
> light of Dominik's debugging (thanks!)
> * add missing startUpdate to DNS.js
> * remove FIXME comment about rstore refresh
> 
> 
>  www/manager6/lxc/DNS.js       | 48 +++++++++++++++++++++++++++--
>  www/manager6/lxc/Options.js   | 58 +++++++++++++++++++++++++++++++++--
>  www/manager6/lxc/Resources.js | 31 ++++++++++++++++++-
>  3 files changed, 132 insertions(+), 5 deletions(-)

adding the revert_btn, a 26 line method, three times in a single patch,
while the exact same method already exists two times in the code basis,
should really ring some bells..

I'd had liked to get this cleaned up before this gets into the three,
but as it's already pushed out I made a followup (see pve-devel).

> 
> diff --git a/www/manager6/lxc/DNS.js b/www/manager6/lxc/DNS.js
> index 89e2c694..8bde72f9 100644
> --- a/www/manager6/lxc/DNS.js
> +++ b/www/manager6/lxc/DNS.js
> @@ -213,6 +213,38 @@ Ext.define('PVE.lxc.DNS', {
>  	    handler: run_editor
>  	});
>  
> +	var revert_btn = new Proxmox.button.Button({
> +	    text: gettext('Revert'),
> +	    disabled: true,
> +	    handler: function() {
> +		var sm = me.getSelectionModel();
> +		var rec = sm.getSelection()[0];
> +		if (!rec) {
> +		    return;
> +		}
> +
> +		var rowdef = me.rows[rec.data.key] || {};
> +		var keys = rowdef.multiKey ||  [ rec.data.key ];
> +		var revert = keys.join(',');
> +
> +		Proxmox.Utils.API2Request({
> +		    url: '/api2/extjs/' + baseurl,
> +		    waitMsgTarget: me,
> +		    method: 'PUT',
> +		    params: {
> +			'revert': revert
> +		    },
> +		    callback: function() {
> +			me.reload();
> +		    },
> +		    failure: function (response, opts) {
> +			Ext.Msg.alert('Error',response.htmlStatus);
> +		    }
> +		});
> +	    }
> +	});
> +
> +
>  	var set_button_status = function() {
>  	    var sm = me.getSelectionModel();
>  	    var rec = sm.getSelection()[0];
> @@ -221,16 +253,20 @@ Ext.define('PVE.lxc.DNS', {
>  		edit_btn.disable();
>  		return;
>  	    }
> -	    var rowdef = rows[rec.data.key];
> +	    var key = rec.data.key;
> +	    var rowdef = rows[key];
> +	    var pending = rec.data['delete'] || me.hasPendingChanges(key);
>  	    edit_btn.setDisabled(!rowdef.editor);
> +	    revert_btn.setDisabled(!pending);
>  	};
>  
>  	Ext.apply(me, {
>  	    url: "/api2/json/nodes/" + nodename + "/lxc/" + vmid + "/pending",
>  	    selModel: sm,
>  	    cwidth1: 150,
> +	    interval: 5000,
>  	    run_editor: run_editor,
> -	    tbar: [ edit_btn ],
> +	    tbar: [ edit_btn, revert_btn ],
>  	    rows: rows,
>  	    editorConfig: {
>  		url: "/api2/extjs/" + baseurl
> @@ -243,5 +279,13 @@ Ext.define('PVE.lxc.DNS', {
>  	});
>  
>  	me.callParent();
> +
> +	me.on('activate', me.rstore.startUpdate);
> +	me.on('destroy', me.rstore.stopUpdate);
> +	me.on('deactivate', me.rstore.stopUpdate);
> +
> +	me.mon(me.getStore(), 'datachanged', function() {
> +	    set_button_status();
> +	});
>      }
>  });
> diff --git a/www/manager6/lxc/Options.js b/www/manager6/lxc/Options.js
> index 5e1e0222..8ed3a5fc 100644
> --- a/www/manager6/lxc/Options.js
> +++ b/www/manager6/lxc/Options.js
> @@ -161,17 +161,67 @@ Ext.define('PVE.lxc.Options', {
>  	    handler: function() { me.run_editor(); }
>  	});
>  
> +	var revert_btn = new Proxmox.button.Button({
> +	    text: gettext('Revert'),
> +	    disabled: true,
> +	    handler: function() {
> +		var sm = me.getSelectionModel();
> +		var rec = sm.getSelection()[0];
> +		if (!rec) {
> +		    return;
> +		}
> +
> +		var rowdef = me.rows[rec.data.key] || {};
> +		var keys = rowdef.multiKey ||  [ rec.data.key ];
> +		var revert = keys.join(',');
> +
> +		Proxmox.Utils.API2Request({
> +		    url: '/api2/extjs/' + baseurl,
> +		    waitMsgTarget: me,
> +		    method: 'PUT',
> +		    params: {
> +			'revert': revert
> +		    },
> +		    callback: function() {
> +			me.reload();
> +		    },
> +		    failure: function (response, opts) {
> +			Ext.Msg.alert('Error',response.htmlStatus);
> +		    }
> +		});
> +	    }
> +	});
> +
> +	var set_button_status = function() {
> +	    var sm = me.getSelectionModel();
> +	    var rec = sm.getSelection()[0];
> +
> +	    if (!rec) {
> +		edit_btn.disable();
> +		return;
> +	    }
> +
> +	    var key = rec.data.key;
> +	    var pending = rec.data['delete'] || me.hasPendingChanges(key);
> +	    var rowdef = rows[key];
> +
> +	    edit_btn.setDisabled(!rowdef.editor);
> +	    revert_btn.setDisabled(!pending);
> +	};
> +
> +
>  	Ext.apply(me, {
>  	    url: "/api2/json/nodes/" + nodename + "/lxc/" + vmid + "/pending",
>  	    selModel: sm,
>  	    interval: 5000,
> -	    tbar: [ edit_btn ],
> +	    tbar: [ edit_btn, revert_btn ],
>  	    rows: rows,
>  	    editorConfig: {
>  		url: '/api2/extjs/' + baseurl
>  	    },
>  	    listeners: {
> -		itemdblclick: me.run_editor
> +		itemdblclick: me.run_editor,
> +		selectionchange: set_button_status
>  	    }
>  	});
>  
> @@ -181,6 +231,10 @@ Ext.define('PVE.lxc.Options', {
>  	me.on('destroy', me.rstore.stopUpdate);
>  	me.on('deactivate', me.rstore.stopUpdate);
>  
> +	me.mon(me.getStore(), 'datachanged', function() {
> +	    set_button_status();
> +	});
> +
>      }
>  });
>  
> diff --git a/www/manager6/lxc/Resources.js b/www/manager6/lxc/Resources.js
> index 8b924a49..73533ba8 100644
> --- a/www/manager6/lxc/Resources.js
> +++ b/www/manager6/lxc/Resources.js
> @@ -215,6 +215,31 @@ Ext.define('PVE.lxc.RessourceView', {
>  	    handler: run_move
>  	});
>  
> +	var revert_btn = new Proxmox.button.Button({
> +	    text: gettext('Revert'),
> +	    selModel: me.selModel,
> +	    disabled: true,
> +	    handler: function(b, e, rec) {
> +		var rowdef = me.rows[rec.data.key] || {};
> +		var keys = rowdef.multiKey ||  [ rec.data.key ];
> +		var revert = keys.join(',');
> +		Proxmox.Utils.API2Request({
> +		    url: '/api2/extjs/' + baseurl,
> +		    waitMsgTarget: me,
> +		    method: 'PUT',
> +		    params: {
> +			'revert': revert
> +		    },
> +		    callback: function() {
> +			me.rstore.load();
> +		    },
> +		    failure: function (response, opts) {
> +			Ext.Msg.alert('Error',response.htmlStatus);
> +		    }
> +		});
> +	    }
> +	});
> +
>  	var set_button_status = function() {
>  	    var rec = me.selModel.getSelection()[0];
>  
> @@ -222,12 +247,14 @@ Ext.define('PVE.lxc.RessourceView', {
>  		edit_btn.disable();
>  		remove_btn.disable();
>  		resize_btn.disable();
> +		revert_btn.disable();
>  		return;
>  	    }
>  	    var key = rec.data.key;
>  	    var value = rec.data.value;
>  	    var rowdef = rows[key];
>  
> +	    var pending = rec.data['delete'] || me.hasPendingChanges(key);
>  	    var isDisk = (rowdef.tdCls == 'pve-itype-icon-storage');
>  
>  	    var noedit = rec.data['delete'] || !rowdef.editor;
> @@ -242,6 +269,7 @@ Ext.define('PVE.lxc.RessourceView', {
>  	    remove_btn.setDisabled(!isDisk || rec.data.key === 'rootfs' || !diskCap);
>  	    resize_btn.setDisabled(!isDisk || !diskCap);
>  	    move_btn.setDisabled(!isDisk || !diskCap);
> +	    revert_btn.setDisabled(!pending);
>  
>  	};
>  	
> @@ -299,7 +327,8 @@ Ext.define('PVE.lxc.RessourceView', {
>  		edit_btn,
>  		remove_btn,
>  		resize_btn,
> -		move_btn
> +		move_btn,
> +		revert_btn
>  	    ],
>  	    rows: rows,
>  	    sorterFn: sorterFn,
> 





More information about the pve-devel mailing list