Skip to content

Commit 5c56c79

Browse files
committed
Toggling the temperature unit in ThermostatCard should also affect ClimateSettingStatus
1 parent 102735e commit 5c56c79

File tree

3 files changed

+49
-14
lines changed

3 files changed

+49
-14
lines changed

src/lib/seam/components/DeviceDetails/ThermostatDeviceDetails.tsx

Lines changed: 20 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,10 @@ import { ClimateModeMenu } from 'lib/ui/thermostat/ClimateModeMenu.js'
2424
import { ClimateSettingStatus } from 'lib/ui/thermostat/ClimateSettingStatus.js'
2525
import { FanModeMenu } from 'lib/ui/thermostat/FanModeMenu.js'
2626
import { TemperatureControlGroup } from 'lib/ui/thermostat/TemperatureControlGroup.js'
27-
import { ThermostatCard } from 'lib/ui/thermostat/ThermostatCard.js'
27+
import {
28+
type TemperatureUnit,
29+
ThermostatCard,
30+
} from 'lib/ui/thermostat/ThermostatCard.js'
2831

2932
interface ThermostatDeviceDetailsProps
3033
extends NestedSpecificDeviceDetailsProps {
@@ -38,6 +41,10 @@ export function ThermostatDeviceDetails({
3841
onBack,
3942
className,
4043
}: ThermostatDeviceDetailsProps): JSX.Element | null {
44+
const [temperatureUnit, setTemperatureUnit] = useState<
45+
'fahrenheit' | 'celsius'
46+
>('fahrenheit')
47+
4148
if (device == null) {
4249
return null
4350
}
@@ -47,15 +54,22 @@ export function ThermostatDeviceDetails({
4754
<ContentHeader title={t.thermostat} onBack={onBack} />
4855

4956
<div className='seam-body'>
50-
<ThermostatCard device={device} />
57+
<ThermostatCard
58+
device={device}
59+
temperatureUnit={temperatureUnit}
60+
onChangeTemperatureUnit={setTemperatureUnit}
61+
/>
5162

5263
<div className='seam-thermostat-device-details'>
5364
<DetailSectionGroup>
5465
<DetailSection
5566
label={t.currentSettings}
5667
tooltipContent={t.currentSettingsTooltip}
5768
>
58-
<ClimateSettingRow device={device} />
69+
<ClimateSettingRow
70+
device={device}
71+
temperatureUnit={temperatureUnit}
72+
/>
5973
<FanModeRow device={device} />
6074
</DetailSection>
6175

@@ -112,8 +126,10 @@ function FanModeRow({ device }: { device: ThermostatDevice }): JSX.Element {
112126

113127
function ClimateSettingRow({
114128
device,
129+
temperatureUnit,
115130
}: {
116131
device: ThermostatDevice
132+
temperatureUnit: TemperatureUnit
117133
}): JSX.Element {
118134
const deviceHeatValue =
119135
device.properties.current_climate_setting.heating_set_point_fahrenheit
@@ -257,7 +273,7 @@ function ClimateSettingRow({
257273
rightCollapsedContent={
258274
<ClimateSettingStatus
259275
climateSetting={device.properties.current_climate_setting}
260-
temperatureUnit='fahrenheit'
276+
temperatureUnit={temperatureUnit}
261277
iconPlacement='right'
262278
/>
263279
}

src/lib/ui/thermostat/ClimateSettingStatus.tsx

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,10 +4,11 @@ import { ThermostatHeatCoolIcon } from 'lib/icons/ThermostatHeatCool.js'
44
import { ThermostatOffIcon } from 'lib/icons/ThermostatOff.js'
55
import type { ClimateSetting } from 'lib/seam/thermostats/thermostat-device.js'
66
import { Temperature } from 'lib/ui/thermostat/Temperature.js'
7+
import type { TemperatureUnit } from 'lib/ui/thermostat/ThermostatCard.js'
78

89
interface ClimateSettingStatusProps {
910
climateSetting: ClimateSetting
10-
temperatureUnit?: 'fahrenheit' | 'celsius'
11+
temperatureUnit?: TemperatureUnit
1112
iconPlacement?: 'left' | 'right'
1213
}
1314

src/lib/ui/thermostat/ThermostatCard.tsx

Lines changed: 27 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -8,27 +8,45 @@ import { DeviceImage } from 'lib/ui/device/DeviceImage.js'
88
import { ClimateSettingStatus } from 'lib/ui/thermostat/ClimateSettingStatus.js'
99
import { Temperature } from 'lib/ui/thermostat/Temperature.js'
1010

11+
export type TemperatureUnit = 'fahrenheit' | 'celsius'
12+
1113
interface ThermostatCardProps {
1214
device: ThermostatDevice
15+
temperatureUnit?: TemperatureUnit
16+
onChangeTemperatureUnit?: (temperatureUnit: TemperatureUnit) => void
1317
}
1418

15-
export function ThermostatCard({ device }: ThermostatCardProps): JSX.Element {
19+
export function ThermostatCard({
20+
device,
21+
temperatureUnit: externallySpecifiedTemperatureUnit,
22+
onChangeTemperatureUnit: onExternalChangeTemperatureUnit,
23+
}: ThermostatCardProps): JSX.Element {
24+
const [internalTemperatureUnit, setInternalTemperatureUnit] =
25+
useState<TemperatureUnit>('fahrenheit')
1626
return (
1727
<div className='seam-thermostat-card'>
18-
<Content device={device} />
28+
<Content
29+
device={device}
30+
temperatureUnit={
31+
externallySpecifiedTemperatureUnit ?? internalTemperatureUnit
32+
}
33+
onChangeTemperatureUnit={
34+
onExternalChangeTemperatureUnit ?? setInternalTemperatureUnit
35+
}
36+
/>
1937
</div>
2038
)
2139
}
2240

23-
function Content(props: { device: ThermostatDevice }): JSX.Element | null {
24-
const { device } = props
25-
26-
const [temperatureUnit, setTemperatureUnit] = useState<
27-
'fahrenheit' | 'celsius'
28-
>('fahrenheit')
41+
function Content(props: {
42+
device: ThermostatDevice
43+
temperatureUnit: TemperatureUnit
44+
onChangeTemperatureUnit: (temperatureUnit: TemperatureUnit) => void
45+
}): JSX.Element | null {
46+
const { device, temperatureUnit, onChangeTemperatureUnit } = props
2947

3048
const toggleTemperatureUnit = (): void => {
31-
setTemperatureUnit(
49+
onChangeTemperatureUnit(
3250
temperatureUnit === 'fahrenheit' ? 'celsius' : 'fahrenheit'
3351
)
3452
}

0 commit comments

Comments
 (0)