mirror of
https://gh.wpcy.net/https://github.com/discourse/discourse.git
synced 2026-05-22 14:50:40 +08:00
Old no sidebar admin panel is deprecated and admin sidebar is not experimental anymore. Therefore, old setting should be deleted.
72 lines
1.8 KiB
JavaScript
Vendored
72 lines
1.8 KiB
JavaScript
Vendored
import { alias } from "@ember/object/computed";
|
|
import Service, { service } from "@ember/service";
|
|
import KeyValueStore from "discourse/lib/key-value-store";
|
|
import { ADMIN_PANEL, MAIN_PANEL } from "discourse/lib/sidebar/panels";
|
|
|
|
export default class AdminSidebarStateManager extends Service {
|
|
@service sidebarState;
|
|
|
|
@alias("sidebarState.isForcingAdminSidebar") isForcingAdminSidebar;
|
|
|
|
keywords = {};
|
|
|
|
STORE_NAMESPACE = "discourse_admin_sidebar_experiment_";
|
|
|
|
store = new KeyValueStore(this.STORE_NAMESPACE);
|
|
|
|
setLinkKeywords(link_name, keywords) {
|
|
if (!this.keywords[link_name]) {
|
|
this.keywords[link_name] = {
|
|
navigation: keywords.map((keyword) => keyword.toLowerCase()),
|
|
};
|
|
return;
|
|
}
|
|
|
|
this.keywords[link_name].navigation = [
|
|
...new Set(
|
|
this.keywords[link_name].navigation.concat(
|
|
keywords.map((keyword) => keyword.toLowerCase())
|
|
)
|
|
),
|
|
];
|
|
}
|
|
|
|
get navConfig() {
|
|
return this.store.getObject("navConfig");
|
|
}
|
|
|
|
set navConfig(value) {
|
|
this.store.setObject({ key: "navConfig", value });
|
|
}
|
|
|
|
maybeForceAdminSidebar(opts = {}) {
|
|
opts.onlyIfAlreadyActive ??= true;
|
|
|
|
const isAdminSidebarActive =
|
|
this.sidebarState.currentPanel?.key === ADMIN_PANEL;
|
|
|
|
if (!opts.onlyIfAlreadyActive) {
|
|
return this.#forceAdminSidebar();
|
|
}
|
|
|
|
if (isAdminSidebarActive) {
|
|
return this.#forceAdminSidebar();
|
|
} else {
|
|
this.isForcingAdminSidebar = false;
|
|
return false;
|
|
}
|
|
}
|
|
|
|
stopForcingAdminSidebar() {
|
|
this.sidebarState.setPanel(MAIN_PANEL);
|
|
this.isForcingAdminSidebar = false;
|
|
}
|
|
|
|
#forceAdminSidebar() {
|
|
this.sidebarState.setPanel(ADMIN_PANEL);
|
|
this.sidebarState.setSeparatedMode();
|
|
this.sidebarState.hideSwitchPanelButtons();
|
|
this.isForcingAdminSidebar = true;
|
|
return true;
|
|
}
|
|
}
|