Unit References Analysis
This document catalogs all locations in the codebase where units are hardcoded and need to be updated to use the new UnitsContext.
Summary
The following units were searched for:
- flow: "GPM"
- status: "OPEN/CLOSED"
- headloss: "FEET"
- power: "kW"
- velocity: "FT/SEC"
- setting: "N/A"
- leakage: "GPM"
- head: "FEET"
- demand: "GPM"
- pressure: "PSI"
- level: "FEET"
- tankVolume: "GAL"
- leakageFlow: "GPM"
- AGE: "HOURS"
- CHLORINE: "MG/L"
- TR1: "N/A"
- TR2: "N/A"
- CONDUCTIVITY: "S"
- THM: "UG/L"
Files Requiring Updates
1. Dashboard Components
src/components/dashboard/RealtimeMetricsWidget.jsx
Lines with hardcoded units:
- Line 76:
{pressure?.average ? \${pressure.average.toFixed(1)}` : 'N/A'} psi` - Line 94:
{flow?.average ? \${flow.average.toFixed(0)}` : 'N/A'} gpm` - Line 154:
Inactive: {pumps?.inactiveCount || 'N/A'} | Flow: {pumps?.totalFlow?.toFixed(0) || 'N/A'} gpm
Action Required: Replace hardcoded "psi" and "gpm" with dynamic units from UnitsContext
src/components/dashboard/SystemSummaryWidget.jsx
Lines with hardcoded units:
- Line 78:
{demandTrends?.current ? fShortenNumber(demandTrends.current) : 'N/A'} gpm - Line 93:
{demandTrends?.peak ? fShortenNumber(demandTrends.peak) : 'N/A'} gpm
Action Required: Replace hardcoded "gpm" with dynamic units from UnitsContext
src/components/dashboard/QualityMetricsWidget.jsx
Lines with hardcoded units:
- Line 75:
{chlorine?.average ? \${chlorine.average.toFixed(2)}` : 'N/A'} mg/L` - Line 93:
{waterAge?.average ? \${waterAge.average.toFixed(1)}` : 'N/A'} hrs`
Action Required: Replace hardcoded "mg/L" and "hrs" with dynamic units from UnitsContext
2. Constants File
src/constants.jsx
Lines with unit-related constants:
- Lines 180-184: Metric constants (CHLORINE, TR1, CONDUCTIVITY, THM, AGE)
- Lines 186-198: Hydraulic constants (HEAD, FLOW, PRESSURE, LEVEL, etc.)
- Lines 191, 198: Leakage constants (LEAKAGE_FLOW, LEAKAGE)
- Lines 195, 197: Other constants (HEADLOSS, VELOCITY)
Action Required: These are constant definitions, not hardcoded units. No changes needed here.
3. Utility Files
src/utils/formatChartLabel.jsx
Lines with unit references:
- Line 3: Comment mentions "GAL" as example
- Line 4: Comment mentions "Tank Volume (GAL)" as example
Action Required: Update comments to use dynamic units or make the function accept units parameter
4. Map Utilities
src/map_utils/esri/ScadaAssets3DLayer.jsx
Lines with unit references:
- Line 40:
z: asset.elevation * 0.3048 || 0 // Convert feet to meters, default to 0 if not provided
Action Required: This is a conversion comment, not a display unit. No changes needed.
Units Not Found in Codebase
The following units from the search list were NOT found in the codebase:
- status: "OPEN/CLOSED" - No hardcoded references found
- power: "kW" - No hardcoded references found
- velocity: "FT/SEC" - No hardcoded references found
- setting: "N/A" - No hardcoded references found
- head: "FEET" - No hardcoded references found
- level: "FEET" - No hardcoded references found
- tankVolume: "GAL" - No hardcoded references found
- leakageFlow: "GPM" - No hardcoded references found
- AGE: "HOURS" - No hardcoded references found
- TR1: "N/A" - No hardcoded references found
- TR2: "N/A" - No hardcoded references found
- CONDUCTIVITY: "S" - No hardcoded references found
- THM: "UG/L" - No hardcoded references found
Priority Update List
High Priority (User-facing displays)
src/components/dashboard/RealtimeMetricsWidget.jsx- Replace "psi" with dynamic pressure unit
- Replace "gpm" with dynamic flow unit
src/components/dashboard/SystemSummaryWidget.jsx- Replace "gpm" with dynamic demand unit
src/components/dashboard/QualityMetricsWidget.jsx- Replace "mg/L" with dynamic chlorine unit
- Replace "hrs" with dynamic age unit
Medium Priority (Utility functions)
src/utils/formatChartLabel.jsx- Update to accept units parameter or use UnitsContext
Low Priority (Comments/documentation)
src/map_utils/esri/ScadaAssets3DLayer.jsx- Update conversion comment if needed
Implementation Strategy
Update Dashboard Components First
- These are the most visible to users
- Use
useUnits()hook to get dynamic units - Replace hardcoded strings with
getUnit(metric)calls
Update Utility Functions
- Modify
formatChartLabel.jsxto accept units parameter - Or integrate UnitsContext directly
- Modify
Test and Validate
- Ensure all unit displays are working correctly
- Verify fallback behavior when units are not available
Example Implementation
// Before
{pressure?.average ? `${pressure.average.toFixed(1)}` : 'N/A'} psi
// After
const { getUnit } = useUnits();
{pressure?.average ? `${pressure.average.toFixed(1)}` : 'N/A'} {getUnit('pressure') || 'PSI'}
Notes
- Most unit references are in dashboard components
- Constants file contains metric definitions, not display units
- Some units may be handled by the backend API
- Consider adding fallback units for when UnitsContext is not available