Integrate the new mechanism for the data session management in the

variable control, privilege control, which specifies the keys - which
helps identify the data from the collection. Also, resolved an version
compatibility issue with the variable control.
This commit is contained in:
Ashesh Vashi 2016-01-15 16:47:17 +05:30
parent 586b81b162
commit 3a06758b94
4 changed files with 57 additions and 31 deletions

View File

@ -59,6 +59,7 @@
grantor: undefined, grantor: undefined,
privileges: undefined privileges: undefined
}, },
keys: ['grantee', 'grantor'],
/* /*
* Each of the database object needs to extend this model, which should * Each of the database object needs to extend this model, which should
* provide the type of privileges (it supports). * provide the type of privileges (it supports).
@ -67,7 +68,7 @@
schema: [{ schema: [{
id: 'grantee', label:'Grantee', type:'text', group: null, cell: 'string', id: 'grantee', label:'Grantee', type:'text', group: null, cell: 'string',
disabled: true, cellHeaderClasses: 'width_percent_40' disabled: false, cellHeaderClasses: 'width_percent_40'
}, { }, {
id: 'privileges', label:'Privileges', id: 'privileges', label:'Privileges',
type: 'collection', model: PrivilegeModel, group: null, type: 'collection', model: PrivilegeModel, group: null,
@ -93,7 +94,8 @@
privileges = new (pgNode.Collection)( privileges = new (pgNode.Collection)(
models, { models, {
model: PrivilegeModel, model: PrivilegeModel,
handler: this.handler || this, top: this.top || this,
handler: this,
silent: true, silent: true,
parse: false parse: false
}); });

View File

@ -38,10 +38,11 @@
var VariableModel = pgNode.VariableModel = pgNode.Model.extend({ var VariableModel = pgNode.VariableModel = pgNode.Model.extend({
defaults: { defaults: {
name: undefined, name: undefined,
value: undefined, value: '',
role: undefined, role: undefined,
database: undefined, database: undefined,
}, },
keys: ['name', 'role', 'database'],
schema: [ schema: [
{id: 'name', label:'Name', type:'text', editable: false, cellHeaderClasses: 'width_percent_30'}, {id: 'name', label:'Name', type:'text', editable: false, cellHeaderClasses: 'width_percent_30'},
{ {
@ -57,7 +58,7 @@
// Remove not defined values from model values. // Remove not defined values from model values.
// i.e. // i.e.
// role, database // role, database
if (_.isUndefined(d.database)) { if (_.isUndefined(d.database) || _.isNull(d.database)) {
delete d.database; delete d.database;
} }
@ -66,6 +67,20 @@
} }
return d; return d;
},
validate: function() {
if (_.isUndefined(this.get('value')) ||
String(this.get('value')).replace(/^\s+|\s+$/g, '') == '') {
var msg = 'Please enter some value!';
this.errorModel.set('value', msg);
return msg;
} else {
this.errorModel.unset('value');
}
return null;
} }
}); });
@ -306,7 +321,10 @@
url = this.field.get('url'), url = this.field.get('url'),
m = self.model; m = self.model;
if (this.field.get('version_compitible') && url && !m.isNew()) { if (!this.field.get('version_compitible'))
return;
if (url && !m.isNew()) {
var node = self.field.get('node'), var node = self.field.get('node'),
node_data = self.field.get('node_data'), node_data = self.field.get('node_data'),
node_info = self.field.get('node_info'), node_info = self.field.get('node_info'),
@ -314,9 +332,14 @@
node, [ node, [
null, url, node_data, true, node_info null, url, node_data, true, node_info
]), ]),
data; data,
isTracking = self.collection.trackChanges;
if (isTracking) {
self.collection.stopSession();
}
m.trigger('pgadmin-view:fetching', m, self.field);
m.trigger('pgadmin:view:fetching', m, self.field);
$.ajax({ $.ajax({
async: false, async: false,
url: full_url, url: full_url,
@ -324,19 +347,20 @@
data = res.data; data = res.data;
}, },
error: function() { error: function() {
m.trigger('pgadmin:view:fetch:error', m, self.field); m.trigger('pgadmin-view:fetch:error', m, self.field);
} }
}); });
m.trigger('pgadmin:view:fetched', m, self.field); m.trigger('pgadmin-view:fetched', m, self.field);
if (data && _.isArray(data)) { if (data && _.isArray(data)) {
self.collection.reset(data, {silent: true}); self.collection.reset(data, {silent: true});
/* }
* Make sure - new data will be taken care by the session management /*
*/ * Make sure - new data will be taken care by the session management
*/
if (isTracking) {
self.collection.startNewSession(); self.collection.startNewSession();
} }
} else {
} }
}, },
@ -417,11 +441,8 @@
}, },
events: _.extend( events: _.extend(
{}, {}, Backform.UniqueColCollectionControl.prototype.events,
Backform.UniqueColCollectionControl.prototype.events, {'click button.add': 'addVariable'}
{
'click button.add': 'addVariable'
}
), ),
showGridControl: function(data) { showGridControl: function(data) {
@ -481,8 +502,10 @@
var self = this, var self = this,
m = new (self.field.get('model'))( m = new (self.field.get('model'))(
self.headerData.toJSON(), {silent: true} self.headerData.toJSON(), {
), silent: true, top: self.collection.top,
handler: self.collection
}),
coll = self.model.get(self.field.get('name')); coll = self.model.get(self.field.get('name'));
coll.add(m); coll.add(m);

View File

@ -69,7 +69,7 @@ function($, _, pgAdmin, Backbone, Backform, Alertify, Node) {
*/ */
var self = this, var self = this,
url = self.field.get('url') || self.defaults.url, url = self.field.get('url') || self.defaults.url,
m = self.model.handler || self.model; m = self.model.top || self.model;
// Hmm - we found the url option. // Hmm - we found the url option.
// That means - we needs to fetch the options from that node. // That means - we needs to fetch the options from that node.

View File

@ -149,7 +149,7 @@
attrArr = d.split('.'); attrArr = d.split('.');
name = attrArr.shift(); name = attrArr.shift();
self.stopListening(that.model, "change:" + name, self.render); self.stopListening(self.model, "change:" + name, self.render);
}); });
} }
@ -451,11 +451,11 @@
'hidden.bs.tab', function() { 'hidden.bs.tab', function() {
self.hidden_tab = $(this).data('tabIndex'); self.hidden_tab = $(this).data('tabIndex');
}).on('shown.bs.tab', function() { }).on('shown.bs.tab', function() {
var that = this; var self = this;
self.shown_tab = $(that).data('tabIndex'); self.shown_tab = $(self).data('tabIndex');
m.trigger('pg-property-tab-changed', { m.trigger('pg-property-tab-changed', {
'model': m, 'shown': self.shown_tab, 'hidden': self.hidden_tab, 'model': m, 'shown': self.shown_tab, 'hidden': self.hidden_tab,
'tab': that 'tab': self
}); });
}); });
}); });
@ -650,7 +650,8 @@
{ {
model: self.field.get('model'), model: self.field.get('model'),
silent: true, silent: true,
handler: self.model.handler || self.model handler: self.model.handler || self.model,
attrName: self.field.get('name')
}); });
self.model.set(self.field.get('name'), collection, {silent: true}); self.model.set(self.field.get('name'), collection, {silent: true});
} }
@ -664,8 +665,8 @@
var self = this; var self = this;
if (this.field.get('version_compitible')) { if (this.field.get('version_compitible')) {
self.stopListening(collection, "add", self.collectionChanged); self.stopListening(self.collection, "add", self.collectionChanged);
self.stopListening(collection, "change", self.collectionChanged); self.stopListening(self.collection, "change", self.collectionChanged);
} }
Backform.Control.prototype.remove.apply(this, arguments); Backform.Control.prototype.remove.apply(this, arguments);
@ -1084,13 +1085,13 @@
this.sqlTab = sqlTab; this.sqlTab = sqlTab;
return this; return this;
}, },
onTabChange: function() { onTabChange: function(obj) {
// Fetch the information only if the SQL tab is visible at the moment. // Fetch the information only if the SQL tab is visible at the moment.
if (this.dialog && this.dialog.shown_tab == this.tabIndex) { if (this.dialog && obj.shown == this.tabIndex) {
// We will send request to sever only if something is changed in model // We will send request to sever only if something is changed in model
if(_.size(this.model.sessAttrs)) { if(this.model.sessChanged()) {
var self = this, var self = this,
node = self.field.get('schema_node'), node = self.field.get('schema_node'),