]> git.proxmox.com Git - proxmox-widget-toolkit.git/blob - grid/PendingObjectGrid.js
a5a640c90b245618e4efe66312deef589b90538c
[proxmox-widget-toolkit.git] / grid / PendingObjectGrid.js
1 Ext.define('Proxmox.grid.PendingObjectGrid', {
2 extend: 'Proxmox.grid.ObjectGrid',
3 alias: ['widget.proxmoxPendingObjectGrid'],
4
5 getObjectValue: function(key, defaultValue, pending) {
6 let me = this;
7 let rec = me.store.getById(key);
8 if (rec) {
9 let value = rec.data.value;
10 if (pending) {
11 if (Ext.isDefined(rec.data.pending) && rec.data.pending !== '') {
12 value = rec.data.pending;
13 } else if (rec.data.delete === 1) {
14 value = defaultValue;
15 }
16 }
17
18 if (Ext.isDefined(value) && value !== '') {
19 return value;
20 } else {
21 return defaultValue;
22 }
23 }
24 return defaultValue;
25 },
26
27 hasPendingChanges: function(key) {
28 let me = this;
29 let rows = me.rows;
30 let rowdef = rows && rows[key] ? rows[key] : {};
31 let keys = rowdef.multiKey || [key];
32 let pending = false;
33
34 Ext.Array.each(keys, function(k) {
35 let rec = me.store.getById(k);
36 if (rec && rec.data && (
37 (Ext.isDefined(rec.data.pending) && rec.data.pending !== '') ||
38 rec.data.delete === 1
39 )) {
40 pending = true;
41 return false; // break
42 }
43 return true;
44 });
45
46 return pending;
47 },
48
49 renderValue: function(value, metaData, record, rowIndex, colIndex, store) {
50 let me = this;
51 let rows = me.rows;
52 let key = record.data.key;
53 let rowdef = rows && rows[key] ? rows[key] : {};
54 let renderer = rowdef.renderer;
55 let current = '';
56 let pending = '';
57
58 if (renderer) {
59 current = renderer(value, metaData, record, rowIndex, colIndex, store, false);
60 if (me.hasPendingChanges(key)) {
61 pending = renderer(record.data.pending, metaData, record, rowIndex, colIndex, store, true);
62 }
63 if (pending === current) {
64 pending = undefined;
65 }
66 } else {
67 current = value || '';
68 pending = record.data.pending;
69 }
70
71 if (record.data.delete) {
72 let delete_all = true;
73 if (rowdef.multiKey) {
74 Ext.Array.each(rowdef.multiKey, function(k) {
75 let rec = me.store.getById(k);
76 if (rec && rec.data && rec.data.delete !== 1) {
77 delete_all = false;
78 return false; // break
79 }
80 return true;
81 });
82 }
83 if (delete_all) {
84 pending = '<div style="text-decoration: line-through;">'+ current +'</div>';
85 }
86 }
87
88 if (pending) {
89 return current + '<div style="color:darkorange">' + pending + '</div>';
90 } else {
91 return current;
92 }
93 },
94
95 initComponent: function() {
96 let me = this;
97
98 if (!me.rstore) {
99 if (!me.url) {
100 throw "no url specified";
101 }
102
103 me.rstore = Ext.create('Proxmox.data.ObjectStore', {
104 model: 'KeyValuePendingDelete',
105 readArray: true,
106 url: me.url,
107 interval: me.interval,
108 extraParams: me.extraParams,
109 rows: me.rows,
110 });
111 }
112
113 me.callParent();
114 },
115 });