sdlc-hub/web/src/shell/nav.tsx
2026-10-28 12:48:40 +04:00

16 lines
1.3 KiB
TypeScript

import { MODULES } from "../modules/index.ts";
import type { Project } from "../api/types.ts";
import type { NavItem } from "../modules/types.ts";
import { IconHistory, IconHome } from "../ui/index.ts";
// «Обзор» — главная страница ядра; разделы модулей — по группам
export const OVERVIEW: NavItem = { to: "/", label: "Обзор", icon: <IconHome />, padded: true };
// «Лента» — страница ядра: события источников модулей (design wiki-history); при смене проекта строка запроса сохраняется
export const FEED: NavItem = { to: "/feed", label: "Лента", icon: <IconHistory />, padded: true, keepSearch: true };
export const GROUPS = MODULES.filter((m) => m.nav.length > 0).map((m) => ({ name: m.name, title: m.title, nav: m.nav }));
export const NAV: NavItem[] = [OVERVIEW, FEED, ...GROUPS.flatMap((g) => g.nav)];
// пункты, видимые для проекта: безусловные — всегда, условные (`when`) — когда проект известен и условие верно
export const visibleNav = (items: NavItem[], project: Project | null): NavItem[] =>
items.filter((n) => !n.when || (project !== null && n.when(project)));