import React, { useEffect, useState } from 'react'; /** * Props: * - socCode: e.g. "17-1011" * - stateName: e.g. "Kentucky" (optional; if not provided, defaults to "United States") */ function EconomicProjections({ socCode, stateName }) { const [data, setData] = useState(null); // { state: {...}, national: {...} } const [loading, setLoading] = useState(false); const [error, setError] = useState(null); useEffect(() => { if (!socCode) return; const fetchData = async () => { setLoading(true); setError(null); try { const encodedState = stateName ? encodeURIComponent(stateName) : ''; const url = `/api/projections/${socCode}?state=${encodedState}`; const res = await fetch(url); if (!res.ok) { throw new Error(`Server responded with status ${res.status}`); } const json = await res.json(); setData(json); } catch (err) { console.error("Error fetching economic projections:", err); setError("Failed to load economic projections."); } finally { setLoading(false); } }; fetchData(); }, [socCode, stateName]); if (loading) return
Loading Projections...
; if (error) return
{error}
; if (!data) return null; const { state, national } = data; /** * Safely parse the value to a number. If parsing fails, we just return the original string. * Then we format with toLocaleString() if numeric. */ const formatNumber = (val) => { if (val == null || val === '') return 'N/A'; // Coerce string -> number const parsed = Number(val); if (!isNaN(parsed)) { // If it’s actually numeric return parsed.toLocaleString(); } else { // If it’s truly not numeric, return the raw value return val; } }; return (

Economic Projections: {state?.occupationName ?? 'N/A'}

Metric {state?.area || 'State'} {national?.area || 'U.S.'}
Base Year {state?.baseYear ?? 'N/A'} {national?.baseYear ?? 'N/A'}
Base Employment {formatNumber(state?.base)} {formatNumber(national?.base)}
Projected Year {state?.projectedYear ?? 'N/A'} {national?.projectedYear ?? 'N/A'}
Projected Employment {formatNumber(state?.projection)} {formatNumber(national?.projection)}
Employment Change {formatNumber(state?.change)} {formatNumber(national?.change)}
Percent Change {state?.percentChange != null ? `${state.percentChange}%` : 'N/A'} {national?.percentChange != null ? `${national.percentChange}%` : 'N/A'}
Annual Openings {formatNumber(state?.annualOpenings)} {formatNumber(national?.annualOpenings)}
); } export default EconomicProjections;