import { t } from 'i18next'; import { useEffect, useState } from 'react'; import { useParams } from 'react-router-dom'; import { toast } from 'sonner'; import DropdownButton from '@/components/button/DropdownButton'; import AverageCVSS from '@/components/dashboard/AverageCVSS'; import CIATriad from '@/components/dashboard/CIATriad'; import CVSSScore from '@/components/dashboard/CVSSScore'; import ExportModal from '@/components/dashboard/ExportModal'; import RemediationComplexity from '@/components/dashboard/RemediationComplexity'; import RemediationPriority from '@/components/dashboard/RemediationPriority'; import Sidebar from '@/components/dashboard/Sidebar'; import { getAuditById } from '@/services/audits'; import { exportToCSV } from '@/services/exportToCSV'; import { exportToPDF } from '@/services/exportToPDF'; export const Dashboard = () => { const { auditId } = useParams(); // eslint-disable-next-line sonarjs/no-duplicate-string const [activeView, setActiveView] = useState('cvss-score'); const [isExportModalOpen, setIsExportModalOpen] = useState(false); const [selectedDisplays, setSelectedDisplays] = useState([]); const [auditName, setAuditName] = useState(''); useEffect(() => { getAuditById(auditId) .then(audit => { setAuditName(audit.datas.name); }) .catch(console.error); }, [auditId]); const displays = [ { id: 'cvss-score', name: t('cvssScore'), component: CVSSScore }, { id: 'remediation-priority', name: t('remediationPriority'), component: RemediationPriority, }, { id: 'remediation-complexity', name: t('remediationComplexity'), component: RemediationComplexity, }, { id: 'average-cvss', name: 'Average CVSS', component: AverageCVSS }, { id: 'cia-triad', name: 'CIA Triad', component: CIATriad }, ]; const renderView = () => { switch (activeView) { case 'cvss-score': return ; case 'remediation-priority': return ; case 'remediation-complexity': return ; case 'average-cvss': return ; case 'cia-triad': return ; } }; const [exportType, setExportType] = useState(''); const handleExportClick = (type: string) => { setExportType(type); setSelectedDisplays(displays.map(d => d.id)); setIsExportModalOpen(true); }; const handleExportConfirm = async () => { if (exportType === 'pdf') { setIsExportModalOpen(false); await exportToPDF(auditName, selectedDisplays, auditId ?? ''); } else if (exportType === 'csv') { setIsExportModalOpen(false); try { exportToCSV(auditName, selectedDisplays, auditId ?? ''); } catch (err) { toast.error(t('err.exportDashboardCSV')); console.error(err); } toast.success(t('msg.exportDashboardCSVOk')); } }; const exportTypes = [ { id: 1, value: 'pdf', label: 'pdf', onClick: () => handleExportClick('pdf'), }, { id: 2, value: 'csv', label: 'csv', onClick: () => handleExportClick('csv'), }, ]; return ( <>

{t('dashboard')}

{renderView()}
setIsExportModalOpen(false)} onConfirm={handleExportConfirm} selectedDisplays={selectedDisplays} setAuditName={setAuditName} setSelectedDisplays={setSelectedDisplays} type={exportType} /> ); };