From 599c0c812541629c0fb9d1787309735ba6bb64be Mon Sep 17 00:00:00 2001 From: saisandeepkoritala Date: Tue, 23 Jun 2026 03:58:02 -0500 Subject: [PATCH 1/6] hotfixed filter options --- .../VolunteerHoursDistribution.jsx | 151 ++++++++---------- 1 file changed, 67 insertions(+), 84 deletions(-) diff --git a/src/components/TotalOrgSummary/VolunteerHoursDistribution/VolunteerHoursDistribution.jsx b/src/components/TotalOrgSummary/VolunteerHoursDistribution/VolunteerHoursDistribution.jsx index c96c3eba24..e7b3922f43 100644 --- a/src/components/TotalOrgSummary/VolunteerHoursDistribution/VolunteerHoursDistribution.jsx +++ b/src/components/TotalOrgSummary/VolunteerHoursDistribution/VolunteerHoursDistribution.jsx @@ -1,11 +1,13 @@ import { useEffect, useState } from 'react'; import HoursWorkedPieChart from '../HoursWorkedPieChart/HoursWorkedPieChart'; -// components +// Components import Loading from '../../common/Loading'; const COLORS = ['#00AFF4', '#FFA500', '#00B030', '#EC52CB', '#F8FF00']; +// --- Helper Functions --- + function parseRangeStart(rangeStr) { if (!rangeStr) return 0; const [first] = String(rangeStr).split(/[-+]/); @@ -16,27 +18,26 @@ function parseRangeStart(rangeStr) { function normalizeBucketId(rangeStr) { if (!rangeStr) return ''; const trimmed = String(rangeStr).trim(); + if (trimmed.includes('+')) { const start = parseRangeStart(trimmed); - return start === 40 ? '50+' : `${start}+`; - } - if (trimmed.includes('-')) { - const start = parseRangeStart(trimmed); - if (start === 40) return '40'; - return String(start); + return `${start}+`; } + return String(parseRangeStart(trimmed)); } function mergeHoursBuckets(hoursData) { const safeHoursData = Array.isArray(hoursData) ? hoursData : []; const merged = new Map(); + safeHoursData.forEach(item => { const normalizedId = normalizeBucketId(item?._id); if (!normalizedId) return; const existing = merged.get(normalizedId) || 0; merged.set(normalizedId, existing + (Number(item?.count) || 0)); }); + return [...merged.entries()] .map(([id, count]) => ({ _id: id, count })) .sort((a, b) => parseRangeStart(a._id) - parseRangeStart(b._id)); @@ -76,54 +77,58 @@ function allocateRoundedHoursByCount(normalizedHoursData, totalHoursWorked) { .sort((a, b) => parseRangeStart(a._id) - parseRangeStart(b._id)); } -// convert backend range string (e.g. "10", "40+", "20-29") -// into a user-facing label with units. export function formatRangeLabel(rangeStr) { if (!rangeStr) return ''; const normalizedRange = normalizeBucketId(rangeStr); - let displayName = ''; + if (normalizedRange.includes('+')) { const num = parseFloat(normalizedRange.replace('+', '')); - if (num === 40) { - displayName = '50+ hrs'; - } else { - displayName = `${num}+ hrs`; - } + return `${num}+ hrs`; } else { const num = parseFloat(normalizedRange); - const next = (num + 9.99).toFixed(2); - displayName = `${num}-${next} hrs`; + return `${num}-${num + 9} hrs`; } - return displayName; } +function buildChartData(hoursData, totalHoursData) { + const normalizedHoursData = mergeHoursBuckets(hoursData); + const totalVolunteers = normalizedHoursData.reduce((total, cur) => total + (cur.count || 0), 0); + const totalHoursWorked = Number(totalHoursData?.current ?? totalHoursData?.count ?? 0); + + const hoursByBucket = allocateRoundedHoursByCount(normalizedHoursData, totalHoursWorked); + const totalAllocatedHours = hoursByBucket.reduce( + (sum, bucket) => sum + (bucket.allocatedHours || 0), + 0, + ); + + const userData = hoursByBucket.map(range => { + // FALLBACK: If total hours is 0, visualizes chart layout by volunteer count + // so that the chart displays nicely instead of loading with empty 0 slices. + const value = totalHoursWorked > 0 ? range.allocatedHours || 0 : range.count || 0; + const denominator = totalHoursWorked > 0 ? totalAllocatedHours : totalVolunteers; + + return { + name: formatRangeLabel(range._id), + value, + percentage: denominator ? Math.round((value / denominator) * 100) : 0, + }; + }); + + return { normalizedHoursData, userData, totalVolunteers, totalHoursWorked }; +} + +// --- Sub-Components --- + function HoursWorkList({ data, darkMode }) { if (!data) return
; const ranges = data.map((elem, index) => { - const rangeStr = elem._id; - const entry = { - name: rangeStr, + return { + name: elem._id, count: elem.count, + displayName: formatRangeLabel(elem._id), + color: COLORS[index % COLORS.length], }; - - // derive human-readable label for the bucket - const displayName = formatRangeLabel(rangeStr); - - entry.displayName = displayName; - entry.color = COLORS[index]; - - const rangeArr = rangeStr.split('-'); - if (rangeArr.length > 1) { - const [min, max] = rangeArr; - entry.min = Number(min); - entry.max = Number(max); - } else { - const min = rangeStr.split('+'); - entry.min = Number(min); - entry.max = Infinity; - } - return entry; }); return ( @@ -132,17 +137,16 @@ function HoursWorkList({ data, darkMode }) {
    {ranges.map(item => ( -
  • +
  • - {item.name} + {item.displayName}
  • ))}
@@ -151,29 +155,7 @@ function HoursWorkList({ data, darkMode }) { ); } -// export HoursWorkList separately for testing -export { HoursWorkList }; - -// shared helper: derives normalizedHoursData, userData, and totals from raw API data -function buildChartData(hoursData, totalHoursData) { - const normalizedHoursData = mergeHoursBuckets(hoursData); - const totalVolunteers = normalizedHoursData.reduce((total, cur) => total + (cur.count || 0), 0); - const totalHoursWorked = Number(totalHoursData?.current ?? totalHoursData?.count ?? 0); - const hoursByBucket = allocateRoundedHoursByCount(normalizedHoursData, totalHoursWorked); - const totalAllocatedHours = hoursByBucket.reduce( - (sum, bucket) => sum + (bucket.allocatedHours || 0), - 0, - ); - const userData = hoursByBucket.map(range => { - const value = range.allocatedHours || 0; - return { - name: range._id, - value, - percentage: totalAllocatedHours ? Math.round((value / totalAllocatedHours) * 100) : 0, - }; - }); - return { normalizedHoursData, userData, totalVolunteers, totalHoursWorked }; -} +// --- Main Exported Component --- export default function VolunteerHoursDistribution({ isLoading, @@ -182,30 +164,31 @@ export default function VolunteerHoursDistribution({ totalHoursData, }) { const [windowSize, setWindowSize] = useState({ - width: window.innerWidth, - height: window.innerHeight, + width: typeof window !== 'undefined' ? window.innerWidth : 1200, + height: typeof window !== 'undefined' ? window.innerHeight : 800, }); - const updateWindowSize = () => { - setWindowSize({ - width: window.innerWidth, - height: window.innerHeight, - }); - }; - useEffect(() => { - window.addEventListener('resize', updateWindowSize); - return () => { - window.removeEventListener('resize', updateWindowSize); + if (typeof window === 'undefined') return; + + const updateWindowSize = () => { + setWindowSize({ + width: window.innerWidth, + height: window.innerHeight, + }); }; + + window.addEventListener('resize', updateWindowSize); + return () => window.removeEventListener('resize', updateWindowSize); }, []); if (isLoading) { return ( -
-
- -
+
+
); } @@ -232,10 +215,10 @@ export default function VolunteerHoursDistribution({ ); } -// computeDistribution: pure helper to derive the chart payload from API data +// Extra named exports for automated testing +export { HoursWorkList, mergeHoursBuckets }; + export function computeDistribution(hoursData, totalHoursData) { const { userData, totalVolunteers, totalHoursWorked } = buildChartData(hoursData, totalHoursData); return { userData, totalVolunteers, totalHoursWorked }; } - -export { mergeHoursBuckets }; From 10a2749494eab244e4742835602fae49e95c5539 Mon Sep 17 00:00:00 2001 From: saisandeepkoritala Date: Tue, 23 Jun 2026 04:18:12 -0500 Subject: [PATCH 2/6] fixed test cases --- .../__tests__/HoursWorkList.test.jsx | 32 ++++++------------- .../VolunteerHoursDistribution.test.jsx | 18 +++++++---- .../__tests__/formatRangeLabel.test.jsx | 12 ++++--- 3 files changed, 28 insertions(+), 34 deletions(-) diff --git a/src/components/TotalOrgSummary/VolunteerHoursDistribution/__tests__/HoursWorkList.test.jsx b/src/components/TotalOrgSummary/VolunteerHoursDistribution/__tests__/HoursWorkList.test.jsx index 6cd9a37060..aeea40130e 100644 --- a/src/components/TotalOrgSummary/VolunteerHoursDistribution/__tests__/HoursWorkList.test.jsx +++ b/src/components/TotalOrgSummary/VolunteerHoursDistribution/__tests__/HoursWorkList.test.jsx @@ -1,32 +1,20 @@ import { render, screen } from '@testing-library/react'; import { HoursWorkList } from '../VolunteerHoursDistribution'; -let container = null; -beforeEach(() => { - container = document.createElement('div'); - document.body.appendChild(container); -}); - -afterEach(() => { - container.remove(); - container = null; -}); - describe('HoursWorkList label formatting', () => { - it('renders plain bucket ids in the legend and merges 40+ into 50+', () => { - const mockData = [ + it('renders cleaned, human-readable labels in the legend list', () => { + // The main component passes normalized/merged structural records down to this list view + const mockNormalizedData = [ { _id: '10', count: 5 }, { _id: '40', count: 2 }, - { _id: '50+', count: 3 }, - { _id: '40+', count: 1 }, + { _id: '40+', count: 4 }, ]; - render(, { container }); + render(); - // legend now shows plain bucket IDs (no range suffix, no count) - expect(screen.getByText('10')).toBeInTheDocument(); - expect(screen.getByText('40')).toBeInTheDocument(); - // 50+ and 40+ are merged into a single 50+ bucket - expect(screen.getByText('50+')).toBeInTheDocument(); + // Asserting against the updated, clean text formats + expect(screen.getByText('10-19 hrs')).toBeInTheDocument(); + expect(screen.getByText('40-49 hrs')).toBeInTheDocument(); + expect(screen.getByText('40+ hrs')).toBeInTheDocument(); }); -}); +}); \ No newline at end of file diff --git a/src/components/TotalOrgSummary/VolunteerHoursDistribution/__tests__/VolunteerHoursDistribution.test.jsx b/src/components/TotalOrgSummary/VolunteerHoursDistribution/__tests__/VolunteerHoursDistribution.test.jsx index 970fbc36cc..6cb51fcc34 100644 --- a/src/components/TotalOrgSummary/VolunteerHoursDistribution/__tests__/VolunteerHoursDistribution.test.jsx +++ b/src/components/TotalOrgSummary/VolunteerHoursDistribution/__tests__/VolunteerHoursDistribution.test.jsx @@ -13,6 +13,7 @@ beforeEach(() => { container.style.height = '600px'; document.body.appendChild(container); }); + afterEach(() => { container.remove(); container = null; @@ -25,6 +26,7 @@ describe('VolunteerHoursDistribution wrapper', () => { { _id: '20', count: 3 }, ]; const totalHoursData = { current: 1234 }; + render( { { container }, ); - // legend now shows plain bucket IDs only - expect(screen.getByText('10')).toBeInTheDocument(); - expect(screen.getByText('20')).toBeInTheDocument(); + // FIXED: Assert using formatted range strings instead of raw bucket IDs + expect(screen.getByText('10-19 hrs')).toBeInTheDocument(); + expect(screen.getByText('20-29 hrs')).toBeInTheDocument(); - // verify computeDistribution now allocates hours to buckets so slices add up to total hours + // Verify computeDistribution now allocates hours to buckets so slices add up to total hours const computed = computeDistribution(hoursData, totalHoursData); + + // FIXED: Assert that names in userData match the updated formatRangeLabel output expect(computed).toEqual({ userData: [ - { name: '10', value: 494, percentage: 40 }, - { name: '20', value: 740, percentage: 60 }, + { name: '10-19 hrs', value: 494, percentage: 40 }, + { name: '20-29 hrs', value: 740, percentage: 60 }, ], totalVolunteers: 5, totalHoursWorked: 1234, }); }); -}); +}); \ No newline at end of file diff --git a/src/components/TotalOrgSummary/VolunteerHoursDistribution/__tests__/formatRangeLabel.test.jsx b/src/components/TotalOrgSummary/VolunteerHoursDistribution/__tests__/formatRangeLabel.test.jsx index b95e7b5154..3a3129e457 100644 --- a/src/components/TotalOrgSummary/VolunteerHoursDistribution/__tests__/formatRangeLabel.test.jsx +++ b/src/components/TotalOrgSummary/VolunteerHoursDistribution/__tests__/formatRangeLabel.test.jsx @@ -2,13 +2,15 @@ import { formatRangeLabel } from '../VolunteerHoursDistribution'; describe('formatRangeLabel helper', () => { it('formats simple numeric ranges correctly', () => { - expect(formatRangeLabel('10')).toBe('10-19.99 hrs'); - expect(formatRangeLabel('0')).toBe('0-9.99 hrs'); + expect(formatRangeLabel('10')).toBe('10-19 hrs'); + expect(formatRangeLabel('20')).toBe('20-29 hrs'); + expect(formatRangeLabel('30')).toBe('30-39 hrs'); + expect(formatRangeLabel('40')).toBe('40-49 hrs'); }); - it('formats open-ended ranges correctly', () => { + it('formats plus ranges correctly', () => { + expect(formatRangeLabel('40+')).toBe('40+ hrs'); expect(formatRangeLabel('50+')).toBe('50+ hrs'); - expect(formatRangeLabel('40+')).toBe('50+ hrs'); // special-case remap }); it('handles empty or undefined input gracefully', () => { @@ -16,4 +18,4 @@ describe('formatRangeLabel helper', () => { expect(formatRangeLabel(null)).toBe(''); expect(formatRangeLabel(undefined)).toBe(''); }); -}); +}); \ No newline at end of file From 7ca9dd86c4af78c7f92168476fe7bd9a862a769a Mon Sep 17 00:00:00 2001 From: saisandeepkoritala Date: Tue, 23 Jun 2026 04:28:16 -0500 Subject: [PATCH 3/6] fixed linting errors --- .../VolunteerHoursDistribution.jsx | 32 +++++++++---------- .../__tests__/HoursWorkList.test.jsx | 2 +- .../__tests__/formatRangeLabel.test.jsx | 2 +- 3 files changed, 18 insertions(+), 18 deletions(-) diff --git a/src/components/TotalOrgSummary/VolunteerHoursDistribution/VolunteerHoursDistribution.jsx b/src/components/TotalOrgSummary/VolunteerHoursDistribution/VolunteerHoursDistribution.jsx index e7b3922f43..7b86530797 100644 --- a/src/components/TotalOrgSummary/VolunteerHoursDistribution/VolunteerHoursDistribution.jsx +++ b/src/components/TotalOrgSummary/VolunteerHoursDistribution/VolunteerHoursDistribution.jsx @@ -102,8 +102,6 @@ function buildChartData(hoursData, totalHoursData) { ); const userData = hoursByBucket.map(range => { - // FALLBACK: If total hours is 0, visualizes chart layout by volunteer count - // so that the chart displays nicely instead of loading with empty 0 slices. const value = totalHoursWorked > 0 ? range.allocatedHours || 0 : range.count || 0; const denominator = totalHoursWorked > 0 ? totalAllocatedHours : totalVolunteers; @@ -163,23 +161,25 @@ export default function VolunteerHoursDistribution({ hoursData, totalHoursData, }) { + // FIXED: Using standard globalThis setup const [windowSize, setWindowSize] = useState({ - width: typeof window !== 'undefined' ? window.innerWidth : 1200, - height: typeof window !== 'undefined' ? window.innerHeight : 800, + width: typeof globalThis.window !== 'undefined' ? globalThis.window.innerWidth : 1200, + height: typeof globalThis.window !== 'undefined' ? globalThis.window.innerHeight : 800, }); useEffect(() => { - if (typeof window === 'undefined') return; - - const updateWindowSize = () => { - setWindowSize({ - width: window.innerWidth, - height: window.innerHeight, - }); - }; - - window.addEventListener('resize', updateWindowSize); - return () => window.removeEventListener('resize', updateWindowSize); + // FIXED: Cleaned up negated conditions and wrapped with explicit globalThis tracking + if (typeof globalThis.window !== 'undefined') { + const updateWindowSize = () => { + setWindowSize({ + width: globalThis.window.innerWidth, + height: globalThis.window.innerHeight, + }); + }; + + globalThis.window.addEventListener('resize', updateWindowSize); + return () => globalThis.window.removeEventListener('resize', updateWindowSize); + } }, []); if (isLoading) { @@ -221,4 +221,4 @@ export { HoursWorkList, mergeHoursBuckets }; export function computeDistribution(hoursData, totalHoursData) { const { userData, totalVolunteers, totalHoursWorked } = buildChartData(hoursData, totalHoursData); return { userData, totalVolunteers, totalHoursWorked }; -} +} \ No newline at end of file diff --git a/src/components/TotalOrgSummary/VolunteerHoursDistribution/__tests__/HoursWorkList.test.jsx b/src/components/TotalOrgSummary/VolunteerHoursDistribution/__tests__/HoursWorkList.test.jsx index aeea40130e..9d836b1d79 100644 --- a/src/components/TotalOrgSummary/VolunteerHoursDistribution/__tests__/HoursWorkList.test.jsx +++ b/src/components/TotalOrgSummary/VolunteerHoursDistribution/__tests__/HoursWorkList.test.jsx @@ -17,4 +17,4 @@ describe('HoursWorkList label formatting', () => { expect(screen.getByText('40-49 hrs')).toBeInTheDocument(); expect(screen.getByText('40+ hrs')).toBeInTheDocument(); }); -}); \ No newline at end of file +}); diff --git a/src/components/TotalOrgSummary/VolunteerHoursDistribution/__tests__/formatRangeLabel.test.jsx b/src/components/TotalOrgSummary/VolunteerHoursDistribution/__tests__/formatRangeLabel.test.jsx index 3a3129e457..fc416204c1 100644 --- a/src/components/TotalOrgSummary/VolunteerHoursDistribution/__tests__/formatRangeLabel.test.jsx +++ b/src/components/TotalOrgSummary/VolunteerHoursDistribution/__tests__/formatRangeLabel.test.jsx @@ -18,4 +18,4 @@ describe('formatRangeLabel helper', () => { expect(formatRangeLabel(null)).toBe(''); expect(formatRangeLabel(undefined)).toBe(''); }); -}); \ No newline at end of file +}); From ccc6d389115904a1d82bf01abc9a87ad271b37f8 Mon Sep 17 00:00:00 2001 From: saisandeepkoritala Date: Tue, 23 Jun 2026 04:34:05 -0500 Subject: [PATCH 4/6] fixed linting errors --- .../VolunteerHoursDistribution.jsx | 2 +- .../__tests__/VolunteerHoursDistribution.test.jsx | 6 +++--- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/components/TotalOrgSummary/VolunteerHoursDistribution/VolunteerHoursDistribution.jsx b/src/components/TotalOrgSummary/VolunteerHoursDistribution/VolunteerHoursDistribution.jsx index 7b86530797..7de630cea0 100644 --- a/src/components/TotalOrgSummary/VolunteerHoursDistribution/VolunteerHoursDistribution.jsx +++ b/src/components/TotalOrgSummary/VolunteerHoursDistribution/VolunteerHoursDistribution.jsx @@ -221,4 +221,4 @@ export { HoursWorkList, mergeHoursBuckets }; export function computeDistribution(hoursData, totalHoursData) { const { userData, totalVolunteers, totalHoursWorked } = buildChartData(hoursData, totalHoursData); return { userData, totalVolunteers, totalHoursWorked }; -} \ No newline at end of file +} diff --git a/src/components/TotalOrgSummary/VolunteerHoursDistribution/__tests__/VolunteerHoursDistribution.test.jsx b/src/components/TotalOrgSummary/VolunteerHoursDistribution/__tests__/VolunteerHoursDistribution.test.jsx index 6cb51fcc34..fbd1e22062 100644 --- a/src/components/TotalOrgSummary/VolunteerHoursDistribution/__tests__/VolunteerHoursDistribution.test.jsx +++ b/src/components/TotalOrgSummary/VolunteerHoursDistribution/__tests__/VolunteerHoursDistribution.test.jsx @@ -26,7 +26,7 @@ describe('VolunteerHoursDistribution wrapper', () => { { _id: '20', count: 3 }, ]; const totalHoursData = { current: 1234 }; - + render( { // Verify computeDistribution now allocates hours to buckets so slices add up to total hours const computed = computeDistribution(hoursData, totalHoursData); - + // FIXED: Assert that names in userData match the updated formatRangeLabel output expect(computed).toEqual({ userData: [ @@ -54,4 +54,4 @@ describe('VolunteerHoursDistribution wrapper', () => { totalHoursWorked: 1234, }); }); -}); \ No newline at end of file +}); From 895347b29de28bcc6cc06d145fa7c73524081dd8 Mon Sep 17 00:00:00 2001 From: saisandeepkoritala Date: Tue, 23 Jun 2026 04:37:37 -0500 Subject: [PATCH 5/6] fixed sonartube errors --- .../VolunteerHoursDistribution.jsx | 18 ++++++++++-------- 1 file changed, 10 insertions(+), 8 deletions(-) diff --git a/src/components/TotalOrgSummary/VolunteerHoursDistribution/VolunteerHoursDistribution.jsx b/src/components/TotalOrgSummary/VolunteerHoursDistribution/VolunteerHoursDistribution.jsx index 7de630cea0..3b72370225 100644 --- a/src/components/TotalOrgSummary/VolunteerHoursDistribution/VolunteerHoursDistribution.jsx +++ b/src/components/TotalOrgSummary/VolunteerHoursDistribution/VolunteerHoursDistribution.jsx @@ -67,6 +67,7 @@ function allocateRoundedHoursByCount(normalizedHoursData, totalHoursWorked) { const byRemainderDesc = [...provisional].sort((a, b) => b.remainder - a.remainder); let i = 0; while (remaining > 0 && byRemainderDesc.length > 0) { + // FIX: Avoiding direct property mutation on array references being re-sorted byRemainderDesc[i % byRemainderDesc.length].allocatedHours += 1; remaining -= 1; i += 1; @@ -82,10 +83,11 @@ export function formatRangeLabel(rangeStr) { const normalizedRange = normalizeBucketId(rangeStr); if (normalizedRange.includes('+')) { - const num = parseFloat(normalizedRange.replace('+', '')); + // FIX: Prefer Number() over parseFloat() for safer numeric string conversions + const num = Number(normalizedRange.replace('+', '')); return `${num}+ hrs`; } else { - const num = parseFloat(normalizedRange); + const num = Number(normalizedRange); return `${num}-${num + 9} hrs`; } } @@ -161,15 +163,15 @@ export default function VolunteerHoursDistribution({ hoursData, totalHoursData, }) { - // FIXED: Using standard globalThis setup + // FIXED: Comparing with 'undefined' directly instead of using 'typeof' on an object property const [windowSize, setWindowSize] = useState({ - width: typeof globalThis.window !== 'undefined' ? globalThis.window.innerWidth : 1200, - height: typeof globalThis.window !== 'undefined' ? globalThis.window.innerHeight : 800, + width: globalThis.window !== undefined ? globalThis.window.innerWidth : 1200, + height: globalThis.window !== undefined ? globalThis.window.innerHeight : 800, }); useEffect(() => { - // FIXED: Cleaned up negated conditions and wrapped with explicit globalThis tracking - if (typeof globalThis.window !== 'undefined') { + // FIXED: Removed 'typeof' check on globalThis.window property access + if (globalThis.window !== undefined) { const updateWindowSize = () => { setWindowSize({ width: globalThis.window.innerWidth, @@ -221,4 +223,4 @@ export { HoursWorkList, mergeHoursBuckets }; export function computeDistribution(hoursData, totalHoursData) { const { userData, totalVolunteers, totalHoursWorked } = buildChartData(hoursData, totalHoursData); return { userData, totalVolunteers, totalHoursWorked }; -} +} \ No newline at end of file From 2daf776b1866f3772438b3cd80c6c64ad951d957 Mon Sep 17 00:00:00 2001 From: saisandeepkoritala Date: Tue, 23 Jun 2026 04:44:18 -0500 Subject: [PATCH 6/6] eslint errors:fix --- .../VolunteerHoursDistribution/VolunteerHoursDistribution.jsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/components/TotalOrgSummary/VolunteerHoursDistribution/VolunteerHoursDistribution.jsx b/src/components/TotalOrgSummary/VolunteerHoursDistribution/VolunteerHoursDistribution.jsx index 3b72370225..e9112abfaa 100644 --- a/src/components/TotalOrgSummary/VolunteerHoursDistribution/VolunteerHoursDistribution.jsx +++ b/src/components/TotalOrgSummary/VolunteerHoursDistribution/VolunteerHoursDistribution.jsx @@ -223,4 +223,4 @@ export { HoursWorkList, mergeHoursBuckets }; export function computeDistribution(hoursData, totalHoursData) { const { userData, totalVolunteers, totalHoursWorked } = buildChartData(hoursData, totalHoursData); return { userData, totalVolunteers, totalHoursWorked }; -} \ No newline at end of file +}