From 27d853e2ead1eaeb0e87b55408e64307dfef3468 Mon Sep 17 00:00:00 2001 From: Bianca Nenciu Date: Wed, 29 Jul 2020 15:38:15 +0300 Subject: [PATCH] FIX: Reset 'filter' query parameter when clicking on a nav-item (#10299) Usually, this would have been implemented using resetController, but because we do not use link-to component for linking, that method is not called. --- .../discourse/app/components/d-navigation.js | 1 + .../discourse/app/components/navigation-item.js | 11 +++++++++++ .../javascripts/discourse/app/models/nav-item.js | 3 +++ .../javascripts/discourse/app/routes/discovery.js | 4 ++++ 4 files changed, 19 insertions(+) diff --git a/app/assets/javascripts/discourse/app/components/d-navigation.js b/app/assets/javascripts/discourse/app/components/d-navigation.js index 3c4c2d46528..e253003a1dc 100644 --- a/app/assets/javascripts/discourse/app/components/d-navigation.js +++ b/app/assets/javascripts/discourse/app/components/d-navigation.js @@ -79,6 +79,7 @@ export default Component.extend(FilterModeMixin, { return NavItem.buildList(category, { filterType, noSubcategories, + currentRouteQueryParams, persistedQueryParams: params, siteSettings: this.siteSettings }); diff --git a/app/assets/javascripts/discourse/app/components/navigation-item.js b/app/assets/javascripts/discourse/app/components/navigation-item.js index 5a3f172fa72..ea7b41bed78 100644 --- a/app/assets/javascripts/discourse/app/components/navigation-item.js +++ b/app/assets/javascripts/discourse/app/components/navigation-item.js @@ -59,6 +59,17 @@ export default Component.extend(FilterModeMixin, { }); } + // To reset the "filter" sticky param, at least one query param is needed. + // If no query param is present, add an empty one to ensure a ? is + // appended to the URL. + if (content.currentRouteQueryParams) { + if (content.currentRouteQueryParams.filter) { + if (queryParams.length === 0) { + queryParams.push(""); + } + } + } + if (queryParams.length) { href += `?${queryParams.join("&")}`; } diff --git a/app/assets/javascripts/discourse/app/models/nav-item.js b/app/assets/javascripts/discourse/app/models/nav-item.js index beefa360360..3108a9fcb28 100644 --- a/app/assets/javascripts/discourse/app/models/nav-item.js +++ b/app/assets/javascripts/discourse/app/models/nav-item.js @@ -172,6 +172,9 @@ NavItem.reopenClass({ if (opts.tagId) { args.tagId = opts.tagId; } + if (opts.currentRouteQueryParams) { + args.currentRouteQueryParams = opts.currentRouteQueryParams; + } if (opts.persistedQueryParams) { args.persistedQueryParams = opts.persistedQueryParams; } diff --git a/app/assets/javascripts/discourse/app/routes/discovery.js b/app/assets/javascripts/discourse/app/routes/discovery.js index 394c9d53ca0..38059e24470 100644 --- a/app/assets/javascripts/discourse/app/routes/discovery.js +++ b/app/assets/javascripts/discourse/app/routes/discovery.js @@ -8,6 +8,10 @@ import { scrollTop } from "discourse/mixins/scroll-top"; import User from "discourse/models/user"; export default DiscourseRoute.extend(OpenComposer, { + queryParams: { + filter: { refreshModel: true } + }, + redirect() { return this.redirectIfLoginRequired(); },