From 4309239d6cb7139e26a84e5733674ac6766f47d8 Mon Sep 17 00:00:00 2001 From: Hussain Nagaria Date: Wed, 5 May 2021 16:04:22 +0530 Subject: [PATCH] feat: Show Recent Searches --- erpnext/templates/pages/product_search.py | 2 +- erpnext/www/all-products/search.html | 5 +- erpnext/www/all-products/search.js | 65 +++++++++++++++++++++++ 3 files changed, 70 insertions(+), 2 deletions(-) diff --git a/erpnext/templates/pages/product_search.py b/erpnext/templates/pages/product_search.py index c6f04dff09..732d8f96d4 100644 --- a/erpnext/templates/pages/product_search.py +++ b/erpnext/templates/pages/product_search.py @@ -71,7 +71,7 @@ def search(query): ac = AutoCompleter(make_key(WEBSITE_ITEM_NAME_AUTOCOMPLETE), conn=red) client = Client(make_key(WEBSITE_ITEM_INDEX), conn=red) - suggestions = ac.get_suggestions(query, num=10) + suggestions = ac.get_suggestions(query, num=10, fuzzy=len(query) > 4) # Build a query query_string = query diff --git a/erpnext/www/all-products/search.html b/erpnext/www/all-products/search.html index a86a9c0e13..735822d765 100644 --- a/erpnext/www/all-products/search.html +++ b/erpnext/www/all-products/search.html @@ -14,10 +14,13 @@
- +
+ +
+
diff --git a/erpnext/www/all-products/search.js b/erpnext/www/all-products/search.js index c97e48b8db..cb3f9afe9b 100644 --- a/erpnext/www/all-products/search.js +++ b/erpnext/www/all-products/search.js @@ -1,9 +1,48 @@ let loading = false; +const MAX_RECENT_SEARCHES = 4; + const searchBox = document.getElementById("search-box"); +const searchButton = document.getElementById("search-button"); const results = document.getElementById("results"); const categoryList = document.getElementById("category-suggestions"); const showBrandLine = document.getElementById("show-brand-line"); +const recentSearchArea = document.getElementById("recent-search-chips"); + +function getRecentSearches() { + return JSON.parse(localStorage.getItem("recent_searches") || "[]"); +} + +function attachEventListenersToChips() { + const chips = document.getElementsByClassName("recent-chip"); + + for (let chip of chips) { + chip.addEventListener("click", () => { + searchBox.value = chip.innerText; + + // Start search with `recent query` + const event = new Event("input"); + searchBox.dispatchEvent(event); + searchBox.focus(); + }); + } +} + +function populateRecentSearches() { + let recents = getRecentSearches(); + + if (!recents.length) { + return; + } + + html = "Recent Searches: "; + for (let query of recents) { + html += ``; + } + + recentSearchArea.innerHTML = html; + attachEventListenersToChips(); +} function populateResults(data) { html = "" @@ -64,3 +103,29 @@ searchBox.addEventListener("input", (e) => { } }); +searchButton.addEventListener("click", (e) => { + let query = searchBox.value; + if (!query) { + return; + } + + let recents = getRecentSearches(); + + if (recents.length >= MAX_RECENT_SEARCHES) { + // Remove the `First` query + recents.splice(0, 1); + } + + if (recents.indexOf(query) >= 0) { + return; + } + + recents.push(query); + + localStorage.setItem("recent_searches", JSON.stringify(recents)); + + // Refresh recent searches + populateRecentSearches(); +}); + +populateRecentSearches(); \ No newline at end of file