From aab68012d0e5c0e1e273a2f8266d85cd50f735fb Mon Sep 17 00:00:00 2001 From: Sagar Vora <16315650+sagarvora@users.noreply.github.com> Date: Mon, 1 Dec 2025 20:18:04 +0530 Subject: [PATCH] perf: ignore link validation if no fetch and value in awesomplete list --- cypress/integration/control_link.js | 3 +-- frappe/public/js/frappe/form/controls/link.js | 14 +++++++++++++- 2 files changed, 14 insertions(+), 3 deletions(-) diff --git a/cypress/integration/control_link.js b/cypress/integration/control_link.js index b77fce3399..2633a5bca8 100644 --- a/cypress/integration/control_link.js +++ b/cypress/integration/control_link.js @@ -108,7 +108,6 @@ context("Control Link", () => { it("should show open link button", () => { get_dialog_with_link().as("dialog"); - cy.intercept("/api/method/frappe.client.validate_link*").as("validate_link"); cy.intercept("POST", "/api/method/frappe.desk.search.search_link").as("search_link"); cy.get("@todos").then((todos) => { @@ -116,7 +115,7 @@ context("Control Link", () => { cy.get("@input").focus(); cy.wait("@search_link"); cy.get("@input").type(todos[0]).blur(); - cy.wait("@validate_link"); + // not waiting for validate_link because it will not get called cy.get("@input").trigger("mouseover"); cy.get(".frappe-control[data-fieldname=link] .btn-open") .should("be.visible") diff --git a/frappe/public/js/frappe/form/controls/link.js b/frappe/public/js/frappe/form/controls/link.js index e14ed63aa6..650159e207 100644 --- a/frappe/public/js/frappe/form/controls/link.js +++ b/frappe/public/js/frappe/form/controls/link.js @@ -6,6 +6,7 @@ // add_fetches import Awesomplete from "awesomplete"; frappe.ui.form.recent_link_validations = {}; +const SPECIAL_VALUES = ["create_new__link_option", "advanced_search__link_option"]; frappe.ui.form.ControlLink = class ControlLink extends frappe.ui.form.ControlData { static trigger_change_on_input_event = false; @@ -663,9 +664,20 @@ frappe.ui.form.ControlLink = class ControlLink extends frappe.ui.form.ControlDat } const columns_to_fetch = Object.values(this.fetch_map); + const nothing_to_fetch = !columns_to_fetch.length; // if default and no fetch, no need to validate - if (!columns_to_fetch.length && this.df.__default_value === value) { + if (nothing_to_fetch && this.df.__default_value === value) { + return value; + } + + if ( + nothing_to_fetch && + value && + !SPECIAL_VALUES.includes(value) && + this.awesomplete.get_item(value) + ) { + // if value is in the suggestion list, must be correct return value; }