import { Link, usePage } from '@inertiajs/react'; import { ChevronDown, LayoutDashboard } from 'lucide-react'; import type { ReactNode } from 'react'; import { Button } from '@/components/ui/button'; import { DropdownMenu, DropdownMenuContent, DropdownMenuItem, DropdownMenuTrigger, } from '@/components/ui/dropdown-menu'; import { UserMenuContent } from '@/components/user-menu-content'; import { SgcWorkspaceShell } from '@/components/sgc-workspace-shell'; type Entry = { label: string; path: string; demo: string; roles?: string[] }; const readers = ['admin', 'procurement', 'finance', 'department_head']; const inventory = [...readers, 'warehouse']; const groups: { label: string; entries: Entry[] }[] = [ { label: 'Compras', entries: [ { label: 'Planeamento', path: '/planeamento', demo: '' }, { label: 'Requisições', path: '/requisicoes', demo: '/consulta/requisicoes', }, { label: 'Fornecedores', path: '/fornecedores', demo: '/consulta/fornecedores', roles: readers, }, { label: 'Cotações', path: '/cotacoes', demo: '/consulta/cotacoes', roles: readers, }, { label: 'Ordens de compra', path: '/ordens', demo: '/consulta/ordens', roles: readers, }, { label: 'Recomendação (proposta)', path: '', demo: '/proposta/recomendacao', roles: [], }, ], }, { label: 'Finanças', entries: [ { label: 'Orçamentos', path: '/orcamentos', demo: '/consulta?ecra=reinforcements', roles: ['admin', 'finance'], }, { label: 'Facturas', path: '/facturas', demo: '/consulta/facturas', roles: ['admin', 'finance'], }, { label: 'Reforços orçamentais', path: '/orcamentos', demo: '/consulta/reforcos', roles: ['admin', 'finance'], }, { label: 'Dados bancários', path: '/fornecedores', demo: '/consulta/dados-bancarios', roles: ['admin', 'finance'], }, { label: 'Pagamentos externos', path: '/pagamentos', demo: '/consulta/pagamentos', roles: ['admin', 'finance'], }, { label: 'Regras de investimento', path: '/regras-investimento', demo: '/consulta/investimento', roles: ['admin', 'finance', 'procurement'], }, { label: 'Política de admissão', path: '/politica-admissao', demo: '/proposta/admissao', roles: ['admin'], }, { label: 'Política de recomendação', path: '/politica-recomendacao', demo: '', roles: ['admin'], }, ], }, { label: 'Armazém', entries: [ { label: 'Recepções', path: '/recepcoes', demo: '/consulta/recepcoes', roles: inventory, }, { label: 'Equipamentos e peças', path: '/equipamentos', demo: '/consulta/equipamentos', roles: inventory, }, { label: 'Stock e movimentos', path: '/stock', demo: '/consulta/stock', roles: ['admin', 'procurement', 'finance', 'warehouse'], }, { label: 'Saídas e inventários', path: '/stock/operacoes', demo: '/consulta/operacoes-stock', roles: ['admin', 'procurement', 'finance', 'warehouse'], }, ], }, { label: 'Gestão', entries: [ { label: 'Conflitos de interesses', path: '/conflitos', demo: '/consulta/conflitos', }, { label: 'Cancelamento e revisão', path: '/revisao-compras', demo: '', }, { label: 'Empresa e equipa', path: '/empresa', demo: '', roles: ['admin'], }, { label: 'Aparência', path: '/settings/appearance', demo: '/consulta/aparencia', }, ], }, ]; function SgcPreviewShell({ children, demo = false, }: { children: ReactNode; demo?: boolean; }) { const page = usePage(); const user = page.props.auth?.user; const role = user?.purchasing_role ?? ''; const overview = demo ? '/proposta/principal' : '/dashboard'; const active = (entry: Entry) => demo ? page.url.split('?')[0] === entry.demo.split('?')[0] && page.url === entry.demo : page.url === entry.path || page.url.startsWith(`${entry.path}/`); return (