]> git.proxmox.com Git - pmg-gui.git/blob - js/ActionList.js
spam-info-grid: style the spam info grid via css variables
[pmg-gui.git] / js / ActionList.js
1 Ext.define('pmg-action-list', {
2 extend: 'Ext.data.Model',
3 fields: [
4 'id', 'name', 'info', 'descr', 'editable',
5 { name: 'otype', type: 'integer' },
6 ],
7 idProperty: 'id',
8 });
9
10 Ext.define('PMG.ActionList', {
11 extend: 'Ext.grid.GridPanel',
12 alias: ['widget.pmgActionList'],
13
14 title: PMG.Utils.oclass_text.action,
15 border: false,
16
17 baseurl: '/config/ruledb/action',
18
19 otype_list: [4002, 4003, 4005, 4007, 4009],
20
21 enableButtons: true,
22
23 initComponent: function() {
24 var me = this;
25
26 me.store = new Ext.data.Store({
27 model: 'pmg-action-list',
28 proxy: {
29 type: 'proxmox',
30 url: "/api2/json" + me.baseurl + '/objects',
31 },
32 sorters: {
33 property: 'name',
34 direction: 'ASC',
35 },
36 });
37
38 me.selModel = Ext.create('Ext.selection.RowModel', {});
39
40 var reload = function() {
41 me.store.load();
42 };
43
44 var run_editor = function() {
45 var rec = me.selModel.getSelection()[0];
46 if (!rec) {
47 return;
48 }
49
50 var editor = PMG.Utils.object_editors[rec.data.otype];
51 if (!editor) {
52 return;
53 }
54
55 var config = Ext.apply({ method: 'PUT' }, editor);
56
57 config.url = me.baseurl + '/' + editor.subdir + '/' + rec.data.id;
58
59 var win = Ext.createWidget('proxmoxWindowEdit', config);
60
61 win.load();
62 win.on('destroy', reload);
63 win.show();
64 };
65
66 var remove_btn = Ext.createWidget('proxmoxStdRemoveButton', {
67 selModel: me.selModel,
68 getUrl: function(rec) {
69 return me.baseurl + '/objects/' + rec.data.id;
70 },
71 enableFn: rec => !!rec.data.editable,
72 callback: reload,
73 getRecordName: function(rec) { return rec.data.descr; },
74 waitMsgTarget: me,
75 });
76
77 var menu_items = [];
78
79 Ext.Array.each(me.otype_list, function(otype) {
80 var editor = PMG.Utils.object_editors[otype];
81
82 var config = Ext.apply({ method: 'POST' }, editor);
83
84 config.isCreate = true;
85 menu_items.push({
86 text: config.subject,
87 handler: function() {
88 if (me.baseurl === undefined) {
89 return;
90 }
91 config.url = me.baseurl + '/' + editor.subdir;
92 var win = Ext.createWidget('proxmoxWindowEdit', config);
93 win.on('destroy', reload);
94 win.show();
95 },
96 });
97 });
98
99 var tbar = [
100 {
101 text: gettext('Add'),
102 menu: new Ext.menu.Menu({
103 items: menu_items,
104 }),
105 },
106 {
107 xtype: 'proxmoxButton',
108 text: gettext('Edit'),
109 disabled: true,
110 selModel: me.selModel,
111 enableFn: rec => !!rec.data.editable,
112 handler: run_editor,
113 },
114 remove_btn,
115 ];
116
117 Proxmox.Utils.monStoreErrors(me, me.store, true);
118
119 if (me.enableButtons) {
120 me.tbar = tbar;
121 }
122
123 Ext.apply(me, {
124 run_editor: run_editor,
125 columns: [
126 {
127 header: gettext('Name'),
128 sortable: true,
129 width: 200,
130 dataIndex: 'name',
131 renderer: Ext.String.htmlEncode,
132 },
133 {
134 header: gettext('Description'),
135 sortable: true,
136 width: 300,
137 dataIndex: 'descr',
138 renderer: Ext.String.htmlEncode,
139 },
140 {
141 header: gettext('Comment'),
142 sortable: false,
143 flex: 1,
144 dataIndex: 'info',
145 renderer: Ext.String.htmlEncode,
146 },
147 {
148 header: gettext('Editable'),
149 dataIndex: 'editable',
150 renderer: Proxmox.Utils.format_boolean,
151 },
152 ],
153 listeners: {
154 itemdblclick: function() {
155 if (me.enableButtons) {
156 run_editor();
157 }
158 },
159 activate: reload,
160 },
161 });
162
163 me.callParent();
164
165 reload(); // initial load
166 },
167 });