Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
25 commits
Select commit Hold shift + click to select a range
19cd0b4
Add mutation for `manual_override_allowed`
xplato Nov 1, 2023
0af769a
ci: Format code
seambot Nov 1, 2023
f543c55
Format
xplato Nov 1, 2023
1182741
Merge branch 'manual-override-mutation' of github.com:seamapi/react i…
xplato Nov 1, 2023
e0180fa
Merge branch 'main' into manual-override-mutation
xplato Nov 2, 2023
1310866
Update seed data
xplato Nov 2, 2023
52e681a
ci: Format code
seambot Nov 2, 2023
cbacd15
Change mutate func name
xplato Nov 3, 2023
7b1fbe4
Merge branch 'manual-override-mutation' of github.com:seamapi/react i…
xplato Nov 3, 2023
c79cd58
ci: Format code
seambot Nov 3, 2023
4411003
Upgrade `fake-seam-connect`
xplato Nov 6, 2023
a8c23fa
temp: use intermediary state
xplato Nov 6, 2023
6beff02
ci: Format code
seambot Nov 6, 2023
b450899
Merge branch 'main' into manual-override-mutation
xplato Nov 6, 2023
853f7e7
Merge branch 'manual-override-mutation' of github.com:seamapi/react i…
xplato Nov 6, 2023
5e8accc
Remove intermediary state
xplato Nov 6, 2023
10a8aee
ci: Format code
seambot Nov 6, 2023
917ae19
Remove dupe keys and console.log
xplato Nov 6, 2023
7ceda60
Merge branch 'manual-override-mutation' of github.com:seamapi/react i…
xplato Nov 6, 2023
5d2200b
Add spacing
xplato Nov 6, 2023
a84bcb1
ci: Format code
seambot Nov 6, 2023
d4f0e37
Remove `t.yes`, `t.no`
xplato Nov 6, 2023
5a4c3c1
Merge branch 'manual-override-mutation' of github.com:seamapi/react i…
xplato Nov 6, 2023
a805495
Merge branch 'main' into manual-override-mutation
xplato Nov 7, 2023
e8042db
Fix import
xplato Nov 7, 2023
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
14 changes: 10 additions & 4 deletions .storybook/seed-fake.js
Original file line number Diff line number Diff line change
Expand Up @@ -352,6 +352,8 @@ export const seedFake = (db) => {
online: true,
is_cooling: false,
is_heating: false,
is_heating_available: true,
is_cooling_available: true,
manufacturer: 'ecobee',
is_fan_running: false,
model: {
Expand All @@ -371,16 +373,20 @@ export const seedFake = (db) => {
manual_override_allowed: false,
automatic_cooling_enabled: true,
automatic_heating_enabled: true,
cooling_set_point_celsius: 23.88888888888889,
heating_set_point_celsius: 18.333333333333336,
cooling_set_point_fahrenheit: 75,
heating_set_point_fahrenheit: 65,
},
default_climate_setting: {
hvac_mode_setting: 'heat_cool',
manual_override_allowed: false,
automatic_cooling_enabled: true,
automatic_heating_enabled: true,
cooling_set_point_fahrenheit: 75,
heating_set_point_fahrenheit: 65,
},
available_hvac_mode_settings: ['off', 'cool', 'heat', 'heat_cool'],
can_enable_automatic_cooling: true,
can_enable_automatic_heating: true,
is_cooling_available: true,
is_heating_available: true,
min_heating_cooling_delta_fahrenheit: 5,
max_cooling_set_point_fahrenheit: 92,
min_cooling_set_point_fahrenheit: 65,
Expand Down
8 changes: 4 additions & 4 deletions package-lock.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion package.json
Original file line number Diff line number Diff line change
Expand Up @@ -141,7 +141,7 @@
"@mui/material": "^5.12.2",
"@rxfork/r2wc-react-to-web-component": "^2.4.0",
"@seamapi/fake-devicedb": "^1.2.0",
"@seamapi/fake-seam-connect": "^1.41.0",
"@seamapi/fake-seam-connect": "^1.42.0",
"@seamapi/http": "^0.2.1",
"@seamapi/types": "^1.32.0",
"@storybook/addon-designs": "^7.0.1",
Expand Down
56 changes: 45 additions & 11 deletions src/lib/seam/components/DeviceDetails/ThermostatDeviceDetails.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -9,11 +9,13 @@ import type { CommonProps } from 'lib/seam/components/common-props.js'
import { useConnectedAccount } from 'lib/seam/connected-accounts/use-connected-account.js'
import { useClimateSettingSchedules } from 'lib/seam/thermostats/climate-setting-schedules/use-climate-setting-schedules.js'
import { useUpdateFanMode } from 'lib/seam/thermostats/use-update-fan-mode.js'
import { useUpdateThermostat } from 'lib/seam/thermostats/use-update-thermostat.js'
import { ContentHeader } from 'lib/ui/layout/ContentHeader.js'
import { DetailRow } from 'lib/ui/layout/DetailRow.js'
import { DetailSection } from 'lib/ui/layout/DetailSection.js'
import { DetailSectionGroup } from 'lib/ui/layout/DetailSectionGroup.js'
import { Snackbar } from 'lib/ui/Snackbar/Snackbar.js'
import { Switch } from 'lib/ui/Switch/Switch.js'
import { ClimateSettingStatus } from 'lib/ui/thermostat/ClimateSettingStatus.js'
import { FanModeMenu } from 'lib/ui/thermostat/FanModeMenu.js'
import { ThermostatCard } from 'lib/ui/thermostat/ThermostatCard.js'
Expand Down Expand Up @@ -42,7 +44,17 @@ export function ThermostatDeviceDetails({
device_id: device.device_id,
})

const { mutate: updateFanMode, isSuccess, isError } = useUpdateFanMode()
const {
mutate: updateFanMode,
isError: isFanModeError,
isSuccess: isFanModeSuccess,
} = useUpdateFanMode()

const {
mutate: updateThermostat,
isSuccess: isThermostatUpdateSuccess,
isError: isThermostatUpdateError,
} = useUpdateThermostat()

if (climateSettingsOpen) {
return (
Expand Down Expand Up @@ -139,12 +151,20 @@ export function ThermostatDeviceDetails({
)}
</DetailRow>
<DetailRow label={t.allowManualOverride}>
<p>
{device.properties.current_climate_setting
.manual_override_allowed
? t.yes
: t.no}
</p>
<Switch
checked={
device.properties.default_climate_setting
?.manual_override_allowed ?? true
}
onChange={(checked) => {
updateThermostat({
device_id: device.device_id,
default_climate_setting: {
manual_override_allowed: checked,
},
})
}}
/>
</DetailRow>
</DetailSection>

Expand All @@ -170,18 +190,32 @@ export function ThermostatDeviceDetails({
</div>
</div>

<Snackbar
message={t.manualOverrideSuccess}
variant='success'
visible={isThermostatUpdateSuccess}
automaticVisibility
/>

<Snackbar
message={t.manualOverrideError}
variant='error'
visible={isThermostatUpdateError}
automaticVisibility
/>

<Snackbar
message={t.fanModeSuccess}
variant='success'
visible={isSuccess}
visible={isFanModeSuccess}
automaticVisibility
autoDismiss
/>

<Snackbar
message={t.fanModeError}
variant='error'
visible={isError}
visible={isFanModeError}
automaticVisibility
/>
</div>
Expand Down Expand Up @@ -211,8 +245,8 @@ const t = {
linkedAccount: 'Linked account',
deviceId: 'Device ID',
none: 'None',
yes: 'Yes',
no: 'No',
fanModeSuccess: 'Successfully updated fan mode!',
fanModeError: 'Error updating fan mode. Please try again.',
manualOverrideSuccess: 'Successfully updated manual override!',
manualOverrideError: 'Error updating manual override. Please try again.',
}