Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
60 commits
Select commit Hold shift + click to select a range
c10aba2
fix sonarqube errors: prop validation
sircarmart Nov 8, 2025
9e2d74f
fix sonarqube error: prop validation
sircarmart Nov 8, 2025
80d9911
fix sonarqube error: nested ternary
sircarmart Nov 8, 2025
d586fb3
fix sonarqube error: prop validation
sircarmart Nov 8, 2025
2143eb4
Address reviewer feedback: unify dropdown styles and fix dark mode re…
shravan0627 May 28, 2026
fb14e74
Refactor: extract shared chart select styles to reduce duplication
shravan0627 May 28, 2026
7c6d39d
Remove unused declarations and apply prettier formatting
shravan0627 May 31, 2026
21c1775
Remove unused Badge.css to satisfy CSS Modules policy
shravan0627 May 31, 2026
986fe4c
Fix remaining SonarCloud code smells
shravan0627 May 31, 2026
2a26562
Fix negated ternaries and ambiguous JSX spacing flagged by SonarCloud
shravan0627 May 31, 2026
643f31b
Fix Issues Breakdown chart tooltip cursor in dark mode
shravan0627 Jun 6, 2026
9e5fe92
fix placeholder contrast and hex shortform in sharedSelectStyles
Jaden300 Aug 8, 2026
547a7eb
fix build errors, remove unused PropTypes, migrate badge shadows to C…
Jaden300 Aug 8, 2026
b76a74e
remove unused PropTypes import from TotalMaterialCostPerProject
Jaden300 Aug 8, 2026
20322c0
fix dark mode issues flagged by reviewers in WeeklyProjectSummary
Jaden300 Aug 15, 2026
0fd79ec
fix: address reviewer dark mode and contrast issues in WeeklyProjectS…
Jaden300 Aug 21, 2026
9974185
fix: address remaining reviewer feedback on dark mode contrast and la…
Jaden300 Aug 23, 2026
94293fc
fix: address reviewer dark mode contrast and code quality feedback
Jaden300 Sep 3, 2026
9dfd5ea
fix: resolve reviewer dark mode and stability feedback on PR 5437
Jaden300 Sep 6, 2026
d35a1cc
fix PR review comments - dark mode contrast, Issue Tracking data bug,…
Jaden300 Sep 12, 2026
9fcea8c
fix SonarCloud findings - cognitive complexity and duplicate selector
Jaden300 Sep 12, 2026
ddda11f
fix: reduce cognitive complexity in InjuryCategoryBarChart
Jaden300 Sep 14, 2026
3ec27cd
fix: address SonarCloud findings on InjuryCategoryBarChart
Jaden300 Sep 14, 2026
53710bd
fix: extract chart rendering into InjuryBarChartView to reduce cognit…
Jaden300 Sep 14, 2026
eb72359
fix: resolve Paid Labor Cost chart label and legend overlap
Jaden300 Sep 19, 2026
b37e78a
fix: wire Distribution of Labor Hours Submit button and address revie…
Jaden300 Sep 26, 2026
ac1eb0f
fix: resolve SonarCloud findings on PaidLaborCost and DistributionLab…
Jaden300 Sep 26, 2026
a7c8d3c
chore: force fresh commit to reset Netlify deploy state
Jaden300 Sep 26, 2026
4d7287f
fix: add netlify.toml to disable failing mise python attestation check
Jaden300 Sep 26, 2026
f4f0586
Merge development into shravan-fix-conflicts-4351, resolve netlify.to…
Jaden300 Sep 26, 2026
5f52a0e
Fix duplicate datalabels key flagged by SonarCloud in TotalMaterialCo…
Jaden300 Sep 26, 2026
bb717b2
fix: send requestorId with labor hours distribution request
Jaden300 Oct 2, 2026
dd53534
fix: address PR review feedback on dark mode construction summary
Jaden300 Oct 3, 2026
0c35c98
fix: badge count contrast fails WCAG 4.5:1 minimum
Jaden300 Oct 3, 2026
842fb23
fix: disable unsupported Member filter in Distribution of Labor Hours
Jaden300 Oct 3, 2026
3e5af9c
fix: dark mode contrast on labor hours empty state, align date input …
Jaden300 Oct 10, 2026
6824c62
fix: badge image CSS-module export, responsive status cards and date …
Jaden300 Oct 15, 2026
b33f5d3
fix: resolve SonarCloud !important specificity and svg accessibility …
Jaden300 Oct 15, 2026
1b570ed
fix: resolve remaining SonarCloud !important findings via specificity
Jaden300 Oct 15, 2026
901e899
fix: resolve SonarCloud !important findings in WeeklyProjectSummary
Jaden300 Oct 15, 2026
11460cc
fix: resolve remaining SonarCloud !important findings
Jaden300 Oct 15, 2026
6074d03
fix: resolve final SonarCloud !important finding in Badge.module.css
Jaden300 Oct 15, 2026
bdbc689
fix: eliminate two more !important findings at their actual source
Jaden300 Oct 15, 2026
3d18d06
fix: remove the last SonarCloud !important finding as dead code
Jaden300 Oct 15, 2026
0382965
Fix NewBadges container losing new_badges class styling
Jaden300 Oct 17, 2026
896789c
Merge development, fix risk card overflow and dark date inputs
Jaden300 Oct 24, 2026
5f838a2
Fix SonarCloud CSS transition and reduced-motion findings
Jaden300 Oct 24, 2026
9442540
Split reduced-motion selectors for badge gallery icon
Jaden300 Oct 24, 2026
ea8baef
Gate badge gallery transitions behind reduced-motion preference
Jaden300 Oct 24, 2026
85a9bde
Fix date range dark mode and mobile responsiveness on Weekly Project …
Jaden300 Oct 24, 2026
a2591d1
Resolve development merge conflicts in Weekly Project Summary charts …
Jaden300 Oct 26, 2026
ec56c22
Fix labor hours dropdowns and map tile key error - address review fee…
Jaden300 Oct 30, 2026
f8d4ff1
Fix SonarCloud issues in QuantityOfMaterialsUsed and DistributionLabo…
Jaden300 Oct 30, 2026
50c49d7
Merge development into shravan-fix-conflicts-4351 - resolve Weekly Pr…
Jaden300 Oct 31, 2026
97f809e
Merge development into shravan-fix-conflicts-4351 - resolve Distribut…
Jaden300 Oct 31, 2026
0acef33
Remove nested template literal in DistributionLaborHours legend swatch
Jaden300 Oct 31, 2026
d6d5578
Fix dark date inputs overridden by leaked global rule and replace key…
Jaden300 Oct 31, 2026
7f84c55
Scope tools chart date input rule to its page and drop !important fro…
Jaden300 Oct 31, 2026
66f9ed3
Merge development into shravan-fix-conflicts-4351 - resolve conflicts…
Jaden300 Nov 1, 2026
b50121c
fix: scope Recharts axis tick fill rule to Issue Breakdown chart so o…
Jaden300 Nov 5, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 3 additions & 5 deletions src/actions/bmdashboard/issueChartActions.js
Original file line number Diff line number Diff line change
Expand Up @@ -53,10 +53,8 @@ const formatFilters = ({ projectIds, startDate, endDate } = {}) => {
) {
formatted.projectIds = Array.isArray(projectIds) ? projectIds.join(',') : projectIds.trim();
}
if (startDate !== undefined && startDate !== '') {
if (startDate !== undefined && startDate !== '' && endDate !== undefined && endDate !== '') {
formatted.startDate = startDate;
}
if (endDate !== undefined && endDate !== '') {
formatted.endDate = endDate;
}
return formatted;
Expand All @@ -69,7 +67,7 @@ export const fetchLongestOpenIssues = filters => async dispatch => {
const response = await axios.get(ENDPOINTS.BM_LONGEST_OPEN_ISSUES, {
params: formattedFilters,
});
dispatch({ type: FETCH_LONGEST_OPEN_ISSUES_SUCCESS, payload: response.data });
dispatch({ type: FETCH_LONGEST_OPEN_ISSUES_SUCCESS, payload: response.data.data });
} catch (error) {
dispatch({
type: FETCH_LONGEST_OPEN_ISSUES_FAILURE,
Expand All @@ -85,7 +83,7 @@ export const fetchMostExpensiveIssues = filters => async dispatch => {
const response = await axios.get(ENDPOINTS.BM_MOST_EXPENSIVE_ISSUES, {
params: formattedFilters,
});
dispatch({ type: FETCH_MOST_EXPENSIVE_ISSUES_SUCCESS, payload: response.data });
dispatch({ type: FETCH_MOST_EXPENSIVE_ISSUES_SUCCESS, payload: response.data.data });
} catch (error) {
dispatch({
type: FETCH_MOST_EXPENSIVE_ISSUES_FAILURE,
Expand Down
22 changes: 11 additions & 11 deletions src/components/BMDashboard/InteractiveMap/InteractiveMap.jsx
Original file line number Diff line number Diff line change
Expand Up @@ -541,17 +541,17 @@ export default function InteractiveMap() {
<div style={{ marginBottom: '8px' }}>
<strong>Status:</strong>{' '}
<span
style={{
color:
org.status === 'active'
? '#DE6A6A'
: org.status === 'delayed'
? '#E3D270'
: org.status === 'completed'
? '#6ACFDE'
: '#AAAAAA',
fontWeight: 'bold',
}}
className={
// eslint-disable-next-line no-nested-ternary
org.status === 'active'
? styles.statusActive
: // eslint-disable-next-line no-nested-ternary
org.status === 'delayed'
? styles.statusDelayed
: org.status === 'completed'
? styles.statusCompleted
: styles.statusDefault
}
>
{org.status}
</span>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -376,6 +376,10 @@
filter: invert(1) hue-rotate(180deg) brightness(0.95) contrast(0.9) saturate(0.6);
}

.darkMap :global(.leaflet-tile-pane) {
filter: invert(1) hue-rotate(180deg) brightness(0.9) contrast(0.9);
}

/* ----------------------------------
POPUPS
---------------------------------- */
Expand Down Expand Up @@ -487,6 +491,48 @@
margin-right: 8px;
}

/* ----------------------------------
POPUP STATUS TEXT
---------------------------------- */
.statusActive,
.statusDelayed,
.statusCompleted,
.statusDefault {
font-weight: 700;
}

.statusActive {
color: #b84040;
}

.statusDelayed {
color: #8a6d00;
}

.statusCompleted {
color: #1a8fa0;
}

.statusDefault {
color: #666;
}

.darkPage .statusActive {
color: #ff8a80;
}

.darkPage .statusDelayed {
color: #ffd166;
}

.darkPage .statusCompleted {
color: #5ee2f0;
}

.darkPage .statusDefault {
color: #ccc;
}

/* ----------------------------------
POPUP BUTTON
---------------------------------- */
Expand Down
7 changes: 3 additions & 4 deletions src/components/BMDashboard/Issues/LongestOpenIssuesChart.jsx
Original file line number Diff line number Diff line change
Expand Up @@ -22,9 +22,7 @@ function IssuesCharts({ bmProjects = [] }) {
const [selectedProjects, setSelectedProjects] = useState([]);
const [dateRange, setDateRange] = useState({ start: null, end: null });

const { longestOpenIssues = [], mostExpensiveIssues = [] } = useSelector(
state => state.issue || {},
);
const { longestOpenIssues, mostExpensiveIssues } = useSelector(state => state.issue || {});
const darkMode = useSelector(state => state.theme.darkMode);

useEffect(() => {
Expand All @@ -41,7 +39,8 @@ function IssuesCharts({ bmProjects = [] }) {
}
}, [graphType, selectedProjects, dateRange.start, dateRange.end, dispatch]);

const chartData = graphType === 'Longest Open' ? longestOpenIssues : mostExpensiveIssues;
const rawChartData = graphType === 'Longest Open' ? longestOpenIssues : mostExpensiveIssues;
const chartData = Array.isArray(rawChartData) ? rawChartData : [];

const data = {
labels: chartData.map(issue => truncateLabel(issue.title || String(issue.issueId))),
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -28,14 +28,26 @@
width: 100%;
max-height: 200px;
overflow-y: auto;
background-color: var(--card-bg);
color: var(--text-color);
background-color: #fff;
color: #000;
border: 1px solid var(--button-hover);
border-radius: 4px;
padding: 4px 8px;
box-sizing: border-box;
}

.darkMode .selectorGroup select {
background-color: #253342;
color: #fff;
border-color: #4a5a77;
color-scheme: dark;
}

.darkMode .selectorGroup select option {
background-color: #253342;
color: #fff;
}

.chartCaption {
text-align: center;
font-size: medium;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,20 +6,22 @@ import styles from './DistributionLaborHours.module.css';

const COLORS = ['#4f8fa8', '#3fa4b8', '#ffab91', '#ffccbb', '#c7c7c7', '#f9f3e3'];

const SWATCH_CLASSES = [
styles.swatch0,
styles.swatch1,
styles.swatch2,
styles.swatch3,
styles.swatch4,
styles.swatch5,
];

const CustomTooltip = ({ active, payload, total, darkMode }) => {
if (active && payload && payload.length) {
const { name, value } = payload[0];
const percent = total > 0 ? ((value / total) * 100).toFixed(1) : '0.0';

return (
<div
className={styles.tooltip}
style={{
backgroundColor: darkMode ? '#2e3e5a' : '#fff',
color: darkMode ? '#fff' : '#000',
border: darkMode ? '1px solid #64748b' : '1px solid #ccc',
}}
>
<div className={`${styles.tooltip} ${darkMode ? styles.tooltipDark : styles.tooltipLight}`}>
<p>{name}</p>
<p>{`Hours: ${value} hrs`}</p>
<p>{`Percentage: ${percent}%`}</p>
Expand Down Expand Up @@ -298,17 +300,13 @@ export default function DistributionLaborHours() {
{filteredData.map((entry, index) => (
<div key={entry.name} className={styles.legendItem}>
<span
className={styles.colorBox}
style={{
backgroundColor: COLORS[index % COLORS.length],
}}
className={`${styles.colorBox} ${
SWATCH_CLASSES[index % SWATCH_CLASSES.length]
}`}
/>

<span
className={styles.legendText}
style={{
color: darkMode ? '#f5f5f5' : '#000',
}}
className={`${styles.legendText} ${darkMode ? styles.legendTextDark : ''}`}
>
{entry.name}: {entry.value} hrs
</span>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -381,6 +381,11 @@
min-width: 0;
overflow-wrap: anywhere;
line-height: 1.3;
color: #000;
}

.legendTextDark {
color: #f5f5f5;
}

.colorBox {
Expand All @@ -394,6 +399,30 @@
flex-shrink: 0;
}

.swatch0 {
background-color: #4f8fa8;
}

.swatch1 {
background-color: #3fa4b8;
}

.swatch2 {
background-color: #ffab91;
}

.swatch3 {
background-color: #ffccbb;
}

.swatch4 {
background-color: #c7c7c7;
}

.swatch5 {
background-color: #f9f3e3;
}

/* =========================
PIE
========================= */
Expand Down Expand Up @@ -428,6 +457,20 @@
margin: 2px 0;
}

.tooltipLight {
border: 1px solid #ccc;

background-color: #fff;
color: #000;
}

.tooltipDark {
border: 1px solid #64748b;

background-color: #2e3e5a;
color: #fff;
}

:global(.dark) .tooltip,
:global(.dark-mode) .tooltip,
:global(.bm-dashboard-dark) .tooltip,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -344,6 +344,14 @@
.wrapperDark .filterSelect,
.wrapperDark .filterInput {
color-scheme: dark;
background: #2b3e59;
color: #fff;
border-color: #4a5a77;
}

.wrapperDark .filterInput[type='date']::-webkit-datetime-edit,
.wrapperDark .filterInput[type='date']::-webkit-datetime-edit-fields-wrapper {
color: #fff;
}

.wrapperDark .filterInput[type='date']::-webkit-calendar-picker-indicator {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -253,7 +253,7 @@ export default function CostVarianceTrendGraph() {

const containerClass = `${styles.varianceContainer} ${darkMode ? styles.darkMode : ''}`;
const dateInputClass = `${styles.dateInput} ${darkMode ? styles.darkDateInput : ''}`;
const calendarClass = darkMode ? 'paid-labor-cost-dark-calendar' : '';
const calendarClass = darkMode ? 'cost-variance-dark-calendar' : '';
const tooltipCursorFill = darkMode ? 'rgba(255,255,255,0.05)' : 'rgba(0,0,0,0.05)';

if (initialLoading) {
Expand Down
Loading
Loading