You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
91 lines
3.0 KiB
91 lines
3.0 KiB
/**
|
|
* SpaceWeatherPanel Component
|
|
* Displays solar flux, K-index, and sunspot number
|
|
*/
|
|
import React from 'react';
|
|
|
|
export const SpaceWeatherPanel = ({ data, loading }) => {
|
|
const getKIndexColor = (kIndex) => {
|
|
const k = parseInt(kIndex);
|
|
if (isNaN(k)) return 'var(--text-muted)';
|
|
if (k >= 5) return 'var(--accent-red)';
|
|
if (k >= 4) return 'var(--accent-amber)';
|
|
return 'var(--accent-green)';
|
|
};
|
|
|
|
return (
|
|
<div className="panel" style={{ padding: '12px' }}>
|
|
<div className="panel-header">☼ SPACE WEATHER</div>
|
|
{loading ? (
|
|
<div style={{ display: 'flex', justifyContent: 'center', padding: '20px' }}>
|
|
<div className="loading-spinner" />
|
|
</div>
|
|
) : (
|
|
<div style={{
|
|
display: 'grid',
|
|
gridTemplateColumns: 'repeat(3, 1fr)',
|
|
gap: '12px',
|
|
textAlign: 'center'
|
|
}}>
|
|
<div>
|
|
<div style={{ fontSize: '11px', color: 'var(--text-muted)', marginBottom: '4px' }}>SFI</div>
|
|
<div style={{
|
|
fontSize: '24px',
|
|
fontWeight: '700',
|
|
color: 'var(--accent-amber)',
|
|
fontFamily: 'Orbitron, monospace'
|
|
}}>
|
|
{data?.solarFlux || '--'}
|
|
</div>
|
|
</div>
|
|
<div>
|
|
<div style={{ fontSize: '11px', color: 'var(--text-muted)', marginBottom: '4px' }}>K-INDEX</div>
|
|
<div style={{
|
|
fontSize: '24px',
|
|
fontWeight: '700',
|
|
color: getKIndexColor(data?.kIndex),
|
|
fontFamily: 'Orbitron, monospace'
|
|
}}>
|
|
{data?.kIndex || '--'}
|
|
</div>
|
|
</div>
|
|
<div>
|
|
<div style={{ fontSize: '11px', color: 'var(--text-muted)', marginBottom: '4px' }}>SSN</div>
|
|
<div style={{
|
|
fontSize: '24px',
|
|
fontWeight: '700',
|
|
color: 'var(--accent-cyan)',
|
|
fontFamily: 'Orbitron, monospace'
|
|
}}>
|
|
{data?.sunspotNumber || '--'}
|
|
</div>
|
|
</div>
|
|
</div>
|
|
)}
|
|
{data?.conditions && (
|
|
<div style={{
|
|
textAlign: 'center',
|
|
marginTop: '12px',
|
|
padding: '6px',
|
|
background: data.conditions === 'GOOD' ? 'rgba(0, 255, 136, 0.1)' :
|
|
data.conditions === 'FAIR' ? 'rgba(255, 180, 50, 0.1)' :
|
|
data.conditions === 'POOR' ? 'rgba(255, 68, 102, 0.1)' : 'transparent',
|
|
borderRadius: '4px'
|
|
}}>
|
|
<span style={{
|
|
fontSize: '11px',
|
|
fontWeight: '600',
|
|
color: data.conditions === 'GOOD' ? 'var(--accent-green)' :
|
|
data.conditions === 'FAIR' ? 'var(--accent-amber)' :
|
|
data.conditions === 'POOR' ? 'var(--accent-red)' : 'var(--text-muted)'
|
|
}}>
|
|
CONDITIONS: {data.conditions}
|
|
</span>
|
|
</div>
|
|
)}
|
|
</div>
|
|
);
|
|
};
|
|
|
|
export default SpaceWeatherPanel;
|