import { ClipLoader } from 'react-spinners';
import LoanRepayment from './LoanRepayment.js';
import './PopoutPanel.css';
function PopoutPanel({
data = {},
userState = 'N/A', // Passed explicitly from Dashboard
loading = false,
error = null,
closePanel
}) {
console.log('PopoutPanel Props:', { data, loading, error, userState });
if (loading) {
return (
Loading Career Details...
);
}
if (error) {
return (
Error Loading Career Details
{error}
);
}
// Handle empty data gracefully
if (!data || Object.keys(data).length === 0) {
return (
No Career Data Available
);
}
// Safely access nested data with fallbacks
const {
title = 'Career Details',
economicProjections = {},
salaryData = [],
schools = [],
tuitionData = []
} = data;
const tenthPercentileSalary = salaryData?.find(
(point) => point.percentile === '10th Percentile'
)?.value || 0;
const getProgramLength = (degreeType) => {
if (degreeType?.includes("Associate")) return 2;
if (degreeType?.includes("Bachelor")) return 4;
if (degreeType?.includes("Master")) return 6;
if (degreeType?.includes("Doctoral") || degreeType?.includes("First Professional")) return 8;
if (degreeType?.includes("Certificate")) return 1;
return 4; // Default to 4 years if unspecified
};
return (
{title}
{/* Schools Offering Programs */}
Schools Offering Programs
{Array.isArray(schools) && schools.length > 0 ? (
{schools.map((school, index) => {
const matchingTuitionData = tuitionData.find(
(tuition) =>
tuition['school.name']?.toLowerCase().trim() ===
school['Institution Name']?.toLowerCase().trim()
);
return (
-
{school['Institution Name']}
Degree Type: {school['CREDDESC'] || 'N/A'}
In-State Tuition: ${matchingTuitionData?.['latest.cost.tuition.in_state'] || 'N/A'}
Out-of-State Tuition: ${matchingTuitionData?.['latest.cost.tuition.out_of_state'] || 'N/A'}
);
})}
) : (
No schools available.
)}
{/* Economic Projections */}
Economic Projections for {userState}
{economicProjections && typeof economicProjections === 'object' ? (
- 2022 Employment: {economicProjections['2022 Employment'] || 'N/A'}
- 2032 Employment: {economicProjections['2032 Employment'] || 'N/A'}
- Total Change: {economicProjections['Total Change'] || 'N/A'}
) : (
No economic projections available.
)}
{/* Salary Data Points */}
Salary Data
{salaryData && salaryData.length > 0 ? (
| Percentile |
Salary |
{salaryData.map((point, index) => (
| {point.percentile} |
{point.value > 0 ? `$${parseInt(point.value, 10).toLocaleString()}` : 'N/A'}
|
))}
) : (
No salary data available.
)}
{/* Loan Repayment Analysis */}
{tenthPercentileSalary > 0 && (
{
const matchingTuitionData = tuitionData.find(
(tuition) =>
tuition['school.name']?.toLowerCase().trim() ===
school['Institution Name']?.toLowerCase().trim()
);
const years = getProgramLength(school['CREDDESC']);
return {
schoolName: school['Institution Name'],
inState: parseFloat(matchingTuitionData?.['latest.cost.tuition_in_state'] * years) || 0,
outOfState: parseFloat(matchingTuitionData?.['latest.cost.tuition_out_of_state'] * years) || 0,
};
})}
salaryData={[{ percentile: '10th Percentile', value: tenthPercentileSalary, growthRate: 0.03 }]}
earningHorizon={10}
/>
)}
);
}
export default PopoutPanel;