DEV: Single admin plugin page for consistent admin plugin UX (#26024)

This commit adds new plugin show routes (`/admin/plugins/:plugin_id`) as we move
towards every plugin having a consistent UI/landing page.

As part of this, we are introducing a consistent way for plugins
to show an inner sidebar in their config page, via a new plugin
API `register_admin_config_nav_routes`

This accepts an array of links with a label/text, and an
ember route. Once this commit is merged we can start the process
of conforming other plugins to follow this pattern, as well
as supporting a single-page version of this for simpler plugins
that don't require an inner sidebar.

Part of /t/122841 internally
This commit is contained in:
Martin Brennan
2024-03-13 13:15:12 +10:00
committed by GitHub
parent 0b41b236d7
commit 4e7a75a7ec
26 changed files with 425 additions and 20 deletions

View File

@ -45,6 +45,7 @@ end
class Plugin::Instance
attr_accessor :path, :metadata
attr_reader :admin_route
attr_reader :admin_config_nav_routes
# Memoized array readers
%i[
@ -105,8 +106,25 @@ class Plugin::Instance
Middleware::AnonymousCache.compile_key_builder
end
def add_admin_route(label, location)
@admin_route = { label: label, location: location }
def add_admin_route(label, location, opts = {})
@admin_route = {
label: label,
location: location,
use_new_show_route: opts.fetch(:use_new_show_route, false),
}
end
def register_admin_config_nav_routes(plugin_id, nav)
@admin_config_nav_routes =
nav.each do |n|
if !n.key?(:label) || !n.key?(:route)
raise ArgumentError.new(
"Admin config nav routes must have a `route` value that matches an Ember route and a `label` value that matches a client I18n key",
)
end
n[:model] = plugin_id
end
end
def configurable?