From e91af64c1ccc1a1bcef8e97f8c15be477fbcb015 Mon Sep 17 00:00:00 2001 From: Yaro Kasear Date: Fri, 25 Jul 2025 09:46:23 -0500 Subject: [PATCH] Enhance DropdownWidget with search and click handling functionality for improved user interaction --- inventory/static/js/dropdown.js | 39 +++++++ .../fragments/_dropdown_fragment.html | 103 +++++++----------- 2 files changed, 76 insertions(+), 66 deletions(-) diff --git a/inventory/static/js/dropdown.js b/inventory/static/js/dropdown.js index 29882b3..d7211a9 100644 --- a/inventory/static/js/dropdown.js +++ b/inventory/static/js/dropdown.js @@ -41,8 +41,47 @@ const DropdownWidget = (() => { }); }); + + function handleDropdownClick(e, name) { + if (e.target.tagName === "A") { + const input = document.getElementById(name); + const button = document.getElementById(`${name}Button`); + const clearButton = document.getElementById(`${name}ClearButton`); + + input.value = e.target.dataset.invValue; + button.textContent = e.target.textContent; + + if (e.target.dataset.invValue) { + clearButton.classList.remove("d-none"); + button.classList.add("rounded-end-0"); + button.classList.remove("rounded-end"); + } else { + clearButton.classList.add("d-none"); + button.classList.remove("rounded-end-0"); + button.classList.add("rounded-end"); + } + } + }; + + function searchDropdown(name) { + const searchInput = document.getElementById(`search${name}`); + const dropdown = document.getElementById(`menu${name}`); + + const filter = searchInput.value.toLowerCase(); + const items = dropdown.querySelectorAll("a.dropdown-item"); + items.forEach(item => { + if (item.textContent.toLowerCase().includes(filter)) { + item.style.display = ""; + } else { + item.style.display = "none"; + } + }); + }; + return { clear, + handleDropdownClick, + searchDropdown, setButton }; })(); diff --git a/inventory/templates/fragments/_dropdown_fragment.html b/inventory/templates/fragments/_dropdown_fragment.html index 3982370..4de9e96 100644 --- a/inventory/templates/fragments/_dropdown_fragment.html +++ b/inventory/templates/fragments/_dropdown_fragment.html @@ -2,71 +2,42 @@ {% import "fragments/_link_fragment.html" as links %} {% macro render_dropdown(id, list, label, current_item = None, entry_link = None, enabled = True) %} - -