From 7494f9103158515bc021375c73c45a2772dd4f6f Mon Sep 17 00:00:00 2001 From: sircarmart Date: Fri, 7 Nov 2025 18:12:13 -0800 Subject: [PATCH 01/15] fix sonarqube errors: prop validation --- .../QuantityOfMaterialsUsed/QuantityOfMaterialsUsed.jsx | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/components/BMDashboard/WeeklyProjectSummary/QuantityOfMaterialsUsed/QuantityOfMaterialsUsed.jsx b/src/components/BMDashboard/WeeklyProjectSummary/QuantityOfMaterialsUsed/QuantityOfMaterialsUsed.jsx index a402f0ab64..86a8bae9ec 100644 --- a/src/components/BMDashboard/WeeklyProjectSummary/QuantityOfMaterialsUsed/QuantityOfMaterialsUsed.jsx +++ b/src/components/BMDashboard/WeeklyProjectSummary/QuantityOfMaterialsUsed/QuantityOfMaterialsUsed.jsx @@ -22,6 +22,7 @@ import { Info, Repeat } from 'lucide-react'; import { v4 as uuidv4 } from 'uuid'; import { fetchBMProjects } from '../../../../actions/bmdashboard/projectActions'; import styles from './QuantityOfMaterialsUsed.module.css'; +import PropTypes from 'prop-types'; ChartJS.register( BarElement, @@ -1053,4 +1054,8 @@ function QuantityOfMaterialsUsed({ data }) { ); } +QuantityOfMaterialsUsed.propTypes = { + selectStyles: PropTypes.object.isRequired, +}; + export default QuantityOfMaterialsUsed; From db12055eb432425ac09b982517b8bafb0feed5f3 Mon Sep 17 00:00:00 2001 From: sircarmart Date: Fri, 7 Nov 2025 18:53:51 -0800 Subject: [PATCH 02/15] fix sonarqube error: prop validation --- .../QuantityOfMaterialsUsed/QuantityOfMaterialsUsed.jsx | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/components/BMDashboard/WeeklyProjectSummary/QuantityOfMaterialsUsed/QuantityOfMaterialsUsed.jsx b/src/components/BMDashboard/WeeklyProjectSummary/QuantityOfMaterialsUsed/QuantityOfMaterialsUsed.jsx index 86a8bae9ec..af30e1de4a 100644 --- a/src/components/BMDashboard/WeeklyProjectSummary/QuantityOfMaterialsUsed/QuantityOfMaterialsUsed.jsx +++ b/src/components/BMDashboard/WeeklyProjectSummary/QuantityOfMaterialsUsed/QuantityOfMaterialsUsed.jsx @@ -23,6 +23,7 @@ import { v4 as uuidv4 } from 'uuid'; import { fetchBMProjects } from '../../../../actions/bmdashboard/projectActions'; import styles from './QuantityOfMaterialsUsed.module.css'; import PropTypes from 'prop-types'; +import { data } from 'jquery'; ChartJS.register( BarElement, @@ -1055,6 +1056,7 @@ function QuantityOfMaterialsUsed({ data }) { } QuantityOfMaterialsUsed.propTypes = { + data: PropTypes.array.isRequired, selectStyles: PropTypes.object.isRequired, }; From ceb87e2e021d1ad9f5ac9a837445b4ac9aacfedf Mon Sep 17 00:00:00 2001 From: sircarmart Date: Fri, 7 Nov 2025 19:11:41 -0800 Subject: [PATCH 03/15] fix sonarqube error: nested ternary --- .../WeeklyProjectSummary/WeeklyProjectSummary.module.css | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/components/BMDashboard/WeeklyProjectSummary/WeeklyProjectSummary.module.css b/src/components/BMDashboard/WeeklyProjectSummary/WeeklyProjectSummary.module.css index 58eba45785..eb9f90a38c 100644 --- a/src/components/BMDashboard/WeeklyProjectSummary/WeeklyProjectSummary.module.css +++ b/src/components/BMDashboard/WeeklyProjectSummary/WeeklyProjectSummary.module.css @@ -17,7 +17,6 @@ width: 95%; margin: auto; padding: 20px; - background: var(--bg-color); color: var(--text-color); } @@ -88,6 +87,7 @@ min-width: 128px; font-size: 14px; background: var(--section-bg); +<<<<<<< HEAD color: var(--text-color); transition: all 0.3s ease; appearance: none; @@ -107,6 +107,8 @@ .weeklySummaryHeaderControls select:focus { outline: none; border-color: var(--focus-border-color, #3b82f6); +======= +>>>>>>> ee8e13e31 (fix sonarqube: duplicate & commented code) } .weeklySummaryHeaderControls select:hover { From 8cc9cc3c7464760a5a25a6c8defaa808df284d99 Mon Sep 17 00:00:00 2001 From: sircarmart Date: Fri, 7 Nov 2025 19:13:02 -0800 Subject: [PATCH 04/15] fix sonarqube error: prop validation --- .../TotalMaterialCostPerProject.jsx | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/components/BMDashboard/WeeklyProjectSummary/TotalMaterialCostPerProject/TotalMaterialCostPerProject.jsx b/src/components/BMDashboard/WeeklyProjectSummary/TotalMaterialCostPerProject/TotalMaterialCostPerProject.jsx index 9adb650cdd..33854733fe 100644 --- a/src/components/BMDashboard/WeeklyProjectSummary/TotalMaterialCostPerProject/TotalMaterialCostPerProject.jsx +++ b/src/components/BMDashboard/WeeklyProjectSummary/TotalMaterialCostPerProject/TotalMaterialCostPerProject.jsx @@ -16,6 +16,7 @@ import axios from 'axios'; import styles from './TotalMaterialCostPerProject.module.css'; import { ENDPOINTS } from '~/utils/URL'; import Loading from '~/components/common/Loading'; +import PropTypes from 'prop-types'; ChartJS.register(CategoryScale, LinearScale, BarElement, Title, Tooltip, Legend); @@ -259,4 +260,8 @@ function TotalMaterialCostPerProject() { ); } +TotalMaterialCostPerProject.propTypes = { + selectStyles: PropTypes.object.isRequired, +}; + export default TotalMaterialCostPerProject; From f80aa91b54ea515eb82caeee0bf98c27ef89390c Mon Sep 17 00:00:00 2001 From: shravan0627 Date: Thu, 28 May 2026 10:57:09 -0400 Subject: [PATCH 05/15] Address reviewer feedback: unify dropdown styles and fix dark mode rendering across BMDashboard --- .../SupplierPerformanceGraph.jsx | 114 +++++++++++++----- .../SupplierPerformanceGraph.module.css | 23 ++++ 2 files changed, 105 insertions(+), 32 deletions(-) diff --git a/src/components/BMDashboard/WeeklyProjectSummary/SupplierPerformanceGraph.jsx b/src/components/BMDashboard/WeeklyProjectSummary/SupplierPerformanceGraph.jsx index 31d4bb673f..bd38f32564 100644 --- a/src/components/BMDashboard/WeeklyProjectSummary/SupplierPerformanceGraph.jsx +++ b/src/components/BMDashboard/WeeklyProjectSummary/SupplierPerformanceGraph.jsx @@ -11,7 +11,7 @@ import { Label, } from 'recharts'; import { useDispatch, useSelector } from 'react-redux'; -import { Input } from 'reactstrap'; +import Select from 'react-select'; import { fetchSupplierProjects, fetchSupplierPerformance } from '../../../actions/summaryDashboard'; import styles from './SupplierPerformanceGraph.module.css'; @@ -72,12 +72,52 @@ const SupplierPerformanceDashboard = function({ height = 420, onDataLoaded }) { const chartTheme = { textColor: darkMode ? '#e0e0e0' : '#333', axisColor: darkMode ? '#a0a0a0' : '#666', - // UPDATE: Set a lighter grey for dark mode so grid lines are clearly visible gridColor: darkMode ? '#9CA3AF' : '#E2E8F0', barColor: '#4CAF50', labelFill: darkMode ? '#ffffff' : '#333', }; + // Unified react-select styles matching WeeklyProjectSummary's selectStyles + const selectStyles = { + control: base => ({ + ...base, + backgroundColor: darkMode ? '#22272e' : '#fff', + borderColor: darkMode ? '#375071' : '#ccc', + color: darkMode ? '#fff' : '#232323', + minHeight: 38, + fontSize: 12, + boxShadow: 'none', + }), + menu: base => ({ + ...base, + backgroundColor: darkMode ? '#22272e' : '#fff', + fontSize: 12, + zIndex: 10001, + color: darkMode ? '#fff' : '#232323', + }), + menuList: base => ({ + ...base, + backgroundColor: darkMode ? '#22272e' : '#fff', + color: darkMode ? '#fff' : '#232323', + padding: 0, + }), + option: (base, state) => { + let bg = darkMode ? '#22272e' : '#fff'; + if (state.isSelected || state.isFocused) bg = '#0d55b3'; + return { + ...base, + backgroundColor: bg, + color: state.isSelected || state.isFocused ? '#fff' : darkMode ? '#fff' : '#232323', + fontSize: 12, + cursor: 'pointer', + }; + }, + singleValue: base => ({ + ...base, + color: darkMode ? '#fff' : '#232323', + }), + }; + useEffect(() => { const loadProjects = async () => { try { @@ -124,6 +164,18 @@ const SupplierPerformanceDashboard = function({ height = 420, onDataLoaded }) { fetchData(); }, [dispatch, selectedDateRange, selectedProject, onDataLoaded]); + // Build react-select options + const dateOptions = getDateRangeOptions().map(opt => ({ value: opt.value, label: opt.label })); + const selectedDateOption = + dateOptions.find(opt => opt.value === selectedDateRange) || dateOptions[0]; + + const projectOptions = [ + { value: 'all', label: 'ALL Projects' }, + ...projects.map(p => ({ value: p._id, label: p._id })), + ]; + const selectedProjectOption = + projectOptions.find(opt => opt.value === selectedProject) || projectOptions[0]; + return (
- - setSelectedDateRange(e.target.value)} - className={styles['supplier-performance-select']} - > - {getDateRangeOptions().map(option => ( - - ))} - + + Dates + + setSelectedProject(e.target.value)} - className={styles['supplier-performance-select']} - > - - {projects.map(project => ( - - ))} - + + Project + +