import classNames from 'classnames'
import { useState } from 'react'
import { FanIcon } from 'lib/icons/Fan.js'
import { OffIcon } from 'lib/icons/Off.js'
import type { ThermostatDevice } from 'lib/seam/thermostats/thermostat-device.js'
import { DeviceImage } from 'lib/ui/device/DeviceImage.js'
import { EditableDeviceName } from 'lib/ui/device/EditableDeviceName.js'
import { ClimateSettingStatus } from 'lib/ui/thermostat/ClimateSettingStatus.js'
import { Temperature } from 'lib/ui/thermostat/Temperature.js'
interface ThermostatCardProps {
device: ThermostatDevice
onEditName?: (newName: string) => void
onTemperatureUnitChange?: (temperatureUnit: 'fahrenheit' | 'celsius') => void
}
export function ThermostatCard(props: ThermostatCardProps): JSX.Element {
return (
)
}
function Content(props: ThermostatCardProps): JSX.Element | null {
const { device } = props
const [temperatureUnit, setTemperatureUnit] = useState<
'fahrenheit' | 'celsius'
>('fahrenheit')
const toggleTemperatureUnit = (): void => {
const newUnit = temperatureUnit === 'fahrenheit' ? 'celsius' : 'fahrenheit'
setTemperatureUnit(newUnit)
props.onTemperatureUnitChange?.(newUnit)
}
const {
temperature_fahrenheit: temperatureFahrenheit,
temperature_celsius: temperatureCelsius,
current_climate_setting: currentClimateSetting,
is_fan_running: isFanRunning,
relative_humidity: relativeHumidity,
} = device.properties
const systemStatus = getSystemStatus(device)
return (
|
{t.humidity}:
{relativeHumidity != null && (
{relativeHumidity * 100}%
)}
{isFanRunning ? : }
{isFanRunning ? t.auto : t.off}
{systemStatus === 'off' ? '--' : t[systemStatus]}
)
}
const getSystemStatus = (
device: ThermostatDevice
): 'heating' | 'cooling' | 'fan' | 'off' => {
const { properties } = device
const {
is_heating: isHeating,
is_cooling: isCooling,
is_fan_running: isFanRunning,
} = properties
if (isHeating) return 'heating'
if (isCooling) return 'cooling'
if (isFanRunning) return 'fan'
return 'off'
}
const t = {
fahrenheit: '˚F',
celsius: '˚C',
auto: 'Auto',
off: 'Off',
temperature: 'Temperature',
humidity: 'Humidity',
setting: 'Setting',
fanMode: 'Fan mode',
systemStatus: 'System status',
cooling: 'Cooling',
heating: 'Heating',
fan: 'Fan only',
}