mirror of
https://github.com/pgadmin-org/pgadmin4.git
synced 2025-02-09 23:15:58 -06:00
Using the events to track the session changes, and enable/disable Save,
Reset buttons. Also - setting/reseting the error messages on status-bar when data are not valid.
This commit is contained in:
parent
2354c3e07d
commit
4feea580aa
@ -105,7 +105,7 @@ function($, _, S, pgAdmin, Menu, Backbone, Alertify, Backform) {
|
||||
//
|
||||
// Used to generate view for the particular node properties, edit,
|
||||
// creation.
|
||||
getView: function(item, type, el, node, formType, callback, data) {
|
||||
getView: function(item, type, el, node, formType, callback, ctx) {
|
||||
var that = this;
|
||||
|
||||
if (!this.type || this.type == '')
|
||||
@ -132,22 +132,58 @@ function($, _, S, pgAdmin, Menu, Backbone, Alertify, Backform) {
|
||||
}
|
||||
|
||||
// We know - which data model to be used for this object.
|
||||
var newModel = new (this.model.extend({urlRoot: urlBase}))(attrs, {
|
||||
onChangeData: data,
|
||||
onChangeCallback: callback
|
||||
}),
|
||||
var newModel = new (this.model.extend({urlRoot: urlBase}))(attrs, {}),
|
||||
info = this.getTreeNodeHierarchy.apply(this, [item]),
|
||||
groups = Backform.generateViewSchema(info, newModel, type, this, node);
|
||||
groups = Backform.generateViewSchema(
|
||||
info, newModel, type, this, node
|
||||
);
|
||||
|
||||
if (type == 'create' || type == 'edit') {
|
||||
newModel.on('on-status', function(e) {
|
||||
|
||||
if (callback && ctx) {
|
||||
callback = callback.bind(ctx);
|
||||
} else {
|
||||
callback = function() {
|
||||
console.log("Broke something!!! Why we don't have the callback or the context???");
|
||||
};
|
||||
}
|
||||
newModel.on(
|
||||
'pgadmin-session:set pgadmin-session:added pgadmin-session:changed pgadmin-session:removed',
|
||||
function() {
|
||||
if (newModel.invalidTimeout) {
|
||||
clearTimeout(newModel.invalidTimeout);
|
||||
}
|
||||
newModel.invalidTimeout = setTimeout(function() {
|
||||
var msg = newModel.validate();
|
||||
if (msg) {
|
||||
newModel.trigger('invalid', newModel, msg);
|
||||
} else {
|
||||
newModel.trigger('valid', newModel);
|
||||
}
|
||||
}, 300);
|
||||
|
||||
return true;
|
||||
})
|
||||
|
||||
newModel.on('invalid', function(newModel, message) {
|
||||
|
||||
if(!_.isUndefined(that.statusBar)) {
|
||||
that.statusBar.html(e.msg);
|
||||
that.statusBar.html(message);
|
||||
}
|
||||
}).on('on-status-clear', function(e) {
|
||||
callback(true);
|
||||
|
||||
return true;
|
||||
})
|
||||
|
||||
newModel.on('valid', function(e) {
|
||||
|
||||
if(!_.isUndefined(that.statusBar)) {
|
||||
that.statusBar.empty();
|
||||
}
|
||||
|
||||
callback(false, newModel.sessChanged());
|
||||
|
||||
return true;
|
||||
});
|
||||
}
|
||||
// 'schema' has the information about how to generate the form.
|
||||
@ -692,26 +728,31 @@ function($, _, S, pgAdmin, Menu, Backbone, Alertify, Backform) {
|
||||
'pg-prop-footer'
|
||||
).appendTo(j);
|
||||
|
||||
var modelChanged = function(m, o) {
|
||||
var btnGroup = o.find('.pg-prop-btn-group'),
|
||||
var updateButtons = function(hasError, modified) {
|
||||
|
||||
var btnGroup = this.find('.pg-prop-btn-group'),
|
||||
btnSave = btnGroup.find('button[type="save"]'),
|
||||
btnReset = btnGroup.find('button[type="reset"]');
|
||||
|
||||
if (m.sessValid() && m.sessChanged()) {
|
||||
btnSave.prop('disabled', false);
|
||||
btnSave.removeAttr('disabled');
|
||||
btnReset.prop('disabled', false);
|
||||
btnReset.removeAttr('disabled');
|
||||
} else {
|
||||
if (hasError || !modified) {
|
||||
btnSave.prop('disabled', true);
|
||||
btnSave.attr('disabled', 'disabled');
|
||||
} else {
|
||||
btnSave.prop('disabled', false);
|
||||
btnSave.removeAttr('disabled');
|
||||
}
|
||||
|
||||
if (!modified) {
|
||||
btnReset.prop('disabled', true);
|
||||
btnReset.attr('disabled', 'disabled');
|
||||
} else {
|
||||
btnReset.prop('disabled', false);
|
||||
btnReset.removeAttr('disabled');
|
||||
}
|
||||
};
|
||||
|
||||
// Create a view to edit/create the properties in fieldsets
|
||||
view = that.getView(item, action, content, data, 'dialog', modelChanged, j);
|
||||
view = that.getView(item, action, content, data, 'dialog', updateButtons, j);
|
||||
if (view) {
|
||||
// Save it to release it later
|
||||
j.data('obj-view', view);
|
||||
@ -1085,15 +1126,6 @@ function($, _, S, pgAdmin, Menu, Backbone, Alertify, Backform) {
|
||||
}
|
||||
});
|
||||
},
|
||||
onChange: function() {
|
||||
var self = this;
|
||||
|
||||
if (self.handler && 'onChange' in self.handler &&
|
||||
_.isFunction(self.handler.onChange)) {
|
||||
return self.handler.onChange();
|
||||
}
|
||||
return true;
|
||||
},
|
||||
sessChanged: function() {
|
||||
return (
|
||||
this.sessAttrs['changed'].length > 0 ||
|
||||
@ -1185,23 +1217,46 @@ function($, _, S, pgAdmin, Menu, Backbone, Alertify, Backform) {
|
||||
if ((!'sessChanged' in obj) || obj.sessChanged()) {
|
||||
self.sessAttrs['changed'].push(obj);
|
||||
}
|
||||
return self.onChange();
|
||||
|
||||
(self || self.handler).trigger(
|
||||
'pgadmin-session:added',
|
||||
self,
|
||||
(self || self.handler)
|
||||
);
|
||||
|
||||
return true;
|
||||
}
|
||||
self.sessAttrs['added'].push(obj);
|
||||
|
||||
return self.onChange();
|
||||
/*
|
||||
* Session has been changed
|
||||
*/
|
||||
(self || self.handler).trigger(
|
||||
'pgadmin-session:added',
|
||||
self,
|
||||
(self || self.handler)
|
||||
);
|
||||
|
||||
return true;
|
||||
},
|
||||
onModelRemove: function(obj) {
|
||||
|
||||
if (!this.trackChanges)
|
||||
return true;
|
||||
|
||||
var self = this, idx = _.indexOf(self.sessAttrs['added'], obj);
|
||||
var self = this, idx = _.indexOf(self.sessAttrs['added'], obj),
|
||||
copy = _.clone(obj);
|
||||
|
||||
// Hmm - it was newly added, we can safely remove it.
|
||||
if (idx >= 0) {
|
||||
self.sessAttrs['added'].splice(idx, 1);
|
||||
return self.onChange();
|
||||
|
||||
(self || self.handler).trigger(
|
||||
'pgadmin-session:removed',
|
||||
self, copy, (self || self.handler)
|
||||
);
|
||||
|
||||
return true;
|
||||
}
|
||||
// Hmm - it was changed in this session, we should remove it from the
|
||||
// changed models.
|
||||
@ -1210,7 +1265,11 @@ function($, _, S, pgAdmin, Menu, Backbone, Alertify, Backform) {
|
||||
self.sessAttrs['changed'].splice(idx, 1);
|
||||
}
|
||||
self.sessAttrs['deleted'].push(obj);
|
||||
return self.onChange();
|
||||
|
||||
(self || self.handler).trigger(
|
||||
'pgadmin-session:removed',
|
||||
self, copy, (self || self.handler)
|
||||
);
|
||||
},
|
||||
onModelChange: function(obj) {
|
||||
|
||||
@ -1222,6 +1281,10 @@ function($, _, S, pgAdmin, Menu, Backbone, Alertify, Backform) {
|
||||
// It was newly added model, we don't need to add into the changed
|
||||
// list.
|
||||
if (idx >= 0) {
|
||||
(self || self.handler).trigger(
|
||||
'pgadmin-session:changed',
|
||||
self, obj, (self || self.handler)
|
||||
);
|
||||
return true;
|
||||
}
|
||||
idx = _.indexOf(self.sessAttrs['changed'], obj);
|
||||
@ -1230,17 +1293,35 @@ function($, _, S, pgAdmin, Menu, Backbone, Alertify, Backform) {
|
||||
return true;
|
||||
}
|
||||
self.sessAttrs['changed'].push(obj);
|
||||
return self.onChange();
|
||||
|
||||
(self || self.handler).trigger(
|
||||
'pgadmin-session:changed',
|
||||
self, obj, (self || self.handler)
|
||||
);
|
||||
|
||||
return true;
|
||||
}
|
||||
if (idx > 0) {
|
||||
|
||||
(self || self.handler).trigger(
|
||||
'pgadmin-session:changed',
|
||||
self, obj, (self || self.handler)
|
||||
);
|
||||
|
||||
if (!obj.sessChanged()) {
|
||||
self.sessAttrs['changed'].splice(idx, 1);
|
||||
return self.onChange();
|
||||
return true;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
self.sessAttrs['changed'].push(obj);
|
||||
return self.onChange();
|
||||
|
||||
(self || self.handler).trigger(
|
||||
'pgadmin-session:changed',
|
||||
self, obj, (self || self.handler)
|
||||
);
|
||||
|
||||
return true;
|
||||
}
|
||||
}),
|
||||
// Base class for Node Model
|
||||
@ -1328,8 +1409,9 @@ function($, _, S, pgAdmin, Menu, Backbone, Alertify, Backform) {
|
||||
self.handler = (options.handler ||
|
||||
(self.collection && self.collection.handler));
|
||||
self.trackChanges = false;
|
||||
self.onChangeData = options.onChangeData;
|
||||
self.onChangeCallback = options.onChangeCallback;
|
||||
if (!self.handler) {
|
||||
self.errorModel = new Backbone.Model();
|
||||
}
|
||||
|
||||
if (self.schema && _.isArray(self.schema)) {
|
||||
_.each(self.schema, function(s) {
|
||||
@ -1379,24 +1461,6 @@ function($, _, S, pgAdmin, Menu, Backbone, Alertify, Backform) {
|
||||
|
||||
return self;
|
||||
},
|
||||
onChange: function() {
|
||||
var self = this;
|
||||
|
||||
if (self.validate && _.isFunction(self.validate)) {
|
||||
if (!self.validate()) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
if (self.handler && 'onChange' in self.handler &&
|
||||
_.isFunction(self.handler.onChange)) {
|
||||
return self.handler.onChange();
|
||||
}
|
||||
if (self.onChangeCallback && _.isFunction(self.onChangeCallback)) {
|
||||
return self.onChangeCallback(self, self.onChangeData);
|
||||
}
|
||||
return true;
|
||||
},
|
||||
sessChanged: function() {
|
||||
var self = this;
|
||||
|
||||
@ -1442,7 +1506,11 @@ function($, _, S, pgAdmin, Menu, Backbone, Alertify, Backform) {
|
||||
attrChanged(val, key);
|
||||
}
|
||||
|
||||
handler.onChange();
|
||||
(self || self.handler).trigger(
|
||||
'pgadmin-session:set',
|
||||
self, arguments, (self || self.handler)
|
||||
);
|
||||
|
||||
return true;
|
||||
}
|
||||
return res;
|
||||
@ -1528,9 +1596,9 @@ function($, _, S, pgAdmin, Menu, Backbone, Alertify, Backform) {
|
||||
}
|
||||
});
|
||||
|
||||
if (!self.handler) {
|
||||
self.onChange();
|
||||
}
|
||||
(self || self.handler).trigger(
|
||||
'pgadmin-session:start',
|
||||
(self || self.handler));
|
||||
}
|
||||
}),
|
||||
getTreeNodeHierarchy: function(i) {
|
||||
|
Loading…
Reference in New Issue
Block a user