From b1578d81e2ef83030801ba82e4c2e5b52cd1bf3b Mon Sep 17 00:00:00 2001 From: Ejaaz Khan Date: Sat, 11 Oct 2025 13:54:46 +0530 Subject: [PATCH] fix: link field scrolling issue in grid --- frappe/public/js/frappe/form/grid_row.js | 43 +++++++++++++++++------- frappe/public/scss/common/grid.scss | 8 ----- 2 files changed, 31 insertions(+), 20 deletions(-) diff --git a/frappe/public/js/frappe/form/grid_row.js b/frappe/public/js/frappe/form/grid_row.js index 34c8671fef..03b760f2d3 100644 --- a/frappe/public/js/frappe/form/grid_row.js +++ b/frappe/public/js/frappe/form/grid_row.js @@ -1037,6 +1037,8 @@ export default class GridRow { input_field.trigger("focus"); } + let is_focused = false; + var $col = $( `
` ) @@ -1044,22 +1046,39 @@ export default class GridRow { .attr("data-fieldtype", df.fieldtype) .data("df", df) .appendTo(this.row) - .on("click", function (event) { + .on("focusin", function (event) { + if (is_focused) return; + is_focused = true; if (df.fieldtype === "Link" || df.fieldtype === "Dynamic Link") { - frappe.utils.sleep(500).then(() => { - let element_position = event.target.getBoundingClientRect(); - $(this) - .find(".awesomplete > ul:first-of-type") - .css( - "top", - `${ - element_position.bottom - ? element_position.bottom - : event.clientY + 20 - }px` + frappe.utils.sleep(300).then(() => { + let $dropdown = $(this).find(".awesomplete > ul:first-of-type"); + let $grid_field = $dropdown.closest(".grid-field"); + + if ($grid_field.length) { + let $wrapper = $grid_field.find("div.awesomplete"); + $wrapper = $( + `
` ); + $grid_field.append($wrapper); + $wrapper.append($dropdown); + + let element_position = event.target.getBoundingClientRect(); + + let left_difference = + element_position.left - $grid_field.offset().left; + let top_difference = + element_position.top - $grid_field.offset().top + 30; + $wrapper.css({ + position: "absolute", + top: `${top_difference + 10}px`, + left: `${left_difference}px`, + width: "250px", + }); + } }); } + }) + .on("click", function (event) { if (frappe.ui.form.editable_row !== me) { var out = me.toggle_editable_row(); } diff --git a/frappe/public/scss/common/grid.scss b/frappe/public/scss/common/grid.scss index 63a07df18e..090c468c09 100644 --- a/frappe/public/scss/common/grid.scss +++ b/frappe/public/scss/common/grid.scss @@ -384,14 +384,6 @@ height: 40px; } } - .grid-row:not(.grid-row-open) { - .awesomplete > ul { - position: fixed !important; - left: auto !important; - top: auto; - width: 250px !important; - } - } .grid-static-col { background-color: var(--fg-color); &.sticky-grid-col {