mirror of
https://github.com/pgadmin-org/pgadmin4.git
synced 2025-02-25 18:55:31 -06:00
Add canAddRow/canEditRow/canDeleteRow functionality for Backgrid.
This will allow user to check condition on individual opration(add/edit/delete row) rather than only while rendering the control.
This commit is contained in:
committed by
Dave Page
parent
0fb0820c64
commit
6e237d16ca
@@ -899,7 +899,9 @@
|
|||||||
},
|
},
|
||||||
render: function() {
|
render: function() {
|
||||||
// Clean up existing elements
|
// Clean up existing elements
|
||||||
|
|
||||||
this.undelegateEvents();
|
this.undelegateEvents();
|
||||||
|
this.$el.empty();
|
||||||
|
|
||||||
var field = _.defaults(this.field.toJSON(), this.defaults),
|
var field = _.defaults(this.field.toJSON(), this.defaults),
|
||||||
attributes = this.model.toJSON(),
|
attributes = this.model.toJSON(),
|
||||||
@@ -927,6 +929,7 @@
|
|||||||
canAdd: (field.version_compatible &&
|
canAdd: (field.version_compatible &&
|
||||||
evalF.apply(this.field, [data.canAdd, data, this.model])
|
evalF.apply(this.field, [data.canAdd, data, this.model])
|
||||||
),
|
),
|
||||||
|
canAddRow: data.canAddRow,
|
||||||
canDelete: evalF.apply(this.field, [data.canDelete, data, this.model]),
|
canDelete: evalF.apply(this.field, [data.canDelete, data, this.model]),
|
||||||
canEdit: evalF.apply(this.field, [data.canEdit, data, this.model])
|
canEdit: evalF.apply(this.field, [data.canEdit, data, this.model])
|
||||||
});
|
});
|
||||||
@@ -978,7 +981,8 @@
|
|||||||
gridSchema.columns.unshift({
|
gridSchema.columns.unshift({
|
||||||
name: "pg-backform-delete", label: "",
|
name: "pg-backform-delete", label: "",
|
||||||
cell: Backgrid.Extension.DeleteCell,
|
cell: Backgrid.Extension.DeleteCell,
|
||||||
editable: false, cell_priority: -1
|
editable: false, cell_priority: -1,
|
||||||
|
canDeleteRow: data.canDeleteRow
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -990,7 +994,7 @@
|
|||||||
|
|
||||||
gridSchema.columns.unshift({
|
gridSchema.columns.unshift({
|
||||||
name: "pg-backform-edit", label: "", cell : editCell,
|
name: "pg-backform-edit", label: "", cell : editCell,
|
||||||
cell_priority: -2
|
cell_priority: -2, canEditRow: data.canEditRow
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1041,54 +1045,57 @@
|
|||||||
if (!(data.disabled || data.canAdd == false)) {
|
if (!(data.disabled || data.canAdd == false)) {
|
||||||
$dialog.find('button.add').first().click(function(e) {
|
$dialog.find('button.add').first().click(function(e) {
|
||||||
e.preventDefault();
|
e.preventDefault();
|
||||||
|
var canAddRow = _.isFunction(data.canAddRow) ?
|
||||||
|
data.canAddRow.apply(self, [self.model]) : true;
|
||||||
|
if (canAddRow) {
|
||||||
|
// Close any existing expanded row before adding new one.
|
||||||
|
_.each(grid.body.rows, function(row){
|
||||||
|
var editCell = row.$el.find(".subnode-edit-in-process").parent();
|
||||||
|
// Only close row if it's open.
|
||||||
|
if (editCell.length > 0){
|
||||||
|
var event = new Event('click');
|
||||||
|
editCell[0].dispatchEvent(event);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
// Close any existing expanded row before adding new one.
|
var allowMultipleEmptyRows = !!self.field.get('allowMultipleEmptyRows');
|
||||||
_.each(grid.body.rows, function(row){
|
|
||||||
var editCell = row.$el.find(".subnode-edit-in-process").parent();
|
|
||||||
// Only close row if it's open.
|
|
||||||
if (editCell.length > 0){
|
|
||||||
var event = new Event('click');
|
|
||||||
editCell[0].dispatchEvent(event);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
var allowMultipleEmptyRows = !!self.field.get('allowMultipleEmptyRows');
|
// If allowMultipleEmptyRows is not set or is false then don't allow second new empty row.
|
||||||
|
// There should be only one empty row.
|
||||||
// If allowMultipleEmptyRows is not set or is false then don't allow second new empty row.
|
if (!allowMultipleEmptyRows && collection) {
|
||||||
// There should be only one empty row.
|
var isEmpty = false;
|
||||||
if (!allowMultipleEmptyRows && collection) {
|
collection.each(function(model) {
|
||||||
var isEmpty = false;
|
var modelValues = [];
|
||||||
collection.each(function(model) {
|
_.each(model.attributes, function(val, key) {
|
||||||
var modelValues = [];
|
modelValues.push(val);
|
||||||
_.each(model.attributes, function(val, key) {
|
})
|
||||||
modelValues.push(val);
|
if(!_.some(modelValues, _.identity)) {
|
||||||
})
|
isEmpty = true;
|
||||||
if(!_.some(modelValues, _.identity)) {
|
}
|
||||||
isEmpty = true;
|
});
|
||||||
|
if(isEmpty) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
});
|
|
||||||
if(isEmpty) {
|
$(grid.body.$el.find($("tr.new"))).removeClass("new")
|
||||||
|
var m = new (data.model) (null, {
|
||||||
|
silent: true,
|
||||||
|
handler: self.model.handler || self.model,
|
||||||
|
top: self.model.top || self.model,
|
||||||
|
node_info: self.model.node_info,
|
||||||
|
collection: collection
|
||||||
|
});
|
||||||
|
collection.add(m);
|
||||||
|
|
||||||
|
var idx = collection.indexOf(m),
|
||||||
|
newRow = grid.body.rows[idx].$el;
|
||||||
|
|
||||||
|
newRow.addClass("new");
|
||||||
|
$(newRow).pgMakeVisible('backform-tab');
|
||||||
|
|
||||||
return false;
|
return false;
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
$(grid.body.$el.find($("tr.new"))).removeClass("new")
|
|
||||||
var m = new (data.model) (null, {
|
|
||||||
silent: true,
|
|
||||||
handler: self.model.handler || self.model,
|
|
||||||
top: self.model.top || self.model,
|
|
||||||
node_info: self.model.node_info,
|
|
||||||
collection: collection
|
|
||||||
});
|
|
||||||
collection.add(m);
|
|
||||||
|
|
||||||
var idx = collection.indexOf(m),
|
|
||||||
newRow = grid.body.rows[idx].$el;
|
|
||||||
|
|
||||||
newRow.addClass("new");
|
|
||||||
$(newRow).pgMakeVisible('backform-tab');
|
|
||||||
|
|
||||||
return false;
|
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1143,6 +1150,7 @@
|
|||||||
visible: evalF(data.visible, data, this.model),
|
visible: evalF(data.visible, data, this.model),
|
||||||
required: evalF(data.required, data, this.model),
|
required: evalF(data.required, data, this.model),
|
||||||
canAdd: evalF(data.canAdd, data, this.model),
|
canAdd: evalF(data.canAdd, data, this.model),
|
||||||
|
canAddRow: data.canAddRow,
|
||||||
canEdit: evalF(data.canEdit, data, this.model),
|
canEdit: evalF(data.canEdit, data, this.model),
|
||||||
canDelete: evalF(data.canDelete, data, this.model)
|
canDelete: evalF(data.canDelete, data, this.model)
|
||||||
});
|
});
|
||||||
@@ -1200,7 +1208,8 @@
|
|||||||
gridSchema.columns.unshift({
|
gridSchema.columns.unshift({
|
||||||
name: "pg-backform-delete", label: "",
|
name: "pg-backform-delete", label: "",
|
||||||
cell: Backgrid.Extension.DeleteCell,
|
cell: Backgrid.Extension.DeleteCell,
|
||||||
editable: false, cell_priority: -1
|
editable: false, cell_priority: -1,
|
||||||
|
canDeleteRow: data.canDeleteRow
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1214,7 +1223,8 @@
|
|||||||
|
|
||||||
gridSchema.columns.unshift({
|
gridSchema.columns.unshift({
|
||||||
name: "pg-backform-edit", label: "", cell : editCell,
|
name: "pg-backform-edit", label: "", cell : editCell,
|
||||||
cell_priority: -2, editable: canEdit
|
cell_priority: -2, editable: canEdit,
|
||||||
|
canEditRow: data.canEditRow
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1272,25 +1282,29 @@
|
|||||||
|
|
||||||
// Add button callback
|
// Add button callback
|
||||||
$dialog.find('button.add').click(function(e) {
|
$dialog.find('button.add').click(function(e) {
|
||||||
e.preventDefault();
|
e.preventDefault();
|
||||||
// Close any existing expanded row before adding new one.
|
var canAddRow = _.isFunction(data.canAddRow) ?
|
||||||
_.each(grid.body.rows, function(row){
|
data.canAddRow.apply(self, [self.model]) : true;
|
||||||
var editCell = row.$el.find(".subnode-edit-in-process").parent();
|
if (canAddRow) {
|
||||||
// Only close row if it's open.
|
// Close any existing expanded row before adding new one.
|
||||||
if (editCell.length > 0){
|
_.each(grid.body.rows, function(row){
|
||||||
var event = new Event('click');
|
var editCell = row.$el.find(".subnode-edit-in-process").parent();
|
||||||
editCell[0].dispatchEvent(event);
|
// Only close row if it's open.
|
||||||
}
|
if (editCell.length > 0){
|
||||||
});
|
var event = new Event('click');
|
||||||
|
editCell[0].dispatchEvent(event);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
grid.insertRow({});
|
grid.insertRow({});
|
||||||
|
|
||||||
var newRow = $(grid.body.rows[collection.length - 1].$el);
|
var newRow = $(grid.body.rows[collection.length - 1].$el);
|
||||||
newRow.attr("class", "new").click(function(e) {
|
newRow.attr("class", "new").click(function(e) {
|
||||||
$(this).attr("class", "editable");
|
$(this).attr("class", "editable");
|
||||||
});
|
});
|
||||||
$(newRow).pgMakeVisible('backform-tab');
|
$(newRow).pgMakeVisible('backform-tab');
|
||||||
return false;
|
return false;
|
||||||
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
return $dialog;
|
return $dialog;
|
||||||
@@ -1662,8 +1676,11 @@
|
|||||||
subnode: ((_.isString(s.model) && s.model in pgBrowser.Nodes) ?
|
subnode: ((_.isString(s.model) && s.model in pgBrowser.Nodes) ?
|
||||||
pgBrowser.Nodes[s.model].model : s.model),
|
pgBrowser.Nodes[s.model].model : s.model),
|
||||||
canAdd: (disabled ? false : evalASFunc(s.canAdd)),
|
canAdd: (disabled ? false : evalASFunc(s.canAdd)),
|
||||||
|
canAddRow: (disabled ? false : evalASFunc(s.canAddRow)),
|
||||||
canEdit: (disabled ? false : evalASFunc(s.canEdit)),
|
canEdit: (disabled ? false : evalASFunc(s.canEdit)),
|
||||||
canDelete: (disabled ? false : evalASFunc(s.canDelete)),
|
canDelete: (disabled ? false : evalASFunc(s.canDelete)),
|
||||||
|
canEditRow: (disabled ? false : evalASFunc(s.canEditRow)),
|
||||||
|
canDeleteRow: (disabled ? false : evalASFunc(s.canDeleteRow)),
|
||||||
transform: evalASFunc(s.transform),
|
transform: evalASFunc(s.transform),
|
||||||
mode: mode,
|
mode: mode,
|
||||||
control: control,
|
control: control,
|
||||||
|
|||||||
Reference in New Issue
Block a user