From 9d4cec10aa44bc22356aa94d356468962f993139 Mon Sep 17 00:00:00 2001 From: Gursheen Anand Date: Tue, 17 Feb 2026 16:34:00 +0530 Subject: [PATCH 1/3] fix: handle autocomplete field dropdown similar to link in editable grid --- frappe/public/js/frappe/form/grid_row.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/frappe/public/js/frappe/form/grid_row.js b/frappe/public/js/frappe/form/grid_row.js index 14b7a26d50..42a06c5a41 100644 --- a/frappe/public/js/frappe/form/grid_row.js +++ b/frappe/public/js/frappe/form/grid_row.js @@ -1061,7 +1061,7 @@ export default class GridRow { .on("focusin", function (event) { if (is_focused) return; is_focused = true; - if (df.fieldtype === "Link" || df.fieldtype === "Dynamic Link") { + if (["Link", "Dynamic Link", "Autocomplete"].includes(df.fieldtype)) { frappe.utils.sleep(300).then(() => { let $dropdown = $(this).find(".awesomplete > ul:first-of-type"); let $grid_field = $dropdown.closest(".grid-field"); From e83a80bd6c4ebe9bf5e81ffa4c8acfee933c8d47 Mon Sep 17 00:00:00 2001 From: Gursheen Anand Date: Tue, 17 Feb 2026 16:38:40 +0530 Subject: [PATCH 2/3] fix: take available width for dropdowns in grid and limit minWidth --- frappe/public/js/frappe/form/grid_row.js | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/frappe/public/js/frappe/form/grid_row.js b/frappe/public/js/frappe/form/grid_row.js index 42a06c5a41..8db3a69590 100644 --- a/frappe/public/js/frappe/form/grid_row.js +++ b/frappe/public/js/frappe/form/grid_row.js @@ -1084,7 +1084,8 @@ export default class GridRow { position: "absolute", top: `${top_difference + 10}px`, left: `${left_difference}px`, - width: "250px", + minWidth: "250px", + width: `${element_position.width}px`, }); } }); From 8bb725d90f136b7ce55bc5cb5411eb9ea033aa2d Mon Sep 17 00:00:00 2001 From: Gursheen Anand Date: Tue, 17 Feb 2026 21:20:42 +0530 Subject: [PATCH 3/3] fix: remove sleep delay --- frappe/public/js/frappe/form/grid_row.js | 42 ++++++++++-------------- 1 file changed, 18 insertions(+), 24 deletions(-) diff --git a/frappe/public/js/frappe/form/grid_row.js b/frappe/public/js/frappe/form/grid_row.js index 8db3a69590..3e5b786c33 100644 --- a/frappe/public/js/frappe/form/grid_row.js +++ b/frappe/public/js/frappe/form/grid_row.js @@ -1062,33 +1062,27 @@ export default class GridRow { if (is_focused) return; is_focused = true; if (["Link", "Dynamic Link", "Autocomplete"].includes(df.fieldtype)) { - frappe.utils.sleep(300).then(() => { - let $dropdown = $(this).find(".awesomplete > ul:first-of-type"); - let $grid_field = $dropdown.closest(".grid-field"); + 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); + 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 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`, - minWidth: "250px", - width: `${element_position.width}px`, - }); - } - }); + 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`, + minWidth: "250px", + width: `${element_position.width}px`, + }); + } } }) .on("click", function (event) {