diff --git a/frappe/public/js/frappe/form/grid.js b/frappe/public/js/frappe/form/grid.js index 05c70b214d..dd1d622bab 100644 --- a/frappe/public/js/frappe/form/grid.js +++ b/frappe/public/js/frappe/form/grid.js @@ -786,6 +786,7 @@ export default class Grid { doctype: link_field.options, fieldname: link, qty_fieldname: qty, + get_query: link_field.get_query, target: this, txt: "" }); diff --git a/frappe/public/js/frappe/form/link_selector.js b/frappe/public/js/frappe/form/link_selector.js index b8f1b3a842..3ae03dbe91 100644 --- a/frappe/public/js/frappe/form/link_selector.js +++ b/frappe/public/js/frappe/form/link_selector.js @@ -96,10 +96,10 @@ frappe.ui.form.LinkSelector = class LinkSelector { .attr('data-value', v[0]) .click(function () { var value = $(this).attr("data-value"); - var $link = this; if (me.target.is_grid) { // set in grid - me.set_in_grid(value); + // call search after value is set to get latest filtered results + me.set_in_grid(value).then(() => me.search()); } else { if (me.target.doctype) me.target.parse_validate_and_set_in_model(value); @@ -110,8 +110,8 @@ frappe.ui.form.LinkSelector = class LinkSelector { me.dialog.hide(); } return false; - }) - }) + }); + }); } else { $('


' + __("No Results") + '' + (frappe.model.can_create(me.doctype) ? @@ -130,49 +130,56 @@ frappe.ui.form.LinkSelector = class LinkSelector { }, this.dialog.get_primary_btn()); } - set_in_grid (value) { - var me = this, updated = false; - var d = null; - if (this.qty_fieldname) { - frappe.prompt({ - fieldname: "qty", fieldtype: "Float", label: "Qty", - "default": 1, reqd: 1 - }, function (data) { - $.each(me.target.frm.doc[me.target.df.fieldname] || [], function (i, d) { - if (d[me.fieldname] === value) { - frappe.model.set_value(d.doctype, d.name, me.qty_fieldname, data.qty); - frappe.show_alert(__("Added {0} ({1})", [value, d[me.qty_fieldname]])); - updated = true; - return false; + set_in_grid(value) { + return new Promise((resolve) => { + if (this.qty_fieldname) { + frappe.prompt({ + fieldname: "qty", + fieldtype: "Float", + label: "Qty", + default: 1, + reqd: 1 + }, (data) => { + let updated = (this.target.frm.doc[this.target.df.fieldname] || []).some(d => { + if (d[this.fieldname] === value) { + frappe.model.set_value(d.doctype, d.name, this.qty_fieldname, data.qty).then(() => { + frappe.show_alert(__("Added {0} ({1})", [value, d[this.qty_fieldname]])); + resolve(); + }); + return true; + } + }); + if (!updated) { + let d = null; + frappe.run_serially([ + () => d = this.target.add_new_row(), + () => frappe.timeout(0.1), + () => { + let args = {}; + args[this.fieldname] = value; + args[this.qty_fieldname] = data.qty; + return frappe.model.set_value(d.doctype, d.name, args); + }, + () => frappe.show_alert(__("Added {0} ({1})", [value, data.qty])), + () => resolve() + ]); } + }, __("Set Quantity"), __("Set")); + } else if (this.dynamic_link_field) { + let d = this.target.add_new_row(); + frappe.model.set_value(d.doctype, d.name, this.dynamic_link_field, this.dynamic_link_reference); + frappe.model.set_value(d.doctype, d.name, this.fieldname, value).then(() => { + frappe.show_alert(__("{0} {1} added", [this.dynamic_link_reference, value])); + resolve(); }); - if (!updated) { - frappe.run_serially([ - () => { - d = me.target.add_new_row(); - }, - () => frappe.timeout(0.1), - () => { - let args = {}; - args[me.fieldname] = value; - args[me.qty_fieldname] = data.qty; - - return frappe.model.set_value(d.doctype, d.name, args); - }, - () => frappe.show_alert(__("Added {0} ({1})", [value, data.qty])) - ]); - } - }, __("Set Quantity"), __("Set")); - } else if (me.dynamic_link_field) { - var d = me.target.add_new_row(); - frappe.model.set_value(d.doctype, d.name, me.dynamic_link_field, me.dynamic_link_reference); - frappe.model.set_value(d.doctype, d.name, me.fieldname, value); - frappe.show_alert(__("{0} {1} added", [me.dynamic_link_reference, value])); - } else { - var d = me.target.add_new_row(); - frappe.model.set_value(d.doctype, d.name, me.fieldname, value); - frappe.show_alert(__("{0} added", [value])); - } + } else { + let d = this.target.add_new_row(); + frappe.model.set_value(d.doctype, d.name, this.fieldname, value).then(() => { + frappe.show_alert(__("{0} added", [value])); + resolve(); + }); + } + }); } };