+
diff --git a/src/components/PRAnalyticsDashboard/ReviewsInsight/PRQualityGraph.jsx b/src/components/PRAnalyticsDashboard/ReviewsInsight/PRQualityGraph.jsx
index 46b420f3ce..31d84af489 100644
--- a/src/components/PRAnalyticsDashboard/ReviewsInsight/PRQualityGraph.jsx
+++ b/src/components/PRAnalyticsDashboard/ReviewsInsight/PRQualityGraph.jsx
@@ -1,8 +1,12 @@
import { Pie } from 'react-chartjs-2';
import styles from './ReviewsInsight.module.css';
import { useSelector } from 'react-redux';
+import { Chart } from 'chart.js';
+import ChartDataLabels from 'chartjs-plugin-datalabels';
-function PRQualityGraph({ selectedTeams, qualityData }) {
+Chart.register(ChartDataLabels);
+
+function PRQualityGraph({ selectedTeams, qualityData, isDataViewActive }) {
const darkMode = useSelector(state => state.theme.darkMode);
if (!selectedTeams || selectedTeams.length === 0) {
@@ -10,7 +14,7 @@ function PRQualityGraph({ selectedTeams, qualityData }) {
}
if (!qualityData || Object.keys(qualityData).length === 0) {
- return
No data available for Quality Graph.
;
+ return
No data available for Quality Graph.
;
}
const isAllTeams = selectedTeams.some(team => team.value === 'All');
@@ -20,17 +24,23 @@ function PRQualityGraph({ selectedTeams, qualityData }) {
const generateChartData = team => {
const teamQualityData = qualityData[team] || {};
+
+ const counts = [
+ teamQualityData.NotApproved || 0,
+ teamQualityData.LowQuality || 0,
+ teamQualityData.Sufficient || 0,
+ teamQualityData.Exceptional || 0,
+ ];
+
+ const total = counts.reduce((sum, v) => sum + v, 0);
+ const values = isDataViewActive ? counts.map(v => (total ? (v / total) * 100 : 0)) : counts;
+
return {
labels: ['Not Approved', 'Low Quality', 'Sufficient', 'Exceptional'],
datasets: [
{
label: `PR Quality Distribution for ${team}`,
- data: [
- teamQualityData.NotApproved || 0,
- teamQualityData.LowQuality || 0,
- teamQualityData.Sufficient || 0,
- teamQualityData.Exceptional || 0,
- ],
+ data: values,
backgroundColor: ['#DC3545', '#FFC107', '#28A745', '#5940CB'],
hoverOffset: 4,
},
@@ -40,29 +50,46 @@ function PRQualityGraph({ selectedTeams, qualityData }) {
const options = {
responsive: true,
+ interaction: {
+ mode: 'dataset',
+ },
plugins: {
legend: {
position: 'bottom',
labels: {
- font: {
- size: 12,
- },
- color: !darkMode ? '#333' : '#fff',
+ font: { size: 12 },
+ color: darkMode ? '#fff' : '#333',
},
},
tooltip: {
enabled: true,
+ callbacks: {
+ label: ctx => (isDataViewActive ? `${ctx.raw.toFixed(1)}%` : ctx.raw),
+ },
+ },
+ datalabels: {
+ color: darkMode ? '#fff' : '#000',
+ font: { weight: 'bold', size: 11 },
+ formatter: value => {
+ if (!value) return '';
+ return isDataViewActive ? `${value}%` : value;
+ },
},
},
};
return (
-
-
PR Quality Distribution
-
+
+
+ PR Quality Distribution
+
+
+
{teamsToDisplay.map(team => (
-
-
{team}
+
))}
diff --git a/src/components/PRAnalyticsDashboard/ReviewsInsight/ReviewsInsight.jsx b/src/components/PRAnalyticsDashboard/ReviewsInsight/ReviewsInsight.jsx
index ef956f91ce..b0f11b1b54 100644
--- a/src/components/PRAnalyticsDashboard/ReviewsInsight/ReviewsInsight.jsx
+++ b/src/components/PRAnalyticsDashboard/ReviewsInsight/ReviewsInsight.jsx
@@ -9,9 +9,10 @@ import { getAllTeamCode } from '../../../actions/allTeamsAction';
function ReviewsInsight() {
const [duration, setDuration] = useState('Last Week');
- const [selectedTeams, setSelectedTeams] = useState([]);
+ const [selectedTeams, setSelectedTeams] = useState([{ value: 'All', label: 'All Teams' }]);
const [teamData, setTeamData] = useState({});
const [qualityData, setQualityData] = useState({});
+ const [dataViewActive, setDataViewActive] = useState(false);
const dispatch = useDispatch();
const { loading, data, error } = useSelector(state => state.reviewsInsights);
@@ -72,6 +73,7 @@ function ReviewsInsight() {
qualityDistribution.find(quality => quality.qualityLevel === 'Sufficient')?.count || 0,
Exceptional:
qualityDistribution.find(quality => quality.qualityLevel === 'Exceptional')?.count || 0,
+ memberCount: team.memberCount,
};
});
setTeamData(formattedTeamData);
@@ -94,14 +96,28 @@ function ReviewsInsight() {
return (
-
PR Reviews Insights
+
PR Reviews Insights
-
-
-
-