]> git.proxmox.com Git - pmg-gui.git/blob - js/ObjectGroupList.js
move factory defaults button to RuleConfiguration
[pmg-gui.git] / js / ObjectGroupList.js
1 /*global Proxmox*/
2 Ext.define('pmg-object-group', {
3 extend: 'Ext.data.Model',
4 fields: [ 'id', 'name', 'info' ],
5 idProperty: 'id'
6 });
7
8 Ext.define('pmg-object-list', {
9 extend: 'Ext.data.Model',
10 fields: [
11 'id', 'descr',
12 { name: 'otype', type: 'integer' },
13 { name: 'receivertest', type: 'boolean' }
14 ],
15 idProperty: 'id'
16 });
17
18
19 Ext.define('PMG.ObjectGroupList', {
20 extend: 'Ext.grid.GridPanel',
21 alias: ['widget.pmgObjectGroupList'],
22
23 ogclass: undefined, // 'who', 'when', 'what'
24
25 subject: 'Object Group List', // please overwrite
26
27 baseurl: undefined,
28
29 enableButtons: true,
30
31 inputItems: [
32 {
33 xtype: 'textfield',
34 name: 'name',
35 allowBlank: false,
36 fieldLabel: gettext('Name')
37 },
38 {
39 xtype: 'textareafield',
40 name: 'info',
41 fieldLabel: gettext("Description")
42 }
43 ],
44
45 reload: function() {
46 var me = this;
47
48 me.store.load();
49 },
50
51 run_editor: function() {
52 var me = this;
53
54 var rec = me.selModel.getSelection()[0];
55 if (!rec) {
56 return;
57 }
58
59 var config = {
60 url: "/api2/extjs" + me.baseurl +'/' + rec.data.id + '/config',
61 method: 'PUT',
62 subject: me.subject,
63 width: 400,
64 items: me.inputItems
65 };
66
67 var win = Ext.createWidget('proxmoxWindowEdit', config);
68
69 win.load();
70 win.on('destroy', me.reload, me);
71 win.show();
72 },
73
74 initComponent : function() {
75 var me = this;
76
77 if (!me.ogclass) {
78 throw "ogclass not initialized";
79 }
80
81 me.baseurl = "/config/ruledb/" + me.ogclass;
82
83 me.store = new Ext.data.Store({
84 model: 'pmg-object-group',
85 proxy: {
86 type: 'proxmox',
87 url: "/api2/json" + me.baseurl
88 },
89 sorters: {
90 property: 'name',
91 order: 'DESC'
92 }
93 });
94
95 me.selModel = Ext.create('Ext.selection.RowModel', {});
96
97 var remove_btn = Ext.createWidget('proxmoxStdRemoveButton', {
98 selModel: me.selModel,
99 baseurl: me.baseurl,
100 callback: function() { me.reload(); },
101 getRecordName: function(rec) { return rec.data.name; },
102 waitMsgTarget: me
103 });
104
105 /*jslint confusion: true*/
106 /* create is a boolean below, a function above */
107 var tbar = [
108 {
109 xtype: 'proxmoxButton',
110 text: gettext('Edit'),
111 disabled: true,
112 selModel: me.selModel,
113 handler: function() { me.run_editor(); }
114 },
115 {
116 text: gettext('Create'),
117 handler: function() {
118 var config = {
119 method: 'POST',
120 url: "/api2/extjs" + me.baseurl,
121 create: true,
122 width: 400,
123 subject: me.subject,
124 items: me.inputItems
125 };
126
127 var win = Ext.createWidget('proxmoxWindowEdit', config);
128
129 win.on('destroy', me.reload, me);
130 win.show();
131 }
132 },
133 remove_btn
134 ];
135 /*jslint confusion: false*/
136
137 Proxmox.Utils.monStoreErrors(me, me.store, true);
138
139 if (me.enableButtons) {
140 me.tbar = tbar;
141 }
142
143 Ext.apply(me, {
144 columns: [
145 {
146 header: gettext('Name'),
147 sortable: true,
148 flex: 1,
149 dataIndex: 'name',
150 renderer: Ext.String.htmlEncode
151 }
152 ],
153 listeners: {
154 itemdblclick: function() {
155 if (me.enableButtons) {
156 me.run_editor();
157 }
158 },
159 activate: function() { me.reload(); }
160 }
161 });
162
163 me.callParent();
164
165 me.reload(); // initial load
166 }
167 });