mirror of
https://github.com/discourse/discourse.git
synced 2024-12-23 15:13:42 +08:00
361e954c55
This commit introduces a little bit of duplication since the old plugin UIs not using the new plugin show page look different from ones like AI and Gamification which have been converted. We can use the new admin header component on the plugins list, but for the other pages we are manually rendering a breadcrumb trail and the list of plugin tabs. Over time as we convert more plugins to use the new UI guidelines and show page we can get rid of this duplication.
71 lines
2.0 KiB
JavaScript
71 lines
2.0 KiB
JavaScript
import { tracked } from "@glimmer/tracking";
|
|
import Service, { service } from "@ember/service";
|
|
import {
|
|
configNavForPlugin,
|
|
PLUGIN_NAV_MODE_SIDEBAR,
|
|
PLUGIN_NAV_MODE_TOP,
|
|
} from "discourse/lib/admin-plugin-config-nav";
|
|
|
|
export default class AdminPluginNavManager extends Service {
|
|
@service currentUser;
|
|
@tracked currentPlugin;
|
|
|
|
// NOTE (martin) This is a temporary solution so we know whether to
|
|
// show the expanded header / nav on the admin plugin list or not.
|
|
// This will be removed when all plugins follow the new "show route" pattern.
|
|
@tracked viewingPluginsList = false;
|
|
|
|
get currentUserUsingAdminSidebar() {
|
|
return this.currentUser?.use_admin_sidebar;
|
|
}
|
|
|
|
get currentConfigNav() {
|
|
const configNav = configNavForPlugin(this.currentPlugin.id);
|
|
const settingsNav = {
|
|
mode: PLUGIN_NAV_MODE_TOP,
|
|
links: [
|
|
{
|
|
label: "admin.plugins.change_settings_short",
|
|
route: "adminPlugins.show.settings",
|
|
},
|
|
],
|
|
};
|
|
|
|
// Not all plugins have a more complex config UI and navigation,
|
|
// in that case only the settings route will be available.
|
|
if (!configNav) {
|
|
return settingsNav;
|
|
}
|
|
|
|
// Automatically inject the settings link.
|
|
if (
|
|
!configNav.links.mapBy("route").includes("adminPlugins.show.settings")
|
|
) {
|
|
configNav.links.unshift(settingsNav.links[0]);
|
|
}
|
|
return configNav;
|
|
}
|
|
|
|
get currentPluginDefaultRoute() {
|
|
const currentConfigNavLinks = this.currentConfigNav.links;
|
|
const linksExceptSettings = currentConfigNavLinks.reject(
|
|
(link) => link.route === "adminPlugins.show.settings"
|
|
);
|
|
|
|
// Some plugins only have the Settings route, if so it's fine to use it as default.
|
|
if (linksExceptSettings.length === 0) {
|
|
return currentConfigNavLinks[0].route;
|
|
}
|
|
|
|
return linksExceptSettings[0].route;
|
|
}
|
|
|
|
get isSidebarMode() {
|
|
return this.currentConfigNav.mode === PLUGIN_NAV_MODE_SIDEBAR;
|
|
}
|
|
|
|
get isTopMode() {
|
|
return this.currentConfigNav.mode === PLUGIN_NAV_MODE_TOP;
|
|
}
|
|
}
|