Files
AgentCompany/src/renderer/navigation.ts
T

91 lines
3.2 KiB
TypeScript

import type { SectionId } from "@shared/types";
import {
BookOpen,
Briefcase,
CalendarBlank,
ChartLine,
ChatCircle,
ClockCounterClockwise,
CurrencyCircleDollar,
FileText,
FolderOpen,
Gear,
Kanban,
ListChecks,
Megaphone,
MonitorPlay,
Plugs,
PuzzlePiece,
ShieldCheck,
SquaresFour,
Target,
Timer,
Tray,
UserPlus,
UsersThree,
} from "./components/ui/icons";
export type NavItemDef = { id: SectionId; labelKey: string; icon: typeof SquaresFour };
export type NavGroupDef = { id: string; items: NavItemDef[] };
type SectionNavItemMap = { [K in SectionId]: NavItemDef & { id: K } };
export const SECTION_NAV_ITEM_DEFS = {
overview: { id: "overview", labelKey: "nav.overview", icon: SquaresFour },
inbox: { id: "inbox", labelKey: "nav.inbox", icon: Tray },
standup: { id: "standup", labelKey: "nav.standup", icon: Timer },
performance: { id: "performance", labelKey: "nav.performance", icon: ChartLine },
runs: { id: "runs", labelKey: "nav.runs", icon: MonitorPlay },
connectors: { id: "connectors", labelKey: "nav.connectors", icon: Plugs },
agents: { id: "agents", labelKey: "nav.agents", icon: UsersThree },
hiring: { id: "hiring", labelKey: "nav.hiring", icon: UserPlus },
goals: { id: "goals", labelKey: "nav.goals", icon: Target },
projects: { id: "projects", labelKey: "nav.projects", icon: Kanban },
tasks: { id: "tasks", labelKey: "nav.work", icon: ListChecks },
approvals: { id: "approvals", labelKey: "nav.approvals", icon: ShieldCheck },
costs: { id: "costs", labelKey: "nav.costs", icon: CurrencyCircleDollar },
activity: { id: "activity", labelKey: "nav.activity", icon: ClockCounterClockwise },
workspaces: { id: "workspaces", labelKey: "nav.workspaces", icon: FolderOpen },
social: { id: "social", labelKey: "nav.social", icon: Megaphone },
skills: { id: "skills", labelKey: "nav.skills", icon: PuzzlePiece },
automation: { id: "automation", labelKey: "nav.automation", icon: Briefcase },
communication: { id: "communication", labelKey: "nav.communication", icon: ChatCircle },
documents: { id: "documents", labelKey: "nav.documents", icon: FileText },
knowledge: { id: "knowledge", labelKey: "nav.knowledge", icon: BookOpen },
meetings: { id: "meetings", labelKey: "nav.meetings", icon: CalendarBlank },
sprints: { id: "sprints", labelKey: "nav.sprints", icon: Kanban },
settings: { id: "settings", labelKey: "nav.settings", icon: Gear },
} as const satisfies SectionNavItemMap;
export const SECTION_NAV_IDS = Object.keys(SECTION_NAV_ITEM_DEFS) as SectionId[];
export const SIDEBAR_NAV_GROUP_DEFS = [
{
id: "primary",
items: [
SECTION_NAV_ITEM_DEFS.overview,
SECTION_NAV_ITEM_DEFS.inbox,
SECTION_NAV_ITEM_DEFS.tasks,
SECTION_NAV_ITEM_DEFS.approvals,
],
},
{
id: "company",
items: [
SECTION_NAV_ITEM_DEFS.agents,
SECTION_NAV_ITEM_DEFS.communication,
SECTION_NAV_ITEM_DEFS.documents,
],
},
] as const satisfies readonly NavGroupDef[];
export const COMMAND_PALETTE_NAV_ITEM_DEFS = SECTION_NAV_IDS.map((id) => SECTION_NAV_ITEM_DEFS[id]);
export const SETTINGS_NAV_ITEM_DEF = SECTION_NAV_ITEM_DEFS.settings;
export const DASHBOARD_NAV_TARGETS = [
"approvals",
"runs",
"communication",
"costs",
] as const satisfies readonly SectionId[];