Bläddra i källkod

[fix] frm.set_value to return promise (#3637)

version-14
Rushabh Mehta 8 år sedan
committed by GitHub
förälder
incheckning
0d63eb07ab
3 ändrade filer med 43 tillägg och 43 borttagningar
  1. +36
    -38
      frappe/public/js/frappe/form/script_manager.js
  2. +1
    -1
      frappe/public/js/frappe/model/model.js
  3. +6
    -4
      frappe/public/js/legacy/clientscriptAPI.js

+ 36
- 38
frappe/public/js/frappe/form/script_manager.js Visa fil

@@ -71,47 +71,45 @@ frappe.ui.form.ScriptManager = Class.extend({
// trigger all the form level events that // trigger all the form level events that
// are bound to this event_name // are bound to this event_name
let me = this; let me = this;
return new Promise(resolve => {
doctype = doctype || this.frm.doctype;
name = name || this.frm.docname;

let tasks = [];
let handlers = this.get_handlers(event_name, doctype);

// helper for child table
this.frm.selected_doc = frappe.get_doc(doctype, name);

let runner = (_function, is_old_style) => {
let _promise = null;
if(is_old_style) {
// old style arguments (doc, cdt, cdn)
_promise = me.frm.cscript[_function](me.frm.doc, doctype, name);
} else {
// new style (frm, doctype, name)
_promise = _function(me.frm, doctype, name);
}

// if the trigger returns a promise, return it,
// or use the default promise frappe.after_ajax
if (_promise && _promise.then) {
return _promise;
} else {
return frappe.after_server_call();
}
};

// make list of functions to be run serially
handlers.new_style.forEach((_function) => {
tasks.push(() => runner(_function, false));
});
doctype = doctype || this.frm.doctype;
name = name || this.frm.docname;


handlers.old_style.forEach((_function) => {
tasks.push(() => runner(_function, true));
});
let tasks = [];
let handlers = this.get_handlers(event_name, doctype);


// run them serially
frappe.run_serially(tasks).then(resolve());
// helper for child table
this.frm.selected_doc = frappe.get_doc(doctype, name);

let runner = (_function, is_old_style) => {
let _promise = null;
if(is_old_style) {
// old style arguments (doc, cdt, cdn)
_promise = me.frm.cscript[_function](me.frm.doc, doctype, name);
} else {
// new style (frm, doctype, name)
_promise = _function(me.frm, doctype, name);
}

// if the trigger returns a promise, return it,
// or use the default promise frappe.after_ajax
if (_promise && _promise.then) {
return _promise;
} else {
return frappe.after_server_call();
}
};

// make list of functions to be run serially
handlers.new_style.forEach((_function) => {
tasks.push(() => runner(_function, false));
}); });

handlers.old_style.forEach((_function) => {
tasks.push(() => runner(_function, true));
});

// run them serially
return frappe.run_serially(tasks);
}, },
has_handlers: function(event_name, doctype) { has_handlers: function(event_name, doctype) {
let handlers = this.get_handlers(event_name, doctype); let handlers = this.get_handlers(event_name, doctype);


+ 1
- 1
frappe/public/js/frappe/model/model.js Visa fil

@@ -402,7 +402,7 @@ $.extend(frappe.model, {
}); });
} }


frappe.run_serially(tasks);
return frappe.run_serially(tasks);
}, },


get_doc: function(doctype, name) { get_doc: function(doctype, name) {


+ 6
- 4
frappe/public/js/legacy/clientscriptAPI.js Visa fil

@@ -281,9 +281,9 @@ _f.Frm.prototype.set_value = function(field, value, if_missing) {
} }


me.refresh_field(f); me.refresh_field(f);
return Promise.resolve();
} else { } else {
frappe.model.set_value(me.doctype, me.doc.name, f, v);
return frappe.model.set_value(me.doctype, me.doc.name, f, v);
} }
} }
} else { } else {
@@ -293,14 +293,16 @@ _f.Frm.prototype.set_value = function(field, value, if_missing) {
} }


if(typeof field=="string") { if(typeof field=="string") {
_set(field, value)
return _set(field, value)
} else if($.isPlainObject(field)) { } else if($.isPlainObject(field)) {
let tasks = [];
for (var f in field) { for (var f in field) {
var v = field[f]; var v = field[f];
if(me.get_field(f)) { if(me.get_field(f)) {
_set(f, v);
tasks.push(() => _set(f, v));
} }
} }
return frappe.run_serially(tasks);
} }
} }




Laddar…
Avbryt
Spara