From 7dcecef4c30fa3db15bfffee409e269001146721 Mon Sep 17 00:00:00 2001 From: Penar Musaraj Date: Mon, 1 Nov 2021 13:48:42 -0400 Subject: [PATCH] FIX: Prevent duplicate search requests to backend (#14786) When sending a full search request to backend (i.e. when hitting Enter), the debouncer needs to be cancelled, otherwise it will get invoked and trigger a second search request to the backend. --- .../javascripts/discourse/app/widgets/search-menu.js | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/app/assets/javascripts/discourse/app/widgets/search-menu.js b/app/assets/javascripts/discourse/app/widgets/search-menu.js index 9977794ddd7..846d2e27a64 100644 --- a/app/assets/javascripts/discourse/app/widgets/search-menu.js +++ b/app/assets/javascripts/discourse/app/widgets/search-menu.js @@ -11,6 +11,7 @@ import { Promise } from "rsvp"; import { search as searchCategoryTag } from "discourse/lib/category-tag-search"; import userSearch from "discourse/lib/user-search"; import { CANCELLED_STATUS } from "discourse/lib/autocomplete"; +import { cancel } from "@ember/runloop"; const CATEGORY_SLUG_REGEXP = /(\#[a-zA-Z0-9\-:]*)$/gi; const USERNAME_REGEXP = /(\@[a-zA-Z0-9\-\_]*)$/gi; @@ -190,6 +191,7 @@ export default createWidget("search-menu", { defaultState(attrs) { return { inTopicContext: attrs.inTopicContext, + _debouncer: null, }; }, @@ -434,11 +436,17 @@ export default createWidget("search-menu", { } searchData.loading = true; + cancel(this.state._debouncer); SearchHelper.perform(this); } else { searchData.loading = false; if (!this.state.inTopicContext) { - discourseDebounce(SearchHelper, SearchHelper.perform, this, 400); + this.state._debouncer = discourseDebounce( + SearchHelper, + SearchHelper.perform, + this, + 400 + ); } } },