]> git.proxmox.com Git - pve-manager.git/blob - www/manager6/grid/ResourceGrid.js
ui: drop various translations of fixed strings
[pve-manager.git] / www / manager6 / grid / ResourceGrid.js
1 Ext.define('PVE.grid.ResourceGrid', {
2 extend: 'Ext.grid.GridPanel',
3 alias: ['widget.pveResourceGrid'],
4
5 border: false,
6 defaultSorter: {
7 property: 'type',
8 direction: 'ASC',
9 },
10 userCls: 'proxmox-tags-full',
11 initComponent: function() {
12 let me = this;
13
14 let rstore = PVE.data.ResourceStore;
15
16 let store = Ext.create('Ext.data.Store', {
17 model: 'PVEResources',
18 sorters: me.defaultSorter,
19 proxy: {
20 type: 'memory',
21 },
22 });
23
24 let textfilter = '';
25 let textfilterMatch = function(item) {
26 for (const field of ['name', 'storage', 'node', 'type', 'text']) {
27 let v = item.data[field];
28 if (v && v.toLowerCase().indexOf(textfilter) >= 0) {
29 return true;
30 }
31 }
32 return false;
33 };
34
35 let updateGrid = function() {
36 var filterfn = me.viewFilter ? me.viewFilter.filterfn : null;
37
38 store.suspendEvents();
39
40 let nodeidx = {};
41 let gather_child_nodes;
42 gather_child_nodes = function(node) {
43 if (!node || !node.childNodes) {
44 return;
45 }
46 for (let child of node.childNodes) {
47 let orgNode = rstore.data.get(child.data.id);
48 if (orgNode) {
49 if ((!filterfn || filterfn(child)) && (!textfilter || textfilterMatch(child))) {
50 nodeidx[child.data.id] = orgNode;
51 }
52 }
53 gather_child_nodes(child);
54 }
55 };
56 gather_child_nodes(me.pveSelNode);
57
58 // remove vanished items
59 let rmlist = [];
60 store.each(olditem => {
61 if (!nodeidx[olditem.data.id]) {
62 rmlist.push(olditem);
63 }
64 });
65 if (rmlist.length) {
66 store.remove(rmlist);
67 }
68
69 // add new items
70 let addlist = [];
71 for (const [_key, item] of Object.entries(nodeidx)) {
72 // getById() use find(), which is slow (ExtJS4 DP5)
73 let olditem = store.data.get(item.data.id);
74 if (!olditem) {
75 addlist.push(item);
76 continue;
77 }
78 let changes = false;
79 for (let field of PVE.data.ResourceStore.fieldNames) {
80 if (field !== 'id' && item.data[field] !== olditem.data[field]) {
81 changes = true;
82 olditem.beginEdit();
83 olditem.set(field, item.data[field]);
84 }
85 }
86 if (changes) {
87 olditem.endEdit(true);
88 olditem.commit(true);
89 }
90 }
91 if (addlist.length) {
92 store.add(addlist);
93 }
94 store.sort();
95 store.resumeEvents();
96 store.fireEvent('refresh', store);
97 };
98
99 Ext.apply(me, {
100 store: store,
101 stateful: true,
102 stateId: 'grid-resource',
103 tbar: [
104 '->',
105 gettext('Search') + ':', ' ',
106 {
107 xtype: 'textfield',
108 width: 200,
109 value: textfilter,
110 enableKeyEvents: true,
111 listeners: {
112 buffer: 500,
113 keyup: function(field, e) {
114 textfilter = field.getValue().toLowerCase();
115 updateGrid();
116 },
117 },
118 },
119 ],
120 viewConfig: {
121 stripeRows: true,
122 },
123 listeners: {
124 itemcontextmenu: PVE.Utils.createCmdMenu,
125 itemdblclick: function(v, record) {
126 var ws = me.up('pveStdWorkspace');
127 ws.selectById(record.data.id);
128 },
129 afterrender: function() {
130 updateGrid();
131 },
132 },
133 columns: rstore.defaultColumns(),
134 });
135 me.callParent();
136 me.mon(rstore, 'load', () => updateGrid());
137 },
138 });