]> git.proxmox.com Git - pve-manager.git/blob - www/new/data/DiffStore.js
imported from svn 'pve-manager/pve2'
[pve-manager.git] / www / new / data / DiffStore.js
1 /* Config properties:
2 * rstore: A storage to track changes
3 * Only works if rstore has a model and use 'idProperty'
4 */
5 Ext.define('PVE.data.DiffStore', {
6 extend: 'Ext.data.Store',
7
8 constructor: function(config) {
9 var me = this;
10
11 var config = config || {};
12
13 if (!config.rstore)
14 throw "no rstore specified";
15 if (!config.rstore.model)
16 throw "no rstore model specified";
17
18 var rstore = config.rstore;
19
20 Ext.apply(config, {
21 model: rstore.model,
22 proxy: { type: 'memory' }
23 });
24
25 me.callParent([config]);
26
27 var first_load = true;
28
29 var cond_add_item = function(data, id) {
30 var olditem = me.getById(id);
31 if (olditem) {
32 olditem.beginEdit()
33 me.model.prototype.fields.eachKey(function(field) {
34 if (olditem.data[field] !== data[field])
35 olditem.set(field, data[field]);
36 });
37 olditem.endEdit(true);
38 olditem.commit();
39 } else {
40 var newrec = Ext.ModelMgr.create(data, me.model, id);
41 var pos = (me.appendAtStart && !first_load) ? 0 : me.data.length;
42 me.insert(pos, newrec);
43 }
44 };
45
46 me.mon(rstore, 'load', function(s, records, success) {
47
48 if (!success)
49 return;
50
51 me.suspendEvents();
52
53 // remove vanished items
54 me.each(function(olditem) {
55 var item = rstore.getById(olditem.getId());
56 if (!item)
57 me.remove(olditem);
58 });
59
60 rstore.each(function(item) {
61 cond_add_item(item.data, item.getId());
62 });
63
64 me.filter();
65
66 first_load = false;
67
68 me.resumeEvents();
69 me.fireEvent('datachanged', me);
70 });
71 }
72 });