FIX: More header dropdown admin sidebar fixes (#27241)

Followup 73c6bb25937a5b6a4872f30126597e76ec6906e6

The admin sidebar was also disappearing on another
child admin route (in this case the docker_manager
plugin update page). Instead of relying on the route
name which is flaky, we can set a boolean when the
sidebar is forced in the root admin route, then
turn it off when leaving admin.
This commit is contained in:
Martin Brennan 2024-05-30 12:55:25 +10:00 committed by GitHub
parent 078d363510
commit 979eca99d5
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
5 changed files with 23 additions and 10 deletions

View File

@ -4,6 +4,7 @@ import DiscourseURL from "discourse/lib/url";
import DiscourseRoute from "discourse/routes/discourse"; import DiscourseRoute from "discourse/routes/discourse";
import I18n from "discourse-i18n"; import I18n from "discourse-i18n";
// DEPRECATED: (martin) This route is deprecated and will be removed in the near future.
export default class AdminRoute extends DiscourseRoute { export default class AdminRoute extends DiscourseRoute {
@service siteSettings; @service siteSettings;
@service currentUser; @service currentUser;

View File

@ -1,6 +1,5 @@
import { tracked } from "@glimmer/tracking"; import { tracked } from "@glimmer/tracking";
import { service } from "@ember/service"; import { service } from "@ember/service";
import { MAIN_PANEL } from "discourse/lib/sidebar/panels";
import DiscourseRoute from "discourse/routes/discourse"; import DiscourseRoute from "discourse/routes/discourse";
import I18n from "discourse-i18n"; import I18n from "discourse-i18n";
@ -31,7 +30,7 @@ export default class AdminRoute extends DiscourseRoute {
if (this.adminSidebarStateManager.currentUserUsingAdminSidebar) { if (this.adminSidebarStateManager.currentUserUsingAdminSidebar) {
if (!transition?.to.name.startsWith("admin")) { if (!transition?.to.name.startsWith("admin")) {
this.sidebarState.setPanel(MAIN_PANEL); this.adminSidebarStateManager.stopForcingAdminSidebar();
} }
} }
} }

View File

@ -1,10 +1,14 @@
import { alias } from "@ember/object/computed";
import Service, { service } from "@ember/service"; import Service, { service } from "@ember/service";
import KeyValueStore from "discourse/lib/key-value-store"; import KeyValueStore from "discourse/lib/key-value-store";
import { ADMIN_PANEL } from "discourse/lib/sidebar/panels"; import { ADMIN_PANEL, MAIN_PANEL } from "discourse/lib/sidebar/panels";
export default class AdminSidebarStateManager extends Service { export default class AdminSidebarStateManager extends Service {
@service sidebarState; @service sidebarState;
@service currentUser; @service currentUser;
@alias("sidebarState.currentUserUsingAdminSidebar")
currentUserUsingAdminSidebar;
@alias("sidebarState.isForcingAdminSidebar") isForcingAdminSidebar;
keywords = {}; keywords = {};
@ -37,10 +41,6 @@ export default class AdminSidebarStateManager extends Service {
this.store.setObject({ key: "navConfig", value }); this.store.setObject({ key: "navConfig", value });
} }
get currentUserUsingAdminSidebar() {
return this.currentUser?.use_admin_sidebar;
}
maybeForceAdminSidebar(opts = {}) { maybeForceAdminSidebar(opts = {}) {
opts.onlyIfAlreadyActive ??= true; opts.onlyIfAlreadyActive ??= true;
@ -48,6 +48,7 @@ export default class AdminSidebarStateManager extends Service {
this.sidebarState.currentPanel?.key === ADMIN_PANEL; this.sidebarState.currentPanel?.key === ADMIN_PANEL;
if (!this.currentUserUsingAdminSidebar) { if (!this.currentUserUsingAdminSidebar) {
this.isForcingAdminSidebar = false;
return false; return false;
} }
@ -58,14 +59,21 @@ export default class AdminSidebarStateManager extends Service {
if (isAdminSidebarActive) { if (isAdminSidebarActive) {
return this.#forceAdminSidebar(); return this.#forceAdminSidebar();
} else { } else {
this.isForcingAdminSidebar = false;
return false; return false;
} }
} }
stopForcingAdminSidebar() {
this.sidebarState.setPanel(MAIN_PANEL);
this.isForcingAdminSidebar = false;
}
#forceAdminSidebar() { #forceAdminSidebar() {
this.sidebarState.setPanel(ADMIN_PANEL); this.sidebarState.setPanel(ADMIN_PANEL);
this.sidebarState.setSeparatedMode(); this.sidebarState.setSeparatedMode();
this.sidebarState.hideSwitchPanelButtons(); this.sidebarState.hideSwitchPanelButtons();
this.isForcingAdminSidebar = true;
return true; return true;
} }
} }

View File

@ -99,8 +99,8 @@ export default Controller.extend({
// Always show sidebar for admin if user can see the admin sidbar // Always show sidebar for admin if user can see the admin sidbar
if ( if (
this.router.currentRouteName.startsWith("admin") && this.sidebarState.isForcingAdminSidebar &&
this.currentUser?.use_admin_sidebar this.sidebarState.currentUserUsingAdminSidebar
) { ) {
return true; return true;
} }

View File

@ -23,6 +23,7 @@ export default class SidebarState extends Service {
@tracked mode = COMBINED_MODE; @tracked mode = COMBINED_MODE;
@tracked displaySwitchPanelButtons = false; @tracked displaySwitchPanelButtons = false;
@tracked filter = ""; @tracked filter = "";
@tracked isForcingAdminSidebar = false;
panels = panels; panels = panels;
collapsedSections = new TrackedSet(); collapsedSections = new TrackedSet();
@ -122,9 +123,13 @@ export default class SidebarState extends Service {
return this.currentPanelKey === MAIN_PANEL; return this.currentPanelKey === MAIN_PANEL;
} }
get currentUserUsingAdminSidebar() {
return this.currentUser?.use_admin_sidebar;
}
get adminSidebarAllowedWithLegacyNavigationMenu() { get adminSidebarAllowedWithLegacyNavigationMenu() {
return ( return (
this.currentUser?.use_admin_sidebar && this.currentUserUsingAdminSidebar &&
this.siteSettings.navigation_menu === "header dropdown" this.siteSettings.navigation_menu === "header dropdown"
); );
} }