import classNames from 'classnames' import { NoiseLevelsIcon } from 'lib/icons/NoiseLevels.js' import { NoiseLevelsRedIcon } from 'lib/icons/NoiseLevelsRed.js' import type { NoiseSensorDevice } from 'lib/seam/noise-sensors/noise-sensor-device.js' interface NoiseLevelStatusProps { device: NoiseSensorDevice } export function NoiseLevelStatus({ device, }: NoiseLevelStatusProps): JSX.Element { const isActivated = (device?.properties?.currently_triggering_noise_threshold_ids ?? []) ?.length > 0 return ( <> {t.noiseLevel}:
{isActivated ? : } {getNoiseLevel(device)} {isActivated && ` (${t.noisy})`}
) } const toNoiseString = (value: number | string | undefined): string => { if (typeof value === 'string' || typeof value === 'number') { return `${Number(value).toFixed(0)} ${t.decibel}` } return t.unknown } const getNoiseLevel = (device: NoiseSensorDevice): string => { const isMinut = device.device_type === 'minut_sensor' const isNoiseAware = device.device_type === 'noiseaware_activity_zone' if (isMinut) { return toNoiseString( device?.properties?.minut_metadata?.latest_sensor_values?.sound?.value ) } if (isNoiseAware) { if (device?.properties?.noiseaware_metadata?.noise_level_nrs === -1) { return t.noiseAwareDefault } return toNoiseString( device?.properties?.noiseaware_metadata?.noise_level_decibel ) } return toNoiseString(undefined) } const t = { noiseLevel: 'Noise level', unknown: 'Unknown', decibel: 'dB', noiseAwareDefault: '0-40 dB', noisy: 'noisy', }