]> git.proxmox.com Git - pve-manager.git/blame - www/manager6/grid/ResourceGrid.js
ui: eslint: fix various spacing related issues
[pve-manager.git] / www / manager6 / grid / ResourceGrid.js
CommitLineData
e5c95a12
DM
1Ext.define('PVE.grid.ResourceGrid', {
2 extend: 'Ext.grid.GridPanel',
3 alias: ['widget.pveResourceGrid'],
4
4dce154f 5 border: false,
df6345f9
DC
6 defaultSorter: {
7 property: 'type',
f6710aac 8 direction: 'ASC',
df6345f9 9 },
8058410f 10 initComponent: function() {
e5c95a12
DM
11 var me = this;
12
13 var rstore = PVE.data.ResourceStore;
14 var sp = Ext.state.Manager.getProvider();
15
3a8c89c2 16 var coldef = rstore.defaultColumns();
e5c95a12
DM
17
18 var store = Ext.create('Ext.data.Store', {
19 model: 'PVEResources',
df6345f9 20 sorters: me.defaultSorter,
f6710aac 21 proxy: { type: 'memory' },
e5c95a12
DM
22 });
23
24 var textfilter = '';
25
26 var textfilter_match = function(item) {
27 var match = false;
28 Ext.each(['name', 'storage', 'node', 'type', 'text'], function(field) {
29 var v = item.data[field];
30 if (v !== undefined) {
31 v = v.toLowerCase();
32 if (v.indexOf(textfilter) >= 0) {
33 match = true;
34 return false;
35 }
36 }
37 });
38 return match;
39 };
40
41 var updateGrid = function() {
e5c95a12 42 var filterfn = me.viewFilter ? me.viewFilter.filterfn : null;
2a4971d8 43
e5c95a12
DM
44 //console.log("START GRID UPDATE " + me.viewFilter);
45
46 store.suspendEvents();
47
48 var nodeidx = {};
49 var gather_child_nodes = function(cn) {
50 if (!cn) {
51 return;
52 }
53 var cs = cn.childNodes;
54 if (!cs) {
55 return;
56 }
57 var len = cs.length, i = 0, n, res;
58
59 for (; i < len; i++) {
60 var child = cs[i];
61 var orgnode = rstore.data.get(child.data.id);
62 if (orgnode) {
63 if ((!filterfn || filterfn(child)) &&
64 (!textfilter || textfilter_match(child))) {
65 nodeidx[child.data.id] = orgnode;
66 }
67 }
68 gather_child_nodes(child);
69 }
70 };
71 gather_child_nodes(me.pveSelNode);
72
73 // remove vanished items
74 var rmlist = [];
75 store.each(function(olditem) {
76 var item = nodeidx[olditem.data.id];
77 if (!item) {
78 //console.log("GRID REM UID: " + olditem.data.id);
79 rmlist.push(olditem);
80 }
81 });
82
83 if (rmlist.length) {
84 store.remove(rmlist);
85 }
86
87 // add new items
88 var addlist = [];
89 var key;
90 for (key in nodeidx) {
91 if (nodeidx.hasOwnProperty(key)) {
92 var item = nodeidx[key];
2a4971d8
TL
93
94 // getById() use find(), which is slow (ExtJS4 DP5)
e5c95a12
DM
95 //var olditem = store.getById(item.data.id);
96 var olditem = store.data.get(item.data.id);
97
98 if (!olditem) {
99 //console.log("GRID ADD UID: " + item.data.id);
100 var info = Ext.apply({}, item.data);
5ea30043 101 var child = Ext.create(store.model, info);
e5c95a12
DM
102 addlist.push(item);
103 continue;
104 }
105 // try to detect changes
106 var changes = false;
107 var fieldkeys = PVE.data.ResourceStore.fieldNames;
108 var fieldcount = fieldkeys.length;
109 var fieldind;
110 for (fieldind = 0; fieldind < fieldcount; fieldind++) {
111 var field = fieldkeys[fieldind];
112 if (field != 'id' && item.data[field] != olditem.data[field]) {
113 changes = true;
114 //console.log("changed item " + item.id + " " + field + " " + item.data[field] + " != " + olditem.data[field]);
115 olditem.beginEdit();
116 olditem.set(field, item.data[field]);
117 }
118 }
119 if (changes) {
120 olditem.endEdit(true);
2a4971d8 121 olditem.commit(true);
e5c95a12
DM
122 }
123 }
124 }
125
126 if (addlist.length) {
127 store.add(addlist);
128 }
129
130 store.sort();
131
132 store.resumeEvents();
133
7a3691ac 134 store.fireEvent('refresh', store);
e5c95a12
DM
135
136 //console.log("END GRID UPDATE");
137 };
138
8058410f 139 var filter_task = new Ext.util.DelayedTask(function() {
e5c95a12
DM
140 updateGrid();
141 });
142
2a4971d8
TL
143 var load_cb = function() {
144 updateGrid();
e5c95a12
DM
145 };
146
e5c95a12
DM
147 Ext.apply(me, {
148 store: store,
df6345f9 149 stateful: true,
ac419eb9 150 stateId: 'grid-resource',
e5c95a12 151 tbar: [
2a4971d8 152 '->',
e5c95a12
DM
153 gettext('Search') + ':', ' ',
154 {
155 xtype: 'textfield',
156 width: 200,
157 value: textfilter,
158 enableKeyEvents: true,
159 listeners: {
160 keyup: function(field, e) {
161 var v = field.getValue();
162 textfilter = v.toLowerCase();
163 filter_task.delay(500);
f6710aac
TL
164 },
165 },
166 },
e5c95a12
DM
167 ],
168 viewConfig: {
f6710aac 169 stripeRows: true,
e5c95a12
DM
170 },
171 listeners: {
685b7aa4 172 itemcontextmenu: PVE.Utils.createCmdMenu,
e5c95a12
DM
173 itemdblclick: function(v, record) {
174 var ws = me.up('pveStdWorkspace');
175 ws.selectById(record.data.id);
176 },
177 destroy: function() {
178 rstore.un("load", load_cb);
f6710aac 179 },
e5c95a12 180 },
f6710aac 181 columns: coldef,
e5c95a12 182 });
e5c95a12 183 me.callParent();
e5c95a12
DM
184 updateGrid();
185 rstore.on("load", load_cb);
f6710aac 186 },
e5c95a12 187});