diff --git a/app/assets/javascripts/discourse/app/components/discovery/filter-navigation.gjs b/app/assets/javascripts/discourse/app/components/discovery/filter-navigation.gjs
index 57dc4f1c636..5919c73728e 100644
--- a/app/assets/javascripts/discourse/app/components/discovery/filter-navigation.gjs
+++ b/app/assets/javascripts/discourse/app/components/discovery/filter-navigation.gjs
@@ -2,6 +2,7 @@ import Component from "@glimmer/component";
import { service } from "@ember/service";
import BulkSelectToggle from "discourse/components/bulk-select-toggle";
import FilterNavigationMenu from "discourse/components/discovery/filter-navigation-menu";
+import PluginOutlet from "discourse/components/plugin-outlet";
import bodyClass from "discourse/helpers/body-class";
import { bind } from "discourse/lib/decorators";
import { resettableTracked } from "discourse/lib/tracked-tools";
@@ -47,6 +48,8 @@ export default class DiscoveryFilterNavigation extends Component {
@initialInputValue={{this.filterQueryString}}
@tips={{@tips}}
/>
+
+
diff --git a/app/assets/stylesheets/common/components/topic-query-filter.scss b/app/assets/stylesheets/common/components/topic-query-filter.scss
index ebd3abc9f19..71222913e92 100644
--- a/app/assets/stylesheets/common/components/topic-query-filter.scss
+++ b/app/assets/stylesheets/common/components/topic-query-filter.scss
@@ -4,6 +4,7 @@
margin-right: auto;
margin-bottom: var(--nav-space);
width: 100%;
+ gap: var(--space-2);
&__label {
background-color: var(--primary-low);
diff --git a/plugins/discourse-ai/assets/javascripts/discourse/connectors/after-filter-navigation-menu/filter-gist-toggle.gjs b/plugins/discourse-ai/assets/javascripts/discourse/connectors/after-filter-navigation-menu/filter-gist-toggle.gjs
new file mode 100644
index 00000000000..d46bcfe2117
--- /dev/null
+++ b/plugins/discourse-ai/assets/javascripts/discourse/connectors/after-filter-navigation-menu/filter-gist-toggle.gjs
@@ -0,0 +1,17 @@
+import Component from "@glimmer/component";
+import { service } from "@ember/service";
+import AiGistToggle from "../../components/ai-gist-toggle";
+
+export default class FilterGistToggle extends Component {
+ @service topicThumbnails; // avoid Topic Thumbnails theme component
+
+ get shouldShow() {
+ return !this.topicThumbnails?.enabledForRoute;
+ }
+
+
+ {{#if this.shouldShow}}
+
+ {{/if}}
+
+}
diff --git a/plugins/discourse-ai/assets/javascripts/discourse/connectors/before-create-topic-button/topic-list-gist-toggle.gjs b/plugins/discourse-ai/assets/javascripts/discourse/connectors/before-create-topic-button/topic-list-gist-toggle.gjs
index 5358ec8ce87..7f83dae4e15 100644
--- a/plugins/discourse-ai/assets/javascripts/discourse/connectors/before-create-topic-button/topic-list-gist-toggle.gjs
+++ b/plugins/discourse-ai/assets/javascripts/discourse/connectors/before-create-topic-button/topic-list-gist-toggle.gjs
@@ -9,5 +9,9 @@ export default class AiTopicGist extends Component {
return !this.topicThumbnails?.enabledForRoute;
}
-
+
+ {{#if this.shouldShow}}
+
+ {{/if}}
+
}
diff --git a/plugins/discourse-ai/assets/javascripts/discourse/connectors/user-messages-controls-bottom/pm-list-gist-toggle.gjs b/plugins/discourse-ai/assets/javascripts/discourse/connectors/user-messages-controls-bottom/pm-list-gist-toggle.gjs
index 5358ec8ce87..7f83dae4e15 100644
--- a/plugins/discourse-ai/assets/javascripts/discourse/connectors/user-messages-controls-bottom/pm-list-gist-toggle.gjs
+++ b/plugins/discourse-ai/assets/javascripts/discourse/connectors/user-messages-controls-bottom/pm-list-gist-toggle.gjs
@@ -9,5 +9,9 @@ export default class AiTopicGist extends Component {
return !this.topicThumbnails?.enabledForRoute;
}
-
+
+ {{#if this.shouldShow}}
+
+ {{/if}}
+
}
diff --git a/plugins/discourse-ai/assets/javascripts/discourse/initializers/ai-gist-topic-list-class.js b/plugins/discourse-ai/assets/javascripts/discourse/initializers/ai-gist-topic-list-class.js
index c42f2254682..5e983e93945 100644
--- a/plugins/discourse-ai/assets/javascripts/discourse/initializers/ai-gist-topic-list-class.js
+++ b/plugins/discourse-ai/assets/javascripts/discourse/initializers/ai-gist-topic-list-class.js
@@ -7,7 +7,7 @@ export default apiInitializer((api) => {
"topic-list-item-class",
({ value, context }) => {
const shouldShow =
- gistService.preference === "table-ai" && gistService.shouldShow;
+ gistService.currentPreference === "table-ai" && gistService.showToggle;
if (context.topic.get("ai_topic_gist") && shouldShow) {
value.push("excerpt-expanded");
diff --git a/plugins/discourse-ai/assets/javascripts/discourse/services/gists.js b/plugins/discourse-ai/assets/javascripts/discourse/services/gists.js
index c1e8c9c9f88..b00037a4c0f 100644
--- a/plugins/discourse-ai/assets/javascripts/discourse/services/gists.js
+++ b/plugins/discourse-ai/assets/javascripts/discourse/services/gists.js
@@ -17,21 +17,18 @@ export default class Gists extends Service {
return this.router.currentRoute.attributes;
}
- get publicTopics() {
- return this.routerAttributes?.list?.topics;
- }
-
- get pmTopics() {
- return this.routerAttributes?.topics;
- }
-
get isPm() {
- return !this.publicTopics && this.pmTopics;
+ const routeName = this.router.currentRouteName;
+ return routeName?.startsWith("userPrivateMessages");
+ }
+
+ get topics() {
+ // covers discovery, filter, and pm routes
+ return this.routerAttributes?.list?.topics ?? this.routerAttributes?.topics;
}
get showToggle() {
- const topicList = this.publicTopics ?? this.pmTopics;
- return topicList?.some((topic) => topic.ai_topic_gist);
+ return this.topics?.some((topic) => topic.ai_topic_gist);
}
get currentPreference() {
diff --git a/plugins/discourse-ai/spec/system/summarization/gists_toggle_spec.rb b/plugins/discourse-ai/spec/system/summarization/gists_toggle_spec.rb
index 7bfda00befc..a45dfd845f8 100644
--- a/plugins/discourse-ai/spec/system/summarization/gists_toggle_spec.rb
+++ b/plugins/discourse-ai/spec/system/summarization/gists_toggle_spec.rb
@@ -35,6 +35,32 @@ describe "Gists Toggle Functionality", type: :system do
expect(page).to have_css("body.topic-list-layout-table-ai")
end
+
+ it "shows toggle and gists on filter route" do
+ visit("/filter?q=status:open")
+
+ expect(find(".topic-list-layout-trigger")).to be_present
+
+ find(".topic-list-layout-trigger").click
+ find(
+ ".dropdown-menu__item .d-button-label",
+ text: I18n.t("js.discourse_ai.summarization.topic_list_layout.button.expanded"),
+ ).click
+
+ expect(page).to have_css("body.topic-list-layout-table-ai")
+ end
+
+ it "filter route shares toggle state with discovery routes" do
+ visit("/latest")
+ find(".topic-list-layout-trigger").click
+ find(
+ ".dropdown-menu__item .d-button-label",
+ text: I18n.t("js.discourse_ai.summarization.topic_list_layout.button.expanded"),
+ ).click
+
+ visit("/filter?q=status:open")
+ expect(page).to have_css("body.topic-list-layout-table-ai")
+ end
end
context "when viewing PM topic lists" do