]> git.proxmox.com Git - pve-manager.git/blob - www/manager6/ha/GroupEdit.js
ui: ha/Group Edit: eslint fixes and code cleanup/refactoring
[pve-manager.git] / www / manager6 / ha / GroupEdit.js
1 Ext.define('PVE.ha.GroupInputPanel', {
2 extend: 'Proxmox.panel.InputPanel',
3 onlineHelp: 'ha_manager_groups',
4
5 groupId: undefined,
6
7 onGetValues: function(values) {
8 var me = this;
9
10 if (me.isCreate) {
11 values.type = 'group';
12 }
13
14 return values;
15 },
16
17 initComponent: function() {
18 var me = this;
19
20 let update_nodefield, update_node_selection;
21
22 let sm = Ext.create('Ext.selection.CheckboxModel', {
23 mode: 'SIMPLE',
24 listeners: {
25 selectionchange: function(model, selected) {
26 update_nodefield(selected);
27 },
28 },
29 });
30
31 let store = Ext.create('Ext.data.Store', {
32 fields: ['node', 'mem', 'cpu', 'priority'],
33 data: PVE.data.ResourceStore.getNodes(), // use already cached data to avoid an API call
34 proxy: {
35 type: 'memory',
36 reader: { type: 'json' },
37 },
38 sorters: [
39 {
40 property: 'node',
41 direction: 'ASC',
42 },
43 ],
44 });
45
46 var nodegrid = Ext.createWidget('grid', {
47 store: store,
48 border: true,
49 height: 300,
50 selModel: sm,
51 columns: [
52 {
53 header: gettext('Node'),
54 flex: 1,
55 dataIndex: 'node',
56 },
57 {
58 header: gettext('Memory usage') + " %",
59 renderer: PVE.Utils.render_mem_usage_percent,
60 sortable: true,
61 width: 150,
62 dataIndex: 'mem',
63 },
64 {
65 header: gettext('CPU usage'),
66 renderer: Proxmox.Utils.render_cpu,
67 sortable: true,
68 width: 150,
69 dataIndex: 'cpu',
70 },
71 {
72 header: 'Priority',
73 xtype: 'widgetcolumn',
74 dataIndex: 'priority',
75 sortable: true,
76 stopSelection: true,
77 widget: {
78 xtype: 'proxmoxintegerfield',
79 minValue: 0,
80 maxValue: 1000,
81 isFormField: false,
82 listeners: {
83 change: function(numberfield, value, old_value) {
84 let record = numberfield.getWidgetRecord();
85 record.set('priority', value);
86 update_nodefield(sm.getSelection());
87 record.commit();
88 },
89 },
90 },
91 },
92 ],
93 });
94
95 let nodefield = Ext.create('Ext.form.field.Hidden', {
96 name: 'nodes',
97 value: '',
98 listeners: {
99 change: function(field, value) {
100 update_node_selection(value);
101 },
102 },
103 isValid: function() {
104 let value = this.getValue();
105 return value && value.length !== 0;
106 },
107 });
108
109 update_node_selection = function(string) {
110 sm.deselectAll(true);
111
112 string.split(',').forEach(function(e, idx, array) {
113 let [node, priority] = e.split(':');
114 store.each(function(record) {
115 if (record.get('node') === node) {
116 sm.select(record, true);
117 record.set('priority', priority);
118 record.commit();
119 }
120 });
121 });
122 nodegrid.reconfigure(store);
123 };
124
125 update_nodefield = function(selected) {
126 var nodes = '';
127 var first_iteration = true;
128 Ext.Array.each(selected, function(record) {
129 if (!first_iteration) {
130 nodes += ',';
131 }
132 first_iteration = false;
133
134 nodes += record.data.node;
135 if (record.data.priority) {
136 nodes += ':' + record.data.priority;
137 }
138 });
139
140 // nodefield change listener calls us again, which results in a
141 // endless recursion, suspend the event temporary to avoid this
142 nodefield.suspendEvent('change');
143 nodefield.setValue(nodes);
144 nodefield.resumeEvent('change');
145 };
146
147 me.column1 = [
148 {
149 xtype: me.isCreate ? 'textfield' : 'displayfield',
150 name: 'group',
151 value: me.groupId || '',
152 fieldLabel: 'ID',
153 vtype: 'StorageId',
154 allowBlank: false,
155 },
156 nodefield,
157 ];
158
159 me.column2 = [
160 {
161 xtype: 'proxmoxcheckbox',
162 name: 'restricted',
163 uncheckedValue: 0,
164 fieldLabel: 'restricted',
165 },
166 {
167 xtype: 'proxmoxcheckbox',
168 name: 'nofailback',
169 uncheckedValue: 0,
170 fieldLabel: 'nofailback',
171 },
172 ];
173
174 me.columnB = [
175 {
176 xtype: 'textfield',
177 name: 'comment',
178 fieldLabel: gettext('Comment'),
179 },
180 nodegrid,
181 ];
182
183 me.callParent();
184 },
185 });
186
187 Ext.define('PVE.ha.GroupEdit', {
188 extend: 'Proxmox.window.Edit',
189
190 groupId: undefined,
191
192 initComponent: function() {
193 var me = this;
194
195 me.isCreate = !me.groupId;
196
197 if (me.isCreate) {
198 me.url = '/api2/extjs/cluster/ha/groups';
199 me.method = 'POST';
200 } else {
201 me.url = '/api2/extjs/cluster/ha/groups/' + me.groupId;
202 me.method = 'PUT';
203 }
204
205 var ipanel = Ext.create('PVE.ha.GroupInputPanel', {
206 isCreate: me.isCreate,
207 groupId: me.groupId,
208 });
209
210 Ext.apply(me, {
211 subject: gettext('HA Group'),
212 items: [ipanel],
213 });
214
215 me.callParent();
216
217 if (!me.isCreate) {
218 me.load({
219 success: function(response, options) {
220 var values = response.result.data;
221
222 ipanel.setValues(values);
223 },
224 });
225 }
226 },
227 });