refactor(frontend): each page fills the floating header itself; the header knows no page

The header used to pick its pills by `page === …` and import five module controls, and Plex's
Discover/Browse toggle needed a context bridge to reach the sub-view that lives in PlexBrowse.
Now the header is an empty band: PageShell hands its root box out as a slot, a page portals its
own pills into it (PageHeader), and the palette's Jump-to pill shows where no page does
(PageHeaderDefault, rendered inside the page's Suspense so a loading page shows no stand-in).
Plex's toggles take the sub-view as a prop; PlexViewBridge and its context are gone, and with
them the header's five layer suppressions.

No visible change: every header pill's box measured identical against the previous build on eight
pages, in Hungarian and English.
This commit is contained in:
2026-10-23 00:23:38 +02:00
parent 0b24f2d8fa
commit 4ef963b005
36 changed files with 530 additions and 316 deletions
+19
View File
@@ -0,0 +1,19 @@
import { PageHeader } from "../../components/ui/PageShell";
import PlexSearchBox from "./PlexSearchBox";
import PlexScopeToggle from "./PlexScopeToggle";
import PlexViewToggle from "./PlexViewToggle";
import type { PlexViewControls } from "./plexSubUrl";
// Plex's pills in the floating header: the search box, then the library scope (movie/show/both, plus
// the playlists/collections surfaces) and the Discover ⟷ Browse switch — relocated here from the
// filter sidebar so the primary "what am I browsing" controls are always in reach. Both toggles drive
// PlexBrowse's sub-view, which PlexBrowse hands down as `view`.
export default function PlexHeader({ view }: { view: PlexViewControls }) {
return (
<PageHeader>
<PlexSearchBox />
<PlexScopeToggle view={view} />
<PlexViewToggle view={view} />
</PageHeader>
);
}