refactor: derive TechLog navigation from the route contract
Both headers carried their own literal list of {label, path}. That made the
route contract and the header two sources for the same three facts — which
routes are navigable, what they are called, and in what order — with nothing
keeping them in step: a renamed route or a reordered menu could be right in one
place and stale in the other.
techLogNavigation(layoutGroup) derives the menu from TECH_LOG_ROUTE_REGISTRY,
where navigationOrder is what makes a route navigable. Output is byte-identical
to the previous literal lists, pinned by a new test.
Derived from TechLog's own route contract rather than from the composed
registries: .dependency-cruiser.json freezes an exact allowlist of files that
may read src/features/installed-*, explicitly so that coupling cannot spread,
and a feature header is not on it.
The studio header keeps its active-state rules — "작업본" stays highlighted
across /studio/documents/* except on the new-document screen — because that is
presentation behaviour the contract has no opinion about.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Opus 5
parent
93ce86eef4
commit
9e5fbd1384
@@ -2,14 +2,12 @@ import { useRef } from "react";
|
||||
import { Link, useLocation } from "react-router-dom";
|
||||
|
||||
import { publicSiteConfig } from "../../../contracts/public-site-config.ts";
|
||||
import { techLogNavigation } from "../../tech-log-navigation.ts";
|
||||
import { SearchDialog } from "./search-dialog.tsx";
|
||||
|
||||
const navigation = [
|
||||
{ label: "탐색", path: "/explore" },
|
||||
{ label: "프로젝트", path: "/projects" },
|
||||
{ label: "변경 기록", path: "/releases" },
|
||||
{ label: "프로필", path: "/profile" },
|
||||
] as const;
|
||||
// Derived from the route contract rather than repeated here; see
|
||||
// `tech-log-navigation.ts` for why.
|
||||
const navigation = techLogNavigation("PUBLIC");
|
||||
|
||||
export function SiteHeader({ currentPath }: { currentPath?: string }) {
|
||||
const location = useLocation();
|
||||
|
||||
Reference in New Issue
Block a user