Brings the branch up to date with 91 commits on develop, including the
merged theme pass. 20 conflicts, all resolved by keeping both sides.
Locales (19 files): develop added `components.sidebar.menu.groups.*` for
the new grouped sidebar; this branch added `components.sidebar.menu.
dashboard`. Both are wanted, so both are kept. Every file re-validated as
JSON, and all 19 confirmed to carry menu.dashboard, menu.groups and
pages.dashboard.
Menu.tsx: develop restructured the sidebar from a flat list into
`{group, items[]}` groups. That structure is preserved as-is - the
renderer calls `group.items.map` unconditionally, so a flat entry would
throw. Dashboard is now the first item in the Monitoring group, which
suits a page that summarises every monitor type at once. All four groups
(Monitoring, Alerting, Reporting, Configuration) intact.
Gates after merge: tsc clean, build passes, format-check clean, lint
12 errors - the same pre-existing 12 as develop, none in dashboard files.
Left for a follow-up: develop renamed CONTROL_HEIGHT to
INPUT_BASE_HEIGHT, which is now importable here. DashboardCard's
HEADER_MIN_HEIGHT = 44 could derive from it, but the header pads with
theme.spacing(LAYOUT.SM) and the theme's spacing base is 2, so the
padding is 12px a side, not 6 - the derivation would be 56 and would
make every card header taller. That is a visual change, not a merge
resolution, so 44 stands.
164 lines
3.3 KiB
TypeScript
164 lines
3.3 KiB
TypeScript
import { Icon } from "@/Components/design-elements";
|
|
|
|
import {
|
|
LayoutDashboard,
|
|
Globe,
|
|
Gauge,
|
|
Link,
|
|
Bell,
|
|
FileText,
|
|
AlertTriangle,
|
|
Wifi,
|
|
Wrench,
|
|
ScrollText,
|
|
Settings,
|
|
HelpCircle,
|
|
MessageCircle,
|
|
Code,
|
|
User,
|
|
Lock,
|
|
Users,
|
|
Tag,
|
|
Waypoints,
|
|
Container,
|
|
} from "lucide-react";
|
|
export const getMenu = (t: Function) => {
|
|
return [
|
|
{
|
|
group: t("components.sidebar.menu.groups.monitoring"),
|
|
items: [
|
|
{
|
|
name: t("components.sidebar.menu.dashboard"),
|
|
path: "dashboard",
|
|
icon: <Icon icon={LayoutDashboard} />,
|
|
},
|
|
{
|
|
name: t("components.sidebar.menu.uptime"),
|
|
path: "uptime",
|
|
icon: <Icon icon={Globe} />,
|
|
},
|
|
{
|
|
name: t("components.sidebar.menu.docker"),
|
|
path: "docker",
|
|
icon: <Icon icon={Container} />,
|
|
},
|
|
{
|
|
name: t("components.sidebar.menu.infrastructure"),
|
|
path: "infrastructure",
|
|
icon: <Icon icon={Link} />,
|
|
},
|
|
{
|
|
name: t("components.sidebar.menu.pagespeed"),
|
|
path: "pagespeed",
|
|
icon: <Icon icon={Gauge} />,
|
|
},
|
|
],
|
|
},
|
|
{
|
|
group: t("components.sidebar.menu.groups.alerting"),
|
|
items: [
|
|
{
|
|
name: t("components.sidebar.menu.incidents"),
|
|
path: "incidents",
|
|
icon: <Icon icon={AlertTriangle} />,
|
|
},
|
|
{
|
|
name: t("components.sidebar.menu.notifications"),
|
|
path: "notifications",
|
|
icon: <Icon icon={Bell} />,
|
|
},
|
|
{
|
|
name: t("components.sidebar.menu.maintenance"),
|
|
path: "maintenance",
|
|
icon: <Icon icon={Wrench} />,
|
|
},
|
|
],
|
|
},
|
|
{
|
|
group: t("components.sidebar.menu.groups.reporting"),
|
|
items: [
|
|
{
|
|
name: t("components.sidebar.menu.statusPages"),
|
|
path: "status",
|
|
icon: <Icon icon={Wifi} />,
|
|
},
|
|
{
|
|
name: t("components.sidebar.menu.checks"),
|
|
path: "checks",
|
|
icon: <Icon icon={FileText} />,
|
|
},
|
|
{
|
|
name: t("components.sidebar.menu.logs"),
|
|
path: "logs",
|
|
icon: <Icon icon={ScrollText} />,
|
|
},
|
|
],
|
|
},
|
|
{
|
|
group: t("components.sidebar.menu.groups.configuration"),
|
|
items: [
|
|
{
|
|
name: t("components.sidebar.menu.tags"),
|
|
path: "tags",
|
|
icon: <Icon icon={Tag} />,
|
|
},
|
|
{
|
|
name: t("components.sidebar.menu.proxies"),
|
|
path: "proxies",
|
|
icon: <Icon icon={Waypoints} />,
|
|
},
|
|
{
|
|
name: t("components.sidebar.menu.settings"),
|
|
path: "settings",
|
|
icon: <Icon icon={Settings} />,
|
|
},
|
|
],
|
|
},
|
|
];
|
|
};
|
|
|
|
export const getBottomMenu = (t: Function) => {
|
|
return [
|
|
{
|
|
name: t("components.sidebar.bottomMenu.support"),
|
|
path: "support",
|
|
icon: <Icon icon={HelpCircle} />,
|
|
},
|
|
{
|
|
name: t("components.sidebar.bottomMenu.discussions"),
|
|
path: "discussions",
|
|
icon: <Icon icon={MessageCircle} />,
|
|
},
|
|
{
|
|
name: t("components.sidebar.bottomMenu.docs"),
|
|
path: "docs",
|
|
icon: <Icon icon={FileText} />,
|
|
},
|
|
{
|
|
name: t("components.sidebar.bottomMenu.changelog"),
|
|
path: "changelog",
|
|
icon: <Icon icon={Code} />,
|
|
},
|
|
];
|
|
};
|
|
|
|
export const getAccountMenu = (t: Function) => {
|
|
return [
|
|
{
|
|
name: t("components.sidebar.accountMenu.profile"),
|
|
path: "account/profile",
|
|
icon: <Icon icon={User} />,
|
|
},
|
|
{
|
|
name: t("components.sidebar.accountMenu.password"),
|
|
path: "account/password",
|
|
icon: <Icon icon={Lock} />,
|
|
},
|
|
{
|
|
name: t("components.sidebar.accountMenu.team"),
|
|
path: "account/team",
|
|
icon: <Icon icon={Users} />,
|
|
},
|
|
];
|
|
};
|