]> git.proxmox.com Git - pve-manager.git/blob - www/manager/grid/ObjectGrid.js
imported from svn 'pve-manager/pve2'
[pve-manager.git] / www / manager / grid / ObjectGrid.js
1 Ext.define('PVE.grid.ObjectGrid', {
2 extend: 'Ext.grid.GridPanel',
3 requires: [
4 'Ext.grid.*',
5 'PVE.data.ObjectStore'
6 ],
7 alias: ['widget.pveObjectGrid'],
8
9 getObjectValue: function(key, defaultValue) {
10 var me = this;
11 var rec = me.store.getById(key);
12 if (rec) {
13 return rec.data.value;
14 }
15 return defaultValue;
16 },
17
18 renderKey: function(key, metaData, record, rowIndex, colIndex, store) {
19 var me = this;
20 var rows = me.rows;
21 var rowdef = (rows && rows[key]) ? rows[key] : {};
22 return rowdef.header || key;
23 },
24
25 renderValue: function(value, metaData, record, rowIndex, colIndex, store) {
26 var me = this;
27 var rows = me.rows;
28 var key = record.data.key;
29 var rowdef = (rows && rows[key]) ? rows[key] : {};
30
31 var renderer = rowdef.renderer;
32 if (renderer) {
33 return renderer(value, metaData, record, rowIndex, colIndex, store);
34 }
35
36 return value;
37 },
38
39 initComponent : function() {
40 var me = this;
41
42 var rows = me.rows;
43
44 if (!me.rstore) {
45 if (!me.url) {
46 throw "no url specified";
47 }
48
49 me.rstore = Ext.create('PVE.data.ObjectStore', {
50 url: me.url,
51 interval: me.interval,
52 extraParams: me.extraParams,
53 rows: me.rows
54 });
55 }
56
57 var rstore = me.rstore;
58
59 var store = Ext.create('PVE.data.DiffStore', { rstore: rstore });
60
61 if (rows) {
62 Ext.Object.each(rows, function(key, rowdef) {
63 if (Ext.isDefined(rowdef.defaultValue)) {
64 store.add({ key: key, value: rowdef.defaultValue });
65 } else if (rowdef.required) {
66 store.add({ key: key, value: undefined });
67 }
68 });
69 }
70
71 if (me.sorterFn) {
72 store.sorters.add(new Ext.util.Sorter({
73 sorterFn: me.sorterFn
74 }));
75 }
76
77 store.filters.add(new Ext.util.Filter({
78 filterFn: function(item) {
79 if (rows) {
80 var rowdef = rows[item.data.key];
81 if (!rowdef || (rowdef.visible === false)) {
82 return false;
83 }
84 }
85 return true;
86 }
87 }));
88
89 var load_count = 0;
90
91 me.mon(rstore, 'load', function(s, records, success) {
92
93 load_count++;
94
95 me.setLoading(false);
96
97 if (!success) {
98 me.setLoading("Data load error");
99 return;
100 }
101 });
102
103 Ext.applyIf(me, {
104 store: store,
105 hideHeaders: true,
106 stateful: false,
107 columns: [
108 {
109 header: 'Name',
110 width: me.cwidth1 || 100,
111 dataIndex: 'key',
112 renderer: me.renderKey
113 },
114 {
115 flex: 1,
116 header: 'Value',
117 dataIndex: 'value',
118 renderer: me.renderValue
119 }
120 ]
121 });
122
123 me.on('afterlayout', function() {
124 if (!load_count) {
125 me.setLoading(true);
126 }
127 });
128
129 me.callParent();
130 }
131 });