You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
sims-hq/apps/hq-web/src/nav.ts

40 lines
1.6 KiB
TypeScript

import {
BarChart3, BellRing, Boxes, FilePlus2, Files, Filter, LayoutDashboard, ListChecks,
Settings as SettingsIcon, Upload, UserCog, Users, Wrench,
type LucideIcon,
} from 'lucide-react'
export interface NavItem {
to: string; label: string; icon: LucideIcon; ownerOnly?: boolean
/** Match this route exactly (for parents like /documents whose children have their own items). */
end?: boolean
}
export interface NavGroup { label: string; items: NavItem[] }
/** Grouped sidebar (spec §3). Pipeline sits right after Dashboard (funnel spec §6b). */
export const NAV_GROUPS: NavGroup[] = [
{
label: 'Work',
items: [
{ to: '/', label: 'Dashboard', icon: LayoutDashboard },
{ to: '/pipeline', label: 'Pipeline', icon: Filter },
{ to: '/reminders', label: 'Reminders', icon: BellRing },
{ to: '/projects', label: 'Onboarding', icon: ListChecks },
{ to: '/tickets', label: 'Tickets', icon: Wrench },
{ to: '/clients', label: 'Clients', icon: Users },
{ to: '/documents', label: 'Documents', icon: Files, end: true },
{ to: '/documents/new', label: 'New Document', icon: FilePlus2 },
],
},
{ label: 'Catalog', items: [{ to: '/modules', label: 'Modules', icon: Boxes }] },
{ label: 'Insight', items: [{ to: '/reports', label: 'Reports', icon: BarChart3 }] },
{
label: 'Admin',
items: [
{ to: '/employees', label: 'Employees', icon: UserCog, ownerOnly: true },
{ to: '/import', label: 'APEX Import', icon: Upload, ownerOnly: true },
{ to: '/settings', label: 'Settings', icon: SettingsIcon },
],
},
]