discourse/app/assets/javascripts/admin/addon/services/admin-plugin-nav-manager.js
Martin Brennan 361e954c55
UX: Change admin plugins list to follow UI guidelines (#28478)
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.
2024-08-30 14:53:36 +10:00

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