mirror of
				https://git.proxmox.com/git/pve-manager
				synced 2025-11-04 14:19:12 +00:00 
			
		
		
		
	Tabpanel reload -> send 'show' event -> reload child panel store do not work with ExtJS6 but Tabpanel reload -> reload child panel -> child send 'show' event -> reload a grid store in the panel still works so we don't blindly replace the 'show' events everywhere but only when the event was expected by a direct child of a tabpanel
		
			
				
	
	
		
			164 lines
		
	
	
		
			3.4 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			164 lines
		
	
	
		
			3.4 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
Ext.define('PVE.ha.ResourcesView', {
 | 
						|
    extend: 'Ext.grid.GridPanel',
 | 
						|
    alias: ['widget.pveHAResourcesView'],
 | 
						|
 | 
						|
    initComponent : function() {
 | 
						|
	var me = this;
 | 
						|
 | 
						|
	var caps = Ext.state.Manager.get('GuiCap');
 | 
						|
 | 
						|
	var store = new Ext.data.Store({
 | 
						|
	    model: 'pve-ha-resources',
 | 
						|
	    proxy: {
 | 
						|
                type: 'pve',
 | 
						|
		url: "/api2/json/cluster/ha/resources"
 | 
						|
	    },
 | 
						|
	    sorters: { 
 | 
						|
		property: 'sid', 
 | 
						|
		order: 'DESC' 
 | 
						|
	    }
 | 
						|
	});
 | 
						|
	
 | 
						|
	var reload = function() {
 | 
						|
	    store.load();
 | 
						|
	};
 | 
						|
 | 
						|
	var render_error = function(dataIndex, value, metaData, record) {
 | 
						|
	    var errors = record.data.errors;
 | 
						|
	    if (errors) {
 | 
						|
		var msg = errors[dataIndex];
 | 
						|
		if (msg) {
 | 
						|
		    metaData.tdCls = 'x-form-invalid-field';
 | 
						|
		    var html = '<p>' +  Ext.htmlEncode(msg) + '</p>';
 | 
						|
		    metaData.tdAttr = 'data-qwidth=600 data-qtitle="ERROR" data-qtip="' + 
 | 
						|
			html.replace(/\"/g,'"') + '"';
 | 
						|
		}
 | 
						|
	    }
 | 
						|
	    return value;
 | 
						|
	};
 | 
						|
 | 
						|
	var sm = Ext.create('Ext.selection.RowModel', {});
 | 
						|
 | 
						|
	var run_editor = function() {
 | 
						|
	    var rec = sm.getSelection()[0];
 | 
						|
	    var sid = rec.data.sid;
 | 
						|
	    
 | 
						|
	    var regex =  /^(\S+):(\S+)$/;
 | 
						|
	    var res = regex.exec(sid);
 | 
						|
 | 
						|
	  if (res[1] !== 'vm' && res[1] !== 'ct') { return; };
 | 
						|
	    
 | 
						|
	    var vmid = res[2];
 | 
						|
	    
 | 
						|
            var win = Ext.create('PVE.ha.VMResourceEdit',{
 | 
						|
                vmid: vmid
 | 
						|
            });
 | 
						|
            win.on('destroy', reload);
 | 
						|
            win.show();
 | 
						|
	};
 | 
						|
 | 
						|
	var remove_btn = new PVE.button.Button({
 | 
						|
	    text: gettext('Remove'),
 | 
						|
	    disabled: true,
 | 
						|
	    selModel: sm,
 | 
						|
	    handler: function(btn, event, rec) {
 | 
						|
		var sid = rec.data.sid;
 | 
						|
 | 
						|
		PVE.Utils.API2Request({
 | 
						|
		    url: '/cluster/ha/resources/' + sid,
 | 
						|
		    method: 'DELETE',
 | 
						|
		    waitMsgTarget: me,
 | 
						|
		    callback: function() {
 | 
						|
			reload();
 | 
						|
		    },
 | 
						|
		    failure: function (response, opts) {
 | 
						|
			Ext.Msg.alert(gettext('Error'), response.htmlStatus);
 | 
						|
		    }
 | 
						|
		});
 | 
						|
	    }
 | 
						|
	});
 | 
						|
	
 | 
						|
	var edit_btn = new PVE.button.Button({
 | 
						|
	    text: gettext('Edit'),
 | 
						|
	    disabled: true,
 | 
						|
	    selModel: sm,
 | 
						|
	    handler: run_editor
 | 
						|
	});
 | 
						|
 | 
						|
	Ext.apply(me, {
 | 
						|
	    store: store,
 | 
						|
	    selModel: sm,
 | 
						|
	    stateful: false,
 | 
						|
	    viewConfig: {
 | 
						|
		trackOver: false
 | 
						|
	    },
 | 
						|
	    tbar: [
 | 
						|
		{
 | 
						|
		    text: gettext('Add'),
 | 
						|
		    disabled: !caps.nodes['Sys.Console'],
 | 
						|
		    handler: function() {
 | 
						|
			var win = Ext.create('PVE.ha.VMResourceEdit',{});
 | 
						|
			win.on('destroy', reload);
 | 
						|
			win.show();
 | 
						|
		    }
 | 
						|
		},
 | 
						|
		edit_btn, remove_btn
 | 
						|
	    ],
 | 
						|
 | 
						|
	    columns: [
 | 
						|
		{
 | 
						|
		    header: 'ID',
 | 
						|
		    width: 100,
 | 
						|
		    sortable: true,
 | 
						|
		    dataIndex: 'sid'
 | 
						|
		},
 | 
						|
		{
 | 
						|
		    header: gettext('State'),
 | 
						|
		    width: 100,
 | 
						|
		    sortable: true,
 | 
						|
		    renderer: function(v) {
 | 
						|
			return v ? v : 'enabled';
 | 
						|
		    },
 | 
						|
		    dataIndex: 'state'
 | 
						|
		},
 | 
						|
		{
 | 
						|
		    header: gettext('Group'),
 | 
						|
		    width: 200,
 | 
						|
		    sortable: true,
 | 
						|
		    renderer: function(value, metaData, record) {
 | 
						|
			return render_error('group', value, metaData, record);
 | 
						|
		    },
 | 
						|
		    dataIndex: 'group'
 | 
						|
		},
 | 
						|
		{
 | 
						|
		    header: gettext('Description'),
 | 
						|
		    flex: 1,
 | 
						|
		    renderer: Ext.String.htmlEncode,
 | 
						|
		    dataIndex: 'comment'
 | 
						|
		}
 | 
						|
	    ],
 | 
						|
	    listeners: {
 | 
						|
		activate: reload,
 | 
						|
		beforeselect: function(grid, record, index, eOpts) {
 | 
						|
		    if (!caps.nodes['Sys.Console']) {
 | 
						|
			return false;
 | 
						|
		    }
 | 
						|
		},
 | 
						|
		itemdblclick: run_editor
 | 
						|
	    }
 | 
						|
	});
 | 
						|
 | 
						|
	me.callParent();
 | 
						|
    }
 | 
						|
}, function() {
 | 
						|
 | 
						|
    Ext.define('pve-ha-resources', {
 | 
						|
	extend: 'Ext.data.Model',
 | 
						|
	fields: [ 
 | 
						|
	  'sid', 'state', 'digest', 'errors', 'group', 'comment'
 | 
						|
	],
 | 
						|
	idProperty: 'sid'
 | 
						|
    });
 | 
						|
 | 
						|
});
 |