Преглед на файлове

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

version-14
Rushabh Mehta преди 8 години
committed by GitHub
родител
ревизия
0d63eb07ab
променени са 3 файла, в които са добавени 43 реда и са изтрити 43 реда
  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 Целия файл

@@ -71,47 +71,45 @@ frappe.ui.form.ScriptManager = Class.extend({
// trigger all the form level events that
// are bound to this event_name
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) {
let handlers = this.get_handlers(event_name, doctype);


+ 1
- 1
frappe/public/js/frappe/model/model.js Целия файл

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

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

get_doc: function(doctype, name) {


+ 6
- 4
frappe/public/js/legacy/clientscriptAPI.js Целия файл

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

me.refresh_field(f);
return Promise.resolve();
} 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 {
@@ -293,14 +293,16 @@ _f.Frm.prototype.set_value = function(field, value, if_missing) {
}

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



Зареждане…
Отказ
Запис