]> git.proxmox.com Git - pve-manager.git/blob - www/manager6/grid/ObjectGrid.js
initialize Diffstore sorters and filters with empty arrays
[pve-manager.git] / www / manager6 / grid / ObjectGrid.js
1 /* Renders a list of key values objets
2
3 mandatory config parameters:
4 rows: an object container where each propery is a key-value object we want to render
5 var rows = {
6 keyboard: {
7 header: gettext('Keyboard Layout'),
8 editor: 'PVE.dc.KeyboardEdit',
9 renderer: PVE.Utils.render_kvm_language,
10 required: true
11 },
12
13 */
14
15 Ext.define('PVE.grid.ObjectGrid', {
16 extend: 'Ext.grid.GridPanel',
17 alias: ['widget.pveObjectGrid'],
18
19 getObjectValue: function(key, defaultValue) {
20 var me = this;
21 var rec = me.store.getById(key);
22 if (rec) {
23 return rec.data.value;
24 }
25 return defaultValue;
26 },
27
28 renderKey: function(key, metaData, record, rowIndex, colIndex, store) {
29 var me = this;
30 var rows = me.rows;
31 var rowdef = (rows && rows[key]) ? rows[key] : {};
32 return rowdef.header || key;
33 },
34
35 renderValue: function(value, metaData, record, rowIndex, colIndex, store) {
36 var me = this;
37 var rows = me.rows;
38 var key = record.data.key;
39 var rowdef = (rows && rows[key]) ? rows[key] : {};
40
41 var renderer = rowdef.renderer;
42 if (renderer) {
43 return renderer(value, metaData, record, rowIndex, colIndex, store);
44 }
45
46 return value;
47 },
48
49 initComponent : function() {
50 var me = this;
51
52 var rows = me.rows;
53
54 if (!me.rstore) {
55 if (!me.url) {
56 throw "no url specified";
57 }
58
59 me.rstore = Ext.create('PVE.data.ObjectStore', {
60 url: me.url,
61 interval: me.interval,
62 extraParams: me.extraParams,
63 rows: me.rows
64 });
65 }
66
67 var rstore = me.rstore;
68
69 var store = Ext.create('PVE.data.DiffStore', { rstore: rstore,
70 sorters: [],
71 filters: []
72 });
73
74 if (rows) {
75 Ext.Object.each(rows, function(key, rowdef) {
76 if (Ext.isDefined(rowdef.defaultValue)) {
77 store.add({ key: key, value: rowdef.defaultValue });
78 } else if (rowdef.required) {
79 store.add({ key: key, value: undefined });
80 }
81 });
82 }
83
84 if (me.sorterFn) {
85 store.sorters.add(new Ext.util.Sorter({
86 sorterFn: me.sorterFn
87 }));
88 }
89
90 store.filters.add(new Ext.util.Filter({
91 filterFn: function(item) {
92 if (rows) {
93 var rowdef = rows[item.data.key];
94 if (!rowdef || (rowdef.visible === false)) {
95 return false;
96 }
97 }
98 return true;
99 }
100 }));
101
102 PVE.Utils.monStoreErrors(me, rstore);
103
104 Ext.applyIf(me, {
105 store: store,
106 hideHeaders: true,
107 stateful: false,
108 columns: [
109 {
110 header: gettext('Name'),
111 width: me.cwidth1 || 100,
112 dataIndex: 'key',
113 renderer: me.renderKey
114 },
115 {
116 flex: 1,
117 header: gettext('Value'),
118 dataIndex: 'value',
119 renderer: me.renderValue
120 }
121 ]
122 });
123
124 me.callParent();
125 }
126 });