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; + } + + +} 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; } - + } 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; } - + } 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