From ac92cc526d20a48e71a54da52b14e20065dc027c Mon Sep 17 00:00:00 2001 From: Martin Brennan Date: Wed, 21 Feb 2024 14:44:09 +1000 Subject: [PATCH] FIX: Admin sidebar was hiding chat/forum toggle button (#25781) We have separated and combined modes for sidebar panels. Separated means the panels show only their own sections, combined means sections from all panels are shown. The admin sidebar only shows its own panels, so it must set the mode to separated; however when we navigate to chat or home we must revert to the initial mode setttings. --- .../javascripts/admin/addon/routes/admin.js | 26 +++++++++++++++++- .../discourse/lib/init-sidebar-state.js | 12 ++++----- .../system/admin_sidebar_navigation_spec.rb | 27 +++++++++++++++++++ ...ec.rb => admin_sidebar_navigation_spec.rb} | 0 4 files changed, 58 insertions(+), 7 deletions(-) rename spec/system/{admin_revamp_sidebar_navigation_spec.rb => admin_sidebar_navigation_spec.rb} (100%) diff --git a/app/assets/javascripts/admin/addon/routes/admin.js b/app/assets/javascripts/admin/addon/routes/admin.js index ae278472ac2..ac00eb31107 100644 --- a/app/assets/javascripts/admin/addon/routes/admin.js +++ b/app/assets/javascripts/admin/addon/routes/admin.js @@ -1,5 +1,11 @@ +import { tracked } from "@glimmer/tracking"; import { inject as service } from "@ember/service"; -import { ADMIN_PANEL, MAIN_PANEL } from "discourse/lib/sidebar/panels"; +import { + ADMIN_PANEL, + COMBINED_MODE, + MAIN_PANEL, + SEPARATED_MODE, +} from "discourse/lib/sidebar/panels"; import DiscourseRoute from "discourse/routes/discourse"; import I18n from "discourse-i18n"; @@ -7,6 +13,7 @@ export default class AdminRoute extends DiscourseRoute { @service sidebarState; @service siteSettings; @service currentUser; + @tracked initialSidebarState; titleToken() { return I18n.t("admin_title"); @@ -14,6 +21,11 @@ export default class AdminRoute extends DiscourseRoute { activate() { if (this.currentUser.use_admin_sidebar) { + this.initialSidebarState = { + mode: this.sidebarState.mode, + displaySwitchPanelButtons: this.sidebarState.displaySwitchPanelButtons, + }; + this.sidebarState.setPanel(ADMIN_PANEL); this.sidebarState.setSeparatedMode(); this.sidebarState.hideSwitchPanelButtons(); @@ -29,6 +41,18 @@ export default class AdminRoute extends DiscourseRoute { if (this.currentUser.use_admin_sidebar) { if (!transition?.to.name.startsWith("admin")) { + if (this.initialSidebarState.mode === SEPARATED_MODE) { + this.sidebarState.setSeparatedMode(); + } else if (this.initialSidebarState.mode === COMBINED_MODE) { + this.sidebarState.setCombinedMode(); + } + + if (this.initialSidebarState.displaySwitchPanelButtons) { + this.sidebarState.showSwitchPanelButtons(); + } else { + this.sidebarState.hideSwitchPanelButtons(); + } + this.sidebarState.setPanel(MAIN_PANEL); } } diff --git a/plugins/chat/assets/javascripts/discourse/lib/init-sidebar-state.js b/plugins/chat/assets/javascripts/discourse/lib/init-sidebar-state.js index 2e8116a857d..c6655c01783 100644 --- a/plugins/chat/assets/javascripts/discourse/lib/init-sidebar-state.js +++ b/plugins/chat/assets/javascripts/discourse/lib/init-sidebar-state.js @@ -4,12 +4,6 @@ import { getUserChatSeparateSidebarMode } from "discourse/plugins/chat/discourse export const CHAT_PANEL = "chat"; export function initSidebarState(api, user) { - if (api.getSidebarPanel()?.key === ADMIN_PANEL) { - return; - } - - api.setSidebarPanel(MAIN_PANEL); - const chatSeparateSidebarMode = getUserChatSeparateSidebarMode(user); if (chatSeparateSidebarMode.fullscreen) { api.setCombinedSidebarMode(); @@ -20,4 +14,10 @@ export function initSidebarState(api, user) { api.setCombinedSidebarMode(); api.hideSidebarSwitchPanelButtons(); } + + if (api.getSidebarPanel()?.key === ADMIN_PANEL) { + return; + } + + api.setSidebarPanel(MAIN_PANEL); } diff --git a/plugins/chat/spec/system/admin_sidebar_navigation_spec.rb b/plugins/chat/spec/system/admin_sidebar_navigation_spec.rb index 4cbe806a2f7..ccdccf1d752 100644 --- a/plugins/chat/spec/system/admin_sidebar_navigation_spec.rb +++ b/plugins/chat/spec/system/admin_sidebar_navigation_spec.rb @@ -22,4 +22,31 @@ describe "Admin Revamp | Sidebar Navigation | Plugin Links", type: :system do find(".header-sidebar-toggle").click expect(sidebar).to have_section_link("Chat", href: "/admin/plugins/chat", count: 1) end + + describe "admin sidebar respects separated and combined sidebar modes" do + it "reverts to always (separated) mode after entering and leaving admin section" do + admin.user_option.update!( + chat_separate_sidebar_mode: UserOption.chat_separate_sidebar_modes[:always], + ) + visit("/") + expect(sidebar).to have_switch_button("chat") + sidebar.click_link_in_section("community", "admin") + expect(sidebar).to have_no_switch_button("chat") + find("#site-logo").click + expect(sidebar).to have_switch_button("chat") + end + + it "reverts to the never (combined) mode after entering and leaving admin section" do + admin.user_option.update!( + chat_separate_sidebar_mode: UserOption.chat_separate_sidebar_modes[:never], + ) + visit("/") + expect(sidebar).to have_section("chat-channels") + expect(sidebar).to have_no_switch_button("chat") + sidebar.click_link_in_section("community", "admin") + expect(sidebar).to have_no_section("chat-channels") + find("#site-logo").click + expect(sidebar).to have_section("chat-channels") + end + end end diff --git a/spec/system/admin_revamp_sidebar_navigation_spec.rb b/spec/system/admin_sidebar_navigation_spec.rb similarity index 100% rename from spec/system/admin_revamp_sidebar_navigation_spec.rb rename to spec/system/admin_sidebar_navigation_spec.rb