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