BUG: issue fix for dropdown reposition errror

This commit is contained in:
Ivymaster
2026-07-10 11:50:07 +02:00
parent f3b617d339
commit 86c06e4756
2 changed files with 25 additions and 6 deletions
@@ -64,8 +64,6 @@ export function buildTagHeaderFilterExpression(selectedTagOptions) {
} }
export function buildTagOptionsFromRows(rows, field = "tags") { export function buildTagOptionsFromRows(rows, field = "tags") {
let options = [];
let parsedTags = [ let parsedTags = [
...new Map( ...new Map(
getRawTagValuesFromRows(rows, field) getRawTagValuesFromRows(rows, field)
@@ -82,7 +80,7 @@ export function buildTagOptionsFromRows(rows, field = "tags") {
done: tag.done, done: tag.done,
}; };
}) })
.map((obj) => [JSON.stringify(obj), obj]), .map((obj) => [obj.value, obj]),
).values(), ).values(),
]; ];
if (!Array.isArray(parsedTags)) return; if (!Array.isArray(parsedTags)) return;
@@ -184,6 +182,7 @@ export function customTagFilter(cell, onRendered, success, cancel, params) {
input.style.width = "100%"; input.style.width = "100%";
input.type = "text"; input.type = "text";
let dropdownMenu = null; let dropdownMenu = null;
let suppressScrollCloseUntil = 0;
Object.defineProperty(container, "value", { Object.defineProperty(container, "value", {
get: () => input.value, get: () => input.value,
@@ -221,11 +220,27 @@ export function customTagFilter(cell, onRendered, success, cancel, params) {
activeTagDropdownCleanup = null; activeTagDropdownCleanup = null;
} }
window.removeEventListener("scroll", positionDropdown, true); window.removeEventListener("scroll", handleScroll, true);
window.removeEventListener("resize", positionDropdown); window.removeEventListener("resize", positionDropdown);
document.removeEventListener("mousedown", handleOutsideClick, true); document.removeEventListener("mousedown", handleOutsideClick, true);
}; };
const suppressScrollClose = () => {
suppressScrollCloseUntil = Date.now() + 300;
};
const handleScroll = (event) => {
const target = event.target;
const isDropdownScroll =
target instanceof Node && dropdownMenu?.contains(target);
if (isDropdownScroll || Date.now() < suppressScrollCloseUntil) {
return;
}
closeDropdown();
};
const handleOutsideClick = (event) => { const handleOutsideClick = (event) => {
if ( if (
dropdownMenu?.contains(event.target) || dropdownMenu?.contains(event.target) ||
@@ -265,13 +280,14 @@ export function customTagFilter(cell, onRendered, success, cancel, params) {
dropdownMenu.addEventListener("mousedown", (event) => { dropdownMenu.addEventListener("mousedown", (event) => {
event.stopPropagation(); event.stopPropagation();
}); });
dropdownMenu.addEventListener("click", suppressScrollClose, true);
document.body.appendChild(dropdownMenu); document.body.appendChild(dropdownMenu);
activeTagDropdownCleanup = closeDropdown; activeTagDropdownCleanup = closeDropdown;
positionDropdown(); positionDropdown();
window.addEventListener("scroll", positionDropdown, true); window.addEventListener("scroll", handleScroll, true);
window.addEventListener("resize", positionDropdown); window.addEventListener("resize", positionDropdown);
document.addEventListener("mousedown", handleOutsideClick, true); document.addEventListener("mousedown", handleOutsideClick, true);
}; };
+3
View File
@@ -2,3 +2,6 @@ node_modules
.env .env
.env.* .env.*
!.env.example !.env.example
/cypress/videos
/cypress/screenshots
/results