diff --git a/cypress/integration/control_link.js b/cypress/integration/control_link.js index 44b78e731b..240515be45 100644 --- a/cypress/integration/control_link.js +++ b/cypress/integration/control_link.js @@ -310,4 +310,30 @@ context("Control Link", () => { expect(label).to.eq("Non-Conforming"); }); }); + + it("show custom link option", () => { + cy.window() + .its("frappe") + .then((frappe) => { + frappe.ui.form.ControlLink.link_options = (link) => { + return [ + { + html: + "" + + " " + + "Custom Link Option" + + "", + label: "Custom Link Option", + value: "custom__link_option", + action: () => {}, + }, + ]; + }; + + get_dialog_with_link().as("dialog"); + cy.get(".frappe-control[data-fieldname=link] input").focus().as("input"); + cy.get("@input").type("custom", { delay: 100 }); + cy.get(".custom-link-option").should("be.visible"); + }); + }); }); diff --git a/frappe/public/js/frappe/form/controls/link.js b/frappe/public/js/frappe/form/controls/link.js index 5b1bb4faeb..e34fd01008 100644 --- a/frappe/public/js/frappe/form/controls/link.js +++ b/frappe/public/js/frappe/form/controls/link.js @@ -288,8 +288,17 @@ frappe.ui.form.ControlLink = class ControlLink extends frappe.ui.form.ControlDat action: me.new_doc, }); } - // advanced search + //custom link actions + let custom__link_options = + frappe.ui.form.ControlLink.link_options && + frappe.ui.form.ControlLink.link_options(me); + + if (custom__link_options) { + r.results = r.results.concat(custom__link_options); + } + + // advanced search if (locals && locals["DocType"]) { // not applicable in web forms r.results.push({