pmg-gui/js/RuleConfiguration.js
Dominik Csapak 18b5b6adce rename create to isCreate
following the changes in the edit window, we have to use
isCreate instead of create, which gets rid of many jslint
type confusion errors

Signed-off-by: Dominik Csapak <d.csapak@proxmox.com>
2017-11-14 11:40:42 +01:00

268 lines
5.3 KiB
JavaScript

/*global Proxmox*/
/*jslint confusion: true*/
/* bind is a function and object,
* callback is a function and string
*/
Ext.define('pmg-rule-list', {
extend: 'Ext.data.Model',
fields: [
'id', 'name',
{ name: 'active', type: 'boolean' },
{ name: 'direction', type: 'integer' },
{ name: 'priority', type: 'integer' }
],
idProperty: 'id'
});
Ext.define('PMG.RulesConfiguration', {
extend: 'Ext.container.Container',
xtype: 'pmgRuleConfiguration',
layout: 'border',
border: false,
defaults: {
border: false
},
controller: {
xclass: 'Ext.app.ViewController',
selectedRuleChange: function(grid, selected, eOpts) {
var me = this;
var infoPanel = me.lookupReference('infopanel');
var baseurl = '';
if (selected.length > 0) {
baseurl = '/config/ruledb/rules/' + selected[0].data.id;
}
infoPanel.getController().setBaseUrl(baseurl);
},
editIconClick: function(gridView, rowindex, colindex, column, e, record) {
var me = this;
me.showEditWindow(gridView, record);
},
showEditWindow: function(gridView, record) {
var me = this;
var win = Ext.create('PMG.RuleEditor', {
url: '/api2/extjs/config/ruledb/rules/' + record.data.id + '/config',
listeners: {
destroy: function() {
gridView.getStore().load();
}
}
});
win.load();
win.show();
},
toggleIconClick: function(gridView, rowindex, colindex, column, e, record) {
var me = this;
Proxmox.Utils.API2Request({
url: '/config/ruledb/rules/' + record.data.id + '/config',
params: {
active: record.data.active ? 0 : 1
},
method: 'PUT',
callback: function() {
gridView.getStore().load();
},
failure: function(response, opts) {
Ext.Msg.alert(gettext('Error'), response.htmlStatus);
}
});
},
reload: function(){
var me = this;
me.lookupReference('rulegrid').getStore().load();
},
addRule: function() {
var me = this;
var win = Ext.create('PMG.RuleEditor', {
url: '/api2/extjs/config/ruledb/rules/',
method: 'POST',
isCreate: true,
listeners: {
destroy: function() {
me.lookupReference('rulegrid').getStore().load();
}
}
});
win.load();
win.show();
},
onFactoryDefaults: function() {
var me = this;
Ext.Msg.confirm(
gettext('Confirm'),
gettext('Reset rule database to factory defaults?'),
function(button) {
if (button !== 'yes') {
return;
}
var url = '/config/ruledb';
Proxmox.Utils.API2Request({
url: '/config/ruledb',
method: 'POST',
waitMsgTarget: me.getView(),
callback: function() {
me.reload();
},
failure: function (response, opts) {
Ext.Msg.alert(gettext('Error'), response.htmlStatus);
}
});
}
);
},
init: function(view) {
var grid = this.lookupReference('rulegrid');
Proxmox.Utils.monStoreErrors(grid, grid.getStore(), true);
},
control: {
'grid[reference=rulegrid]': {
itemdblclick: 'showEditWindow',
selectionchange: 'selectedRuleChange'
},
'button[reference=addButton]': {
click: 'addRule'
}
}
},
viewModel: {
data: {
selectedRule: undefined,
baseUrl: '/config/ruledb/rules'
}
},
items: [
{
xtype: 'grid',
layout: 'fit',
title: 'Rules',
reference: 'rulegrid',
region: 'center',
bind: {
selection: '{selectedRule}'
},
dockedItems:{
xtype: 'toolbar',
reference: 'mytb',
items: [
{
xtype: 'button',
text: gettext('Add'),
iconCls: 'fa fa-plus-circle',
reference: 'addButton'
},
{
xtype: 'proxmoxStdRemoveButton',
text: gettext('Remove'),
iconCls: 'fa fa-minus-circle',
reference: 'removeButton',
callback: 'reload',
getRecordName: function(rec) { return rec.data.name; },
bind: {
baseurl: '{baseUrl}'
}
},
'->',
{
text: gettext('Factory Defaults'),
handler: 'onFactoryDefaults'
}
]
},
viewConfig: {
getRowClass: function(record, rowIndex) {
return record.get('active') ? 'enabled' : 'disabled';
}
},
store: {
autoLoad: true,
model: 'pmg-rule-list',
reference: 'rulesStore',
proxy: {
type: 'proxmox',
url: '/api2/json/config/ruledb/rules'
},
sorters: [
{
property: 'priority',
direction: 'DESC'
},
{
property: 'name'
}
]
},
sortableColumns: false,
columns: [
{
text: 'Active',
dataIndex: 'active',
hidden : true
},
{
text: 'Name',
dataIndex: 'name',
flex: 1
},
{
text: 'Priority',
dataIndex: 'priority'
},
{
text: 'Direction',
dataIndex: 'direction',
renderer: PMG.Utils.format_rule_direction
},
{
text: '',
xtype: 'actioncolumn',
align: 'center',
width: 70,
items: [
{
iconCls: 'fa fa-fw fa-pencil',
tooltip: 'Edit',
handler: 'editIconClick'
},
{
getClass: function(val, meta, rec) {
return 'fa fa-fw fa-' + (rec.get('active') ? 'toggle-on' : 'toggle-off');
},
getTip: function(val, meta, rec) {
return (rec.get('active') ? 'Deactivate' : 'Activate');
},
handler: 'toggleIconClick'
}
]
}
]
},
{
region: 'east',
reference: 'infopanel',
xtype: 'pmgRuleInfo',
split: true,
width: 440
}
]
});