import { BarElement, CategoryScale, Chart as ChartJS, Legend, LinearScale, Title, Tooltip, } from 'chart.js'; import { t } from 'i18next'; import React, { useEffect, useState } from 'react'; import { Bar } from 'react-chartjs-2'; import { useParams } from 'react-router-dom'; import { Finding, getAuditById } from '../../services/audits'; ChartJS.register( CategoryScale, LinearScale, BarElement, Title, Tooltip, Legend, ); type RemediationPriorityProps = { auditId?: string; }; const RemediationPriority: React.FC = ({ auditId, }) => { const paramId = useParams().auditId; if (!auditId) { auditId = paramId; } const [priorityData, setPriorityData] = useState([0, 0, 0, 0]); useEffect(() => { const fetchAuditData = async () => { if (!auditId) { return; } try { const dataAudit = await getAuditById(auditId); const findings = dataAudit.datas.findings; const counts = [0, 0, 0, 0]; findings.forEach((finding: Finding) => { if ( finding.priority && finding.priority >= 1 && finding.priority <= 4 ) { counts[finding.priority - 1] += 1; } }); setPriorityData(counts); } catch (error) { console.error('Error fetching audit data:', error); } }; if (auditId) { fetchAuditData().catch(console.error); } }, [auditId]); const data = { labels: [t('low'), t('medium'), t('high'), t('urgent')], datasets: [ { data: priorityData, backgroundColor: ['#2ECC40', '#FFDC00', '#FF851B', '#FF4136'], }, ], }; const maxCount = Math.max(...priorityData) + 2; const options = { responsive: true, maintainAspectRatio: false, scales: { y: { beginAtZero: true, max: maxCount, ticks: { stepSize: 1, color: 'white', }, grid: { color: 'rgba(255, 255, 255, 0.1)', }, }, x: { ticks: { color: 'white', }, grid: { display: false, }, }, }, plugins: { legend: { display: false, }, datalabels: { formatter: () => '', }, }, }; return (
); }; export default RemediationPriority;