- Pan/zoom SVG map with CO₂ badge overlay and tooltip (#28) - Room detail page: full-page layout, 24h history table (#28) - 30s/15s polling with last-updated timestamp (#29) - Responsive design (1100/768/480px breakpoints) (#29) - Fix memory leaks, SCSS tokens, env polling config Closes #28, #29
28 lines
940 B
TypeScript
28 lines
940 B
TypeScript
/**
|
|
* CO2 Level Thresholds Configuration
|
|
* Defines air quality levels with their PPM ranges and display colors
|
|
*/
|
|
|
|
export interface CO2Level {
|
|
label: string;
|
|
range: string;
|
|
color: string;
|
|
maxPpm: number;
|
|
}
|
|
|
|
export const CO2_LEVELS: CO2Level[] = [
|
|
{ label: 'Excellent', range: '< 800 ppm', color: '#4caf50', maxPpm: 800 },
|
|
{ label: 'Good', range: '800-1000 ppm', color: '#8bc34a', maxPpm: 1000 },
|
|
{ label: 'Moderate', range: '1000-1400 ppm', color: '#ffc107', maxPpm: 1400 },
|
|
{ label: 'Poor', range: '1400-2000 ppm', color: '#ff9800', maxPpm: 2000 },
|
|
{ label: 'Critical', range: '> 2000 ppm', color: '#f44336', maxPpm: Infinity },
|
|
];
|
|
|
|
export function getCO2Color(ppm: number): string {
|
|
return (CO2_LEVELS.find(l => ppm < l.maxPpm) ?? CO2_LEVELS[CO2_LEVELS.length - 1]).color;
|
|
}
|
|
|
|
export function getCO2Level(ppm: number): CO2Level {
|
|
return CO2_LEVELS.find(l => ppm < l.maxPpm) ?? CO2_LEVELS[CO2_LEVELS.length - 1];
|
|
}
|