Files
discourse/app/assets/javascripts/admin/addon/routes/admin.js
Martin Brennan e26a1175d7 FEATURE: Initial version of experimental admin search (#31299)
This feature allows admins to find what they are
looking for in the admin interface via a search modal.
This replaces the admin sidebar filter
as the focus of the Ctrl+/ command, but the sidebar
filter can also still be used. Perhaps at some point
we may remove it or change the shortcut.

The search modal presents the following data for filtering:

* A list of all admin pages, the same as the sidebar,
   except also showing "third level" pages like
   "Email > Skipped"
* All site settings
* Themes
* Components
* Reports

Admins can also filter which types of items are shown in the modal,
for example hiding Settings if they know they are looking for a Page.

In this PR, I also have the following fixes:

* Site setting filters now clear when moving between
   filtered site setting pages, previously it was super
   sticky from Ember
* Many translations were moved around, instead of being
   in various namespaces for the sidebar links and the admin
   page titles and descriptions, now everything is under
   `admin.config` namespace, this makes it way easier to reuse
   this text for pages, search, and sidebar, and if you change it
   in one place then it is changed everywhere.

---------

Co-authored-by: Ella <ella.estigoy@gmail.com>
2025-02-21 11:59:24 +10:00

63 lines
1.6 KiB
JavaScript

import { tracked } from "@glimmer/tracking";
import { service } from "@ember/service";
import KeyboardShortcuts, {
PLATFORM_KEY_MODIFIER,
} from "discourse/lib/keyboard-shortcuts";
import DiscourseRoute from "discourse/routes/discourse";
import { i18n } from "discourse-i18n";
import AdminSearchModal from "admin/components/modal/admin-search";
export default class AdminRoute extends DiscourseRoute {
@service sidebarState;
@service siteSettings;
@service store;
@service currentUser;
@service adminSidebarStateManager;
@service modal;
@tracked initialSidebarState;
titleToken() {
return i18n("admin_title");
}
activate() {
if (this.currentUser.use_experimental_admin_search) {
KeyboardShortcuts.addShortcut(
`${PLATFORM_KEY_MODIFIER}+/`,
() => this.showAdminSearchModal(),
{
global: true,
}
);
}
this.adminSidebarStateManager.maybeForceAdminSidebar({
onlyIfAlreadyActive: false,
});
this.controllerFor("application").setProperties({
showTop: false,
});
}
deactivate(transition) {
this.controllerFor("application").set("showTop", true);
if (this.currentUser.use_experimental_admin_search) {
KeyboardShortcuts.unbind({
[`${PLATFORM_KEY_MODIFIER}+/`]: this.showAdminSearchModal,
});
}
if (this.adminSidebarStateManager.currentUserUsingAdminSidebar) {
if (!transition?.to.name.startsWith("admin")) {
this.adminSidebarStateManager.stopForcingAdminSidebar();
}
}
}
showAdminSearchModal() {
this.modal.show(AdminSearchModal);
}
}