]> git.proxmox.com Git - pve-manager.git/blame - www/manager6/grid/ResourceGrid.js
ui: eslint: fix trailing comma and comma related whitespaces errors
[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 },
e5c95a12
DM
10 initComponent : function() {
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() {
42
43 var filterfn = me.viewFilter ? me.viewFilter.filterfn : null;
2a4971d8 44
e5c95a12
DM
45 //console.log("START GRID UPDATE " + me.viewFilter);
46
47 store.suspendEvents();
48
49 var nodeidx = {};
50 var gather_child_nodes = function(cn) {
51 if (!cn) {
52 return;
53 }
54 var cs = cn.childNodes;
55 if (!cs) {
56 return;
57 }
58 var len = cs.length, i = 0, n, res;
59
60 for (; i < len; i++) {
61 var child = cs[i];
62 var orgnode = rstore.data.get(child.data.id);
63 if (orgnode) {
64 if ((!filterfn || filterfn(child)) &&
65 (!textfilter || textfilter_match(child))) {
66 nodeidx[child.data.id] = orgnode;
67 }
68 }
69 gather_child_nodes(child);
70 }
71 };
72 gather_child_nodes(me.pveSelNode);
73
74 // remove vanished items
75 var rmlist = [];
76 store.each(function(olditem) {
77 var item = nodeidx[olditem.data.id];
78 if (!item) {
79 //console.log("GRID REM UID: " + olditem.data.id);
80 rmlist.push(olditem);
81 }
82 });
83
84 if (rmlist.length) {
85 store.remove(rmlist);
86 }
87
88 // add new items
89 var addlist = [];
90 var key;
91 for (key in nodeidx) {
92 if (nodeidx.hasOwnProperty(key)) {
93 var item = nodeidx[key];
2a4971d8
TL
94
95 // getById() use find(), which is slow (ExtJS4 DP5)
e5c95a12
DM
96 //var olditem = store.getById(item.data.id);
97 var olditem = store.data.get(item.data.id);
98
99 if (!olditem) {
100 //console.log("GRID ADD UID: " + item.data.id);
101 var info = Ext.apply({}, item.data);
5ea30043 102 var child = Ext.create(store.model, info);
e5c95a12
DM
103 addlist.push(item);
104 continue;
105 }
106 // try to detect changes
107 var changes = false;
108 var fieldkeys = PVE.data.ResourceStore.fieldNames;
109 var fieldcount = fieldkeys.length;
110 var fieldind;
111 for (fieldind = 0; fieldind < fieldcount; fieldind++) {
112 var field = fieldkeys[fieldind];
113 if (field != 'id' && item.data[field] != olditem.data[field]) {
114 changes = true;
115 //console.log("changed item " + item.id + " " + field + " " + item.data[field] + " != " + olditem.data[field]);
116 olditem.beginEdit();
117 olditem.set(field, item.data[field]);
118 }
119 }
120 if (changes) {
121 olditem.endEdit(true);
2a4971d8 122 olditem.commit(true);
e5c95a12
DM
123 }
124 }
125 }
126
127 if (addlist.length) {
128 store.add(addlist);
129 }
130
131 store.sort();
132
133 store.resumeEvents();
134
7a3691ac 135 store.fireEvent('refresh', store);
e5c95a12
DM
136
137 //console.log("END GRID UPDATE");
138 };
139
140 var filter_task = new Ext.util.DelayedTask(function(){
141 updateGrid();
142 });
143
2a4971d8
TL
144 var load_cb = function() {
145 updateGrid();
e5c95a12
DM
146 };
147
e5c95a12
DM
148 Ext.apply(me, {
149 store: store,
df6345f9 150 stateful: true,
ac419eb9 151 stateId: 'grid-resource',
e5c95a12 152 tbar: [
2a4971d8 153 '->',
e5c95a12
DM
154 gettext('Search') + ':', ' ',
155 {
156 xtype: 'textfield',
157 width: 200,
158 value: textfilter,
159 enableKeyEvents: true,
160 listeners: {
161 keyup: function(field, e) {
162 var v = field.getValue();
163 textfilter = v.toLowerCase();
164 filter_task.delay(500);
f6710aac
TL
165 },
166 },
167 },
e5c95a12
DM
168 ],
169 viewConfig: {
f6710aac 170 stripeRows: true,
e5c95a12
DM
171 },
172 listeners: {
685b7aa4 173 itemcontextmenu: PVE.Utils.createCmdMenu,
e5c95a12
DM
174 itemdblclick: function(v, record) {
175 var ws = me.up('pveStdWorkspace');
176 ws.selectById(record.data.id);
177 },
178 destroy: function() {
179 rstore.un("load", load_cb);
f6710aac 180 },
e5c95a12 181 },
f6710aac 182 columns: coldef,
e5c95a12 183 });
e5c95a12 184 me.callParent();
e5c95a12
DM
185 updateGrid();
186 rstore.on("load", load_cb);
f6710aac 187 },
e5c95a12 188});