import React, {useRef, useState} from 'react'; export function navigationGroups(can, unit) { const item=(id,label,permission,scope=null)=>({id,label,visible:can(permission,scope)}); return [ {id:'start',label:'Início',items:[{id:'home',label:'Página inicial',visible:true}]}, {id:'services',label:'Clientes e serviços',items:[item('clients','Clientes','clients.view'),item('services','Catálogo de serviços','services.view'),item('service_drafts','Prestações em rascunho','service_drafts.view',unit)]}, {id:'billing',label:'Facturação',items:[{id:'documents',label:'Preparação documental',visible:can('issuer_documents.view')||can('client_documents.view')||can('draft_documents.view',unit)},item('billing_drafts','Rascunhos de facturação','billing_drafts.view',unit),item('service_invoices','Documentos e séries de teste','service_invoices.view',unit),item('preview_model','Apresentação do rascunho','issuer_documents.view')]}, {id:'receivables',label:'Recebimentos',items:[item('service_receivables','Recebimentos, afectações e reconciliação de teste','service_receivables.view',unit)]}, {id:'workshop',label:'Oficinas',items:[item('workshop','Ordens, tarefas e apontamentos de teste','workshop.view',unit),item('workshop_billing','Oficina → rascunho','workshop_billing.view',unit)]}, {id:'costs',label:'Custos e orçamento',items:[item('direct_costs','Custo directo de teste','direct_costs.view',unit),item('industrial_costs','Lotes e custos industriais de teste','industrial_costs.view',unit),item('industrial_budgets','Orçamentos e comparação','industrial_budgets.view',unit)]}, {id:'accounting',label:'Contabilidade e fiscalidade',items:[item('catalogue_accounting','Classificação contabilística','catalogue_accounting.view'),item('service_fiscal','Perfis fiscais do serviço','service_fiscal.view')]}, {id:'admin',label:'Administração',items:[item('company','Empresa','company.view'),{id:'units',label:'Unidades autorizadas',visible:can('company.view')},item('access','Acessos','access.manage')]}, ].map(g=>({...g,items:g.items.filter(i=>i.visible)})).filter(g=>g.items.length); } export default function WorkspaceNavigation({groups,page,navigate,user,busy,logout}) { const [expanded,setExpanded]=useState({});const drawer=useRef(null); function choose(id){navigate(id);drawer.current?.close();} function contents(prefix){return <>TEMPOSGF
ESPAÇO DE TRABALHO