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