routing is this plugin's, not the manifest's

The platform hands over the whole subtree under the mount. Which paths exist and
what they mean is web/routes.ts.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This commit is contained in:
2026-09-01 07:17:38 +01:00
co-authored by Claude Opus 5
parent a7fc07c52f
commit 6242fb03a6
+4 -37
View File
@@ -27,14 +27,14 @@ import type { PluginManifest } from '@@/plugins/manifest';
* is `ownerOnly` — the split that field exists for, and the same shape proxy-manager and Jellyfin use
* for the same reason.
*
* ── No `screens`, but a route table ──
* ── No `screens` ──
*
* One screen at the mount prefix, labelled `label`: the sections are panels of one workspace, and
* `screens` is for a plugin contributing genuinely separate destinations with their own dock tiles.
*
* They ARE routes, though. `routes` below names each one, which is what moved the sections out of the
* query string and into the path — and what lets a route arrange the screen's panels its own way when
* one of them needs to.
* They are URLs under it, though — `/fofos-admin/layout/header`, `/fofos-admin/pages/home`. The
* platform hands this plugin the whole subtree and nothing more; which paths exist and what they mean
* is web/routes.ts, here, where it belongs.
*/
export const manifest: PluginManifest = {
publisher: 'officerdev',
@@ -70,39 +70,6 @@ export const manifest: PluginManifest = {
'@tiptap/extension-link': '^3.15.3',
},
/*
The URLs this admin has.
── Why they are declared rather than guessed ──
Every plugin screen gets `/<route>` and `/<route>/:section` for free, which is enough for one
segment. These need two — `/fofos-admin/layout/header`, `/fofos-admin/pages/home` — and naming them
is what makes each one a place the platform knows about rather than a shape it inferred.
── They all share one layout, for now ──
No `layout` on any entry, so each renders `web/layout.ts`. That is the point of declaring them
anyway: the day the page builder wants a third column and Layout does not, it is one field here
rather than a new mechanism.
── The pairs ──
`layout` and `layout/:band` are two entries rather than `layout/:band?`, so either can take its own
arrangement later. React-router ranks a static segment above a dynamic one, so `/pages/home` cannot
be swallowed by something broader.
*/
routes: [
// The bare screen. Redirected to Layout by the detail panel — see DEFAULT_SECTION.
{ path: '' },
{ path: 'layout' },
{ path: 'layout/:band' },
{ path: 'pages' },
{ path: 'pages/:slug' },
{ path: 'galleries' },
{ path: 'media' },
{ path: 'administration' },
],
permissions: [
{
key: 'fofos-admin',