EXPERIMENTAL: restructure admin sidebar menu (#26047)

New admin sidebar menu
This commit is contained in:
Krzysztof Kotlarek 2024-03-13 10:18:08 +11:00 committed by GitHub
parent 50eca4d6e4
commit de00c9a3d3
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
10 changed files with 509 additions and 225 deletions

View File

@ -27,6 +27,10 @@
class="btn-default"
/>
{{/if}}
<LinkTo @route="adminSiteSettingsCategory" @model="backups">
{{i18n "admin.backups.settings"}}
</LinkTo>
<div class="backup-message">
{{#if this.status.restoreDisabled}}
<a href="site_settings/category/all_results?filter=allow_restore">{{d-icon

View File

@ -1,5 +1,14 @@
<div class="admin-emojis">
<h1>{{i18n "admin.emoji.title"}}</h1>
<div class="admin-emojis__header">
<h1>{{i18n "admin.emoji.title"}}</h1>
<LinkTo
@route="adminSiteSettingsCategory"
@model="all_results"
@query={{hash filter="emoji"}}
>
{{i18n "admin.emoji.settings"}}
</LinkTo>
</div>
<p class="desc">{{i18n "admin.emoji.help"}}</p>

View File

@ -16,6 +16,7 @@
@linkClass={{link.classNames}}
@route={{link.route}}
@model={{link.model}}
@query={{link.query}}
@models={{link.models}}
@href={{link.href}}
@title={{link.title}}

View File

@ -1,6 +1,285 @@
import getURL from "discourse-common/lib/get-url";
export const ADMIN_NAV_MAP = [
{
name: "account",
label: "admin.account.title",
links: [
{
name: "admin_backups",
route: "admin.backups",
label: "admin.account.sidebar_link.backups",
icon: "archive",
},
{
name: "admin_whats_new",
route: "admin.dashboardNewFeatures",
label: "admin.account.sidebar_link.whats_new",
icon: "gift",
},
],
},
{
name: "reports",
label: "admin.reports.sidebar_title",
links: [
{
name: "admin_all_reports",
route: "admin.dashboardReports",
label: "admin.reports.sidebar_link.all",
icon: "chart-bar",
},
],
},
{
name: "community",
label: "admin.community.title",
links: [
{
name: "admin_about_your_site",
route: "adminSiteSettingsCategory",
routeModels: ["required"],
query: { filter: "" },
label: "admin.community.sidebar_link.about_your_site",
icon: "cog",
},
{
name: "admin_badges",
route: "adminBadges",
label: "admin.community.sidebar_link.badges",
icon: "certificate",
},
{
name: "admin_login_and_authentication",
route: "adminSiteSettingsCategory",
routeModels: ["login"],
query: { filter: "" },
label: "admin.community.sidebar_link.login_and_authentication",
icon: "unlock",
},
{
name: "admin_notifications",
route: "adminSiteSettingsCategory",
routeModels: ["all_results"],
query: { filter: "notifications" },
label: "admin.community.sidebar_link.notifications",
icon: "bell",
},
{
name: "admin_permalinks",
route: "adminPermalinks",
label: "admin.community.sidebar_link.permalinks",
icon: "link",
},
{
name: "admin_trust_levels",
route: "adminSiteSettingsCategory",
routeModels: ["trust"],
query: { filter: "" },
label: "admin.community.sidebar_link.trust_levels",
icon: "user-shield",
},
{
name: "admin_users",
route: "adminUsers",
label: "admin.community.sidebar_link.users",
icon: "users",
},
{
name: "admin_user_fields",
route: "adminUserFields",
label: "admin.community.sidebar_link.user_fields",
icon: "user-edit",
},
{
name: "admin_watched_words",
route: "adminWatchedWords",
label: "admin.community.sidebar_link.watched_words",
icon: "eye",
},
{
name: "admin_legal",
route: "adminSiteSettingsCategory",
routeModels: ["legal"],
query: { filter: "" },
label: "admin.community.sidebar_link.legal",
icon: "gavel",
},
],
},
{
name: "appearance",
label: "admin.appearance.title",
links: [
{
name: "admin_font_style",
route: "adminSiteSettingsCategory",
routeModels: ["all_results"],
query: { filter: "font" },
label: "admin.appearance.sidebar_link.font_style",
icon: "italic",
},
{
name: "admin_site_logo",
route: "adminSiteSettingsCategory",
routeModels: ["branding"],
query: { filter: "" },
label: "admin.appearance.sidebar_link.site_logo",
icon: "fab-discourse",
},
{
name: "admin_color_schemes",
route: "adminCustomize.colors",
label: "admin.appearance.sidebar_link.color_schemes",
icon: "palette",
},
{
name: "admin_emoji",
route: "adminEmojis",
label: "admin.appearance.sidebar_link.emoji",
icon: "discourse-emojis",
},
{
name: "admin_navigation",
route: "adminSiteSettingsCategory",
routeModels: ["all_results"],
query: { filter: "navigation" },
label: "admin.appearance.sidebar_link.navigation",
icon: "project-diagram",
},
{
name: "admin_themes",
route: "adminCustomizeThemes",
query: { tab: "themes" },
label: "admin.appearance.sidebar_link.themes",
icon: "paint-brush",
},
{
name: "admin_customize_site_texts",
route: "adminSiteText",
label: "admin.appearance.sidebar_link.site_texts",
icon: "language",
},
],
},
{
name: "email_settings",
label: "admin.email_settings.title",
links: [
{
name: "admin_appearance",
route: "adminCustomizeEmailStyle",
label: "admin.email_settings.sidebar_link.appearance",
icon: "envelope",
},
{
name: "admin_preview_summary",
route: "adminEmail.previewDigest",
label: "admin.email_settings.sidebar_link.preview_summary",
icon: "notification.private_message",
},
{
name: "admin_server_setup",
route: "adminEmail.index",
label: "admin.email_settings.sidebar_link.server_setup",
icon: "cog",
},
],
},
{
name: "email_logs",
label: "admin.email_logs.title",
links: [
{
name: "admin_email_sent",
route: "adminEmail.sent",
label: "admin.email_logs.sidebar_link.sent",
icon: "arrow-right",
},
{
name: "admin_email_skipped",
route: "adminEmail.skipped",
label: "admin.email_logs.sidebar_link.skipped",
icon: "angle-double-right",
},
{
name: "admin_email_bounced",
route: "adminEmail.bounced",
label: "admin.email_logs.sidebar_link.bounced",
icon: "times",
},
{
name: "admin_email_received",
route: "adminEmail.received",
label: "admin.email_logs.sidebar_link.received",
icon: "inbox",
},
{
name: "admin_email_rejected",
route: "adminEmail.rejected",
label: "admin.email_logs.sidebar_link.rejected",
icon: "ban",
},
],
},
{
name: "security",
label: "admin.security.title",
links: [
{
name: "admin_logs_error_logs",
href: getURL("/logs"),
label: "admin.security.sidebar_link.error_logs",
icon: "external-link-alt",
},
{
name: "admin_logs_screened_emails",
route: "adminLogs.screenedEmails",
label: "admin.security.sidebar_link.screened_emails",
icon: "envelope",
},
{
name: "admin_logs_screened_ip_addresses",
route: "adminLogs.screenedIpAddresses",
label: "admin.security.sidebar_link.screened_ips",
icon: "globe",
},
{
name: "admin_logs_screened_urls",
route: "adminLogs.screenedUrls",
label: "admin.security.sidebar_link.screened_urls",
icon: "globe",
},
{
name: "admin_logs_search_logs",
route: "adminSearchLogs",
label: "admin.security.sidebar_link.search_logs",
icon: "search",
},
{
name: "admin_security",
route: "adminSiteSettingsCategory",
routeModels: ["security"],
query: { filter: "" },
label: "admin.security.sidebar_link.security",
icon: "lock",
},
{
name: "admin_spam",
route: "adminSiteSettingsCategory",
routeModels: ["spam"],
query: { filter: "" },
label: "admin.security.sidebar_link.spam",
icon: "robot",
},
{
name: "admin_logs_staff_action_logs",
route: "adminLogs.staffActionLogs",
label: "admin.security.sidebar_link.staff_action_logs",
icon: "user-shield",
},
],
},
{
name: "plugins",
label: "admin.plugins.title",
@ -8,206 +287,96 @@ export const ADMIN_NAV_MAP = [
{
name: "admin_installed_plugins",
route: "adminPlugins.index",
label: "admin.plugins.installed",
label: "admin.plugins.sidebar_link.installed",
icon: "puzzle-piece",
},
],
},
{
name: "email",
text: "Emails",
links: [
{
name: "admin_email",
route: "adminEmail.index",
label: "admin.email.settings",
icon: "cog",
},
{
name: "admin_email_sent",
route: "adminEmail.sent",
label: "admin.email.sent",
icon: "arrow-right",
},
{
name: "admin_email_skipped",
route: "adminEmail.skipped",
label: "admin.email.skipped",
icon: "angle-double-right",
},
{
name: "admin_email_bounced",
route: "adminEmail.bounced",
label: "admin.email.bounced",
icon: "times",
},
{
name: "admin_email_received",
route: "adminEmail.received",
label: "admin.email.received",
icon: "inbox",
},
{
name: "admin_email_rejected",
route: "adminEmail.rejected",
label: "admin.email.rejected",
icon: "ban",
},
{
name: "admin_email_preview_summary",
route: "adminEmail.previewDigest",
label: "admin.email.preview_digest",
icon: "notification.private_message",
},
{
name: "admin_email_advanced_test",
route: "adminEmail.advancedTest",
label: "admin.email.advanced_test.title",
icon: "wrench",
},
],
},
{
name: "logs",
label: "admin.logs.title",
links: [
{
name: "admin_logs_staff_action_logs",
route: "adminLogs.staffActionLogs",
label: "admin.logs.staff_actions.title",
icon: "user-shield",
},
{
name: "admin_logs_screened_emails",
route: "adminLogs.screenedEmails",
label: "admin.logs.screened_emails.title",
icon: "envelope",
},
{
name: "admin_logs_screened_ip_addresses",
route: "adminLogs.screenedIpAddresses",
label: "admin.logs.screened_ips.title",
icon: "globe",
},
{
name: "admin_logs_screened_urls",
route: "adminLogs.screenedUrls",
label: "admin.logs.screened_urls.title",
icon: "globe",
},
{
name: "admin_logs_search_logs",
route: "adminSearchLogs",
label: "admin.logs.search_logs.title",
icon: "search",
},
{
name: "admin_logs_error_logs",
href: getURL("/logs"),
label: "admin.logs.logster.title",
icon: "external-link-alt",
},
],
},
{
name: "customize",
label: "admin.customize.title",
links: [
{
name: "admin_customize_themes",
route: "adminCustomizeThemes",
label: "admin.customize.theme.title",
icon: "paint-brush",
},
{
name: "admin_customize_colors",
route: "adminCustomize.colors",
label: "admin.customize.colors.title",
icon: "palette",
},
{
name: "admin_customize_site_texts",
route: "adminSiteText",
label: "admin.site_text.title",
icon: "language",
},
{
name: "admin_customize_email_templates",
route: "adminCustomizeEmailTemplates",
label: "admin.email.templates_title",
icon: "envelope",
},
{
name: "admin_customize_email_style",
route: "adminCustomizeEmailStyle",
label: "admin.customize.email_style.title",
icon: "envelope",
},
{
name: "admin_customize_user_fields",
route: "adminUserFields",
label: "admin.user_fields.title",
icon: "user-edit",
},
{
name: "admin_customize_emojis",
route: "adminEmojis",
label: "admin.emoji.title",
icon: "discourse-emojis",
},
{
name: "admin_customize_permalinks",
route: "adminPermalinks",
label: "admin.permalink.title",
icon: "link",
},
{
name: "admin_customize_embedding",
route: "adminEmbedding",
label: "admin.embedding.title",
icon: "code",
},
{
name: "admin_customize_watched_words",
route: "adminWatchedWords",
label: "admin.watched_words.title",
icon: "eye",
},
],
},
{
name: "api",
label: "admin.api.title",
name: "advanced",
label: "admin.advanced.title",
links: [
{
name: "admin_api_keys",
route: "adminApiKeys",
icon: "key",
label: "admin.api.keys",
label: "admin.advanced.sidebar_link.api_keys",
},
{
name: "admin_developer",
route: "adminSiteSettingsCategory",
routeModels: ["developer"],
query: { filter: "" },
label: "admin.advanced.sidebar_link.developer",
icon: "keyboard",
},
{
name: "admin_embedding",
route: "adminEmbedding",
label: "admin.advanced.sidebar_link.embedding",
icon: "code",
},
{
name: "admin_rate_limits",
route: "adminSiteSettingsCategory",
routeModels: ["rate_limits"],
query: { filter: "" },
label: "admin.advanced.sidebar_link.rate_limits",
icon: "rocket",
},
{
name: "admin_user_api",
route: "adminSiteSettingsCategory",
routeModels: ["user_api"],
query: { filter: "" },
label: "admin.advanced.sidebar_link.user_api",
icon: "random",
},
{
name: "admin_api_web_hooks",
route: "adminWebHooks",
label: "admin.web_hooks.title",
label: "admin.advanced.sidebar_link.web_hooks",
icon: "globe",
},
],
},
{
name: "backups",
label: "admin.backups.menu.backups",
links: [
{
name: "admin_backups",
route: "admin.backups.index",
label: "admin.backups.menu.backups",
icon: "archive",
name: "admin_onebox",
route: "adminSiteSettingsCategory",
routeModels: ["onebox"],
query: { filter: "" },
label: "admin.advanced.sidebar_link.onebox",
icon: "far-square",
},
{
name: "admin_backups_logs",
route: "admin.backups.logs",
label: "admin.backups.menu.logs",
icon: "stream",
name: "admin_files",
route: "adminSiteSettingsCategory",
routeModels: ["files"],
query: { filter: "" },
label: "admin.advanced.sidebar_link.files",
icon: "file",
},
{
name: "admin_other_options",
route: "adminSiteSettingsCategory",
routeModels: ["uncategorized"],
query: { filter: "" },
label: "admin.advanced.sidebar_link.other_options",
icon: "discourse-other-tab",
},
{
name: "admin_search",
route: "adminSiteSettingsCategory",
routeModels: ["search"],
query: { filter: "" },
label: "admin.advanced.sidebar_link.search",
icon: "search",
},
{
name: "admin_experimental",
route: "adminSiteSettingsCategory",
routeModels: ["all_results"],
query: { filter: "experimental" },
label: "admin.advanced.sidebar_link.experimental",
icon: "discourse-sparkles",
},
],
},

View File

@ -37,6 +37,10 @@ class SidebarAdminSectionLink extends BaseCustomSidebarSectionLink {
return this.adminSidebarNavLink.href;
}
get query() {
return this.adminSidebarNavLink.query;
}
get models() {
return this.adminSidebarNavLink.routeModels;
}
@ -111,29 +115,11 @@ export function useAdminNavConfig(navMap) {
hideSectionHeader: true,
links: [
{
name: "admin_dashboard",
route: "admin.dashboard",
name: "admin_home",
route: "admin.dashboard.general",
label: "admin.dashboard.title",
icon: "home",
},
{
name: "admin_site_settings",
route: "adminSiteSettings",
label: "admin.site_settings.title",
icon: "cog",
},
{
name: "admin_users",
route: "adminUsers",
label: "admin.users.title",
icon: "users",
},
{
name: "admin_badges",
route: "adminBadges",
label: "admin.badges.title",
icon: "certificate",
},
],
},
];
@ -234,7 +220,7 @@ export default class AdminSidebarPanel extends BaseCustomSidebarPanel {
}
if (siteSettings.experimental_form_templates) {
navMap.findBy("name", "customize").links.push({
navMap.findBy("name", "appearance").links.push({
name: "admin_customize_form_templates",
route: "adminCustomizeFormTemplates",
label: "admin.form_templates.nav_title",

View File

@ -28,31 +28,53 @@ acceptance("Admin Sidebar - Sections", function (needs) {
exists(".sidebar-section[data-section-name='admin-nav-section-root']"),
"root section is displayed"
);
assert.ok(
exists(".sidebar-section[data-section-name='admin-nav-section-account']"),
"account section is displayed"
);
assert.ok(
exists(".sidebar-section[data-section-name='admin-nav-section-reports']"),
"reports section is displayed"
);
assert.ok(
exists(
".sidebar-section[data-section-name='admin-nav-section-community']"
),
"community section is displayed"
);
assert.ok(
exists(
".sidebar-section[data-section-name='admin-nav-section-appearance']"
),
"appearance section is displayed"
);
assert.ok(
exists(
".sidebar-section[data-section-name='admin-nav-section-email_settings']"
),
"email settings section is displayed"
);
assert.ok(
exists(
".sidebar-section[data-section-name='admin-nav-section-email_logs']"
),
"email logs settings section is displayed"
);
assert.ok(
exists(
".sidebar-section[data-section-name='admin-nav-section-security']"
),
"security settings section is displayed"
);
assert.ok(
exists(".sidebar-section[data-section-name='admin-nav-section-plugins']"),
"plugins section is displayed"
);
assert.ok(
exists(".sidebar-section[data-section-name='admin-nav-section-email']"),
"email section is displayed"
);
assert.ok(
exists(".sidebar-section[data-section-name='admin-nav-section-logs']"),
"logs section is displayed"
);
assert.ok(
exists(
".sidebar-section[data-section-name='admin-nav-section-customize']"
".sidebar-section[data-section-name='admin-nav-section-advanced']"
),
"customize section is displayed"
);
assert.ok(
exists(".sidebar-section[data-section-name='admin-nav-section-api']"),
"api section is displayed"
);
assert.ok(
exists(".sidebar-section[data-section-name='admin-nav-section-backups']"),
"backups section is displayed"
"advanced section is displayed"
);
});

View File

@ -19,3 +19,12 @@
}
}
}
.admin-emojis__header {
display: flex;
justify-content: space-between;
align-items: center;
a {
font-size: var(--font-up-1);
margin-bottom: 10px;
}
}

View File

@ -4821,6 +4821,9 @@ en:
reports:
title: "List of available reports"
meta_doc: "Explore our <a href='https://meta.discourse.org/t/-/240233' rel='noopener noreferrer' target='_blank'>documentation</a> for a detailed overview of the reports."
sidebar_title: "Reports"
sidebar_link:
all: "All"
dashboard:
title: "Dashboard"
@ -5230,6 +5233,67 @@ en:
timestamp: "Created"
completion: "Completion Time"
actions: "Actions"
home:
title: "Home"
account:
title: "Account"
sidebar_link:
backups: "Backups"
whats_new: "What's New"
community:
title: "Community"
sidebar_link:
about_your_site: "About Your Site"
badges: "Badges"
login_and_authentication: "Login & Authentication"
notifications: "Notifications"
permalinks: "Permalinks"
trust_levels: "Trust Levels"
users: "Users"
user_fields: "User Fields"
watched_words: "Watched Words"
legal: "Legal"
appearance:
title: "Appearance"
sidebar_link:
font_style: "Font Style"
site_logo: "Site Logo"
color_schemes: "Color Schemes"
emoji: "Emoji"
navigation: "Navigation"
themes: "Themes"
site_texts: "Site Texts"
email_settings:
title: "Email Settings"
sidebar_link:
appearance: "Appearance"
preview_summary: "Preview Summary"
server_setup: "Server Setup"
email_logs:
title: "Email Logs"
sidebar_link:
sent: "Sent"
skipped: "Skipped"
bounced: "Bounced"
received: "Received"
rejected: "Rejected"
security:
title: "Security"
sidebar_link:
error_logs: "Error Logs"
screened_emails: "Screened Emails"
screened_ips: "Screened IPs"
screened_urls: "Screened URLs"
search_logs: "Search Logs"
security: "Security"
spam: "Spam"
staff_action_logs: "Staff Action Logs"
plugins:
title: "Plugins"
installed: "Installed Plugins"
@ -5246,6 +5310,23 @@ en:
author: "By %{author}"
experimental_badge: "experimental"
learn_more: "Learn more"
sidebar_link:
installed: "Installed"
advanced:
title: "Advanced"
sidebar_link:
api_keys: "API keys"
developer: "Developer"
embedding: "Embedding"
rate_limits: "Rate Limits"
user_api: "User API"
web_hooks: "Webhooks"
onebox: "Onebox"
files: "Files"
other_options: "Other"
search: "Search"
experimental: "Experimental"
navigation_menu:
sidebar: "Sidebar"
@ -5278,6 +5359,7 @@ en:
uploading_progress: "Uploading… %{progress}%"
success: "'%{filename}' has successfully been uploaded. The file is now being processed and will take up to a minute to show up in the list."
error: "There has been an error while uploading '%{filename}': %{message}"
settings: "Settings"
operations:
is_running: "An operation is currently running…"
failed: "The %{operation} failed. Please check the logs."
@ -6590,6 +6672,7 @@ en:
image: "Image"
alt: "custom emoji preview"
delete_confirm: "Are you sure you want to delete the :%{name}: emoji?"
settings: "Settings"
embedding:
get_started: "If you'd like to embed Discourse on another website, begin by adding its host."

View File

@ -184,6 +184,7 @@ module SvgSprite
plus-circle
plus-square
power-off
project-diagram
puzzle-piece
question
question-circle

View File

@ -73,7 +73,7 @@ describe "Admin Revamp | Sidebar Navigation", type: :system do
filter.filter("ie")
links = page.all(".sidebar-section-link-content-text")
expect(links.count).to eq(2)
expect(links.map(&:text)).to eq(["Preview Summary", "User Fields"])
expect(links.map(&:text)).to eq(["User Fields", "Preview Summary"])
expect(page).to have_no_css(".sidebar-no-results")
filter.filter("ieeee")
@ -87,9 +87,9 @@ describe "Admin Revamp | Sidebar Navigation", type: :system do
expect(page).to have_css(".sidebar-sections__back-to-forum")
# When match section title, display all links
filter.filter("Backups")
filter.filter("Email Sett")
links = page.all(".sidebar-section-link-content-text")
expect(links.count).to eq(2)
expect(links.map(&:text)).to eq(%w[Backups Logs])
expect(links.count).to eq(3)
expect(links.map(&:text)).to eq(["Appearance", "Preview Summary", "Server Setup"])
end
end