]> git.proxmox.com Git - proxmox-widget-toolkit.git/blob - grid/PendingObjectGrid.js
PendingObjectGrid: fix display of deletion of multikey fields
[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 var me = this;
7 var rec = me.store.getById(key);
8 if (rec) {
9 var 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 var me = this;
29 var rows = me.rows;
30 var rowdef = (rows && rows[key]) ? rows[key] : {};
31 var keys = rowdef.multiKey || [ key ];
32 var pending = false;
33
34 Ext.Array.each(keys, function(k) {
35 var 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 });
44
45 return pending;
46 },
47
48 renderValue: function(value, metaData, record, rowIndex, colIndex, store) {
49 var me = this;
50 var rows = me.rows;
51 var key = record.data.key;
52 var rowdef = (rows && rows[key]) ? rows[key] : {};
53 var renderer = rowdef.renderer;
54 var current = '';
55 var pendingdelete = '';
56 var 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 var delete_all = true;
73 if (rowdef.multiKey) {
74 Ext.Array.each(rowdef.multiKey, function(k) {
75 var rec = me.store.getById(k);
76 if (rec && rec.data && rec.data['delete'] !== 1) {
77 delete_all = false;
78 return false; // break
79 }
80 });
81 }
82 if (delete_all) {
83 pending = '<div style="text-decoration: line-through;">'+ current +'</div>';
84 }
85 }
86
87 if (pending) {
88 return current + '<div style="color:red">' + pending + '</div>';
89 } else {
90 return current;
91 }
92 },
93
94 initComponent : function() {
95 var me = this;
96
97 var rows = me.rows;
98
99 if (!me.rstore) {
100 if (!me.url) {
101 throw "no url specified";
102 }
103
104 me.rstore = Ext.create('Proxmox.data.ObjectStore', {
105 model: 'KeyValuePendingDelete',
106 readArray: true,
107 url: me.url,
108 interval: me.interval,
109 extraParams: me.extraParams,
110 rows: me.rows
111 });
112 }
113
114 me.callParent();
115 }
116 });