]> git.proxmox.com Git - pmg-gui.git/blob - js/ObjectGroupList.js
object groups: consistent add/edit/remove button
[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 onlineHelp: 'chapter_mailfilter',
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 direction: 'ASC',
92 },
93 });
94
95 me.selModel = Ext.create('Ext.selection.RowModel', {});
96
97 var tbar = [
98 {
99 text: gettext('Create'),
100 handler: function() {
101 Ext.createWidget('proxmoxWindowEdit', {
102 method: 'POST',
103 url: `/api2/extjs${me.baseurl}`,
104 onlineHelp: 'chapter_mailfilter',
105 isCreate: true,
106 width: 400,
107 subject: me.subject,
108 items: me.inputItems,
109 autoShow: true,
110 listeners: {
111 destroy: () => me.reload(),
112 },
113 });
114 },
115 },
116 '-',
117 {
118 xtype: 'proxmoxButton',
119 text: gettext('Edit'),
120 disabled: true,
121 selModel: me.selModel,
122 handler: () => me.run_editor(),
123 },
124 {
125 xtype: 'proxmoxStdRemoveButton',
126 selModel: me.selModel,
127 baseurl: me.baseurl,
128 callback: () => me.reload(),
129 getRecordName: rec => rec.data.name,
130 waitMsgTarget: me,
131 },
132 ];
133
134 Proxmox.Utils.monStoreErrors(me, me.store, true);
135
136 if (me.enableButtons) {
137 me.tbar = tbar;
138 }
139
140 Ext.apply(me, {
141 columns: [
142 {
143 header: gettext('Name'),
144 sortable: true,
145 flex: 1,
146 dataIndex: 'name',
147 renderer: Ext.String.htmlEncode,
148 },
149 ],
150 listeners: {
151 itemdblclick: function() {
152 if (me.enableButtons) {
153 me.run_editor();
154 }
155 },
156 activate: function() { me.reload(); },
157 },
158 });
159
160 me.callParent();
161
162 me.reload(); // initial load
163 },
164 });