diff --git a/frappe/__init__.py b/frappe/__init__.py index 3b99b44b9e..70d9b692a7 100644 --- a/frappe/__init__.py +++ b/frappe/__init__.py @@ -14,7 +14,7 @@ import os, sys, importlib, inspect, json from .exceptions import * from .utils.jinja import get_jenv, get_template, render_template, get_email_from_template -__version__ = '8.6.4' +__version__ = '8.6.5' __title__ = "Frappe Framework" local = Local() diff --git a/frappe/custom/doctype/customize_form/test_customize_form.js b/frappe/custom/doctype/customize_form/test_customize_form.js new file mode 100644 index 0000000000..144d11a9ae --- /dev/null +++ b/frappe/custom/doctype/customize_form/test_customize_form.js @@ -0,0 +1,31 @@ +// try and delete a standard row, it should fail + +QUnit.module('Customize Form'); + +QUnit.test("test customize form", function(assert) { + assert.expect(2); + let done = assert.async(); + frappe.run_serially([ + () => frappe.set_route('Form', 'Customize Form'), + () => cur_frm.set_value('doc_type', 'ToDo'), + + () => frappe.timeout(2), + + () => assert.equal(cur_frm.doc.fields[1].fieldname, 'status'), + + // open "status" row + () => cur_frm.fields_dict.fields.grid.grid_rows[1].toggle_view(), + () => frappe.timeout(0.5), + + // try deleting it + () => $('.grid-delete-row:visible').click(), + + () => frappe.timeout(0.5), + () => frappe.hide_msgprint(), + () => frappe.timeout(0.5), + + // status still exists + () => assert.equal(cur_frm.doc.fields[1].fieldname, 'status'), + () => done() + ]); +}); diff --git a/frappe/public/js/frappe/form/grid_row.js b/frappe/public/js/frappe/form/grid_row.js index 3ff9f85198..9326c03da7 100644 --- a/frappe/public/js/frappe/form/grid_row.js +++ b/frappe/public/js/frappe/form/grid_row.js @@ -68,15 +68,22 @@ frappe.ui.form.GridRow = Class.extend({ this.hide_form(); } - this.frm.script_manager.trigger("before_" + this.grid.df.fieldname + "_remove", - this.doc.doctype, this.doc.name); - - //this.wrapper.toggle(false); - frappe.model.clear_doc(this.doc.doctype, this.doc.name); - - this.frm.script_manager.trigger(this.grid.df.fieldname + "_remove", - this.doc.doctype, this.doc.name); - this.frm.dirty(); + frappe.run_serially([ + () => { + return this.frm.script_manager.trigger("before_" + this.grid.df.fieldname + "_remove", + this.doc.doctype, this.doc.name); + }, + () => { + frappe.model.clear_doc(this.doc.doctype, this.doc.name); + + this.frm.script_manager.trigger(this.grid.df.fieldname + "_remove", + this.doc.doctype, this.doc.name); + this.frm.dirty(); + } + ]).catch((e) => { + // aborted + console.trace(e); // eslint-disable-line + }); } else { this.grid.df.data = this.grid.df.data.filter(function(d) { return d.name !== me.doc.name; diff --git a/frappe/public/js/legacy/form.js b/frappe/public/js/legacy/form.js index b9f0d1538d..b431446fd3 100644 --- a/frappe/public/js/legacy/form.js +++ b/frappe/public/js/legacy/form.js @@ -720,6 +720,14 @@ _f.Frm.prototype._save = function(save_action, callback, btn, on_error, resolve) resolve(); }; + var fail = () => { + btn && $(btn).prop("disabled", false); + if(on_error) { + on_error(); + } + resolve(); + }; + if(save_action != "Update") { // validate frappe.validated = true; @@ -728,17 +736,13 @@ _f.Frm.prototype._save = function(save_action, callback, btn, on_error, resolve) () => this.script_manager.trigger("before_save"), () => { if(!frappe.validated) { - btn && $(btn).prop("disabled", false); - if(on_error) { - on_error(); - } - resolve(); + fail(); return; } frappe.ui.form.save(me, save_action, after_save, btn); } - ]); + ]).catch(fail); } else { frappe.ui.form.save(me, save_action, after_save, btn); } diff --git a/frappe/tests/ui/tests.txt b/frappe/tests/ui/tests.txt index b94f64aa63..7c3c630da6 100644 --- a/frappe/tests/ui/tests.txt +++ b/frappe/tests/ui/tests.txt @@ -3,4 +3,5 @@ frappe/tests/ui/test_list/test_list_filter.js frappe/tests/ui/test_list/test_list_paging.js frappe/tests/ui/test_module_view.js frappe/tests/ui/test_calendar_view.js -frappe/tests/ui/test_linked_with.js \ No newline at end of file +frappe/tests/ui/test_linked_with.js +frappe/custom/doctype/customize_form/test_customize_form.js \ No newline at end of file