11import classNames from 'classnames'
22import { type HTMLAttributes , type ReactNode , useState } from 'react'
33
4+ import { getErrorMessage } from 'lib/errors.js'
45import { AddIcon } from 'lib/icons/Add.js'
56import { EditIcon } from 'lib/icons/Edit.js'
67import { FanIcon } from 'lib/icons/Fan.js'
@@ -18,6 +19,7 @@ import { IconButton } from 'lib/ui/IconButton.js'
1819import { ContentHeader } from 'lib/ui/layout/ContentHeader.js'
1920import { Popover } from 'lib/ui/Popover/Popover.js'
2021import { PopoverContentPrompt } from 'lib/ui/Popover/PopoverContentPrompt.js'
22+ import { Snackbar } from 'lib/ui/Snackbar/Snackbar.js'
2123import { Spinner } from 'lib/ui/Spinner/Spinner.js'
2224import { ClimatePreset } from 'lib/ui/thermostat/ClimatePreset.js'
2325
@@ -40,7 +42,11 @@ export function ClimatePresets(props: ClimatePresetsManagement): JSX.Element {
4042 climatePresetKeySelectedForDeletion ,
4143 setClimatePresetKeySelectedForDeletion ,
4244 ] = useState < ThermostatClimatePreset [ 'climate_preset_key' ] | null > ( null )
43- const deleteMutation = useDeleteThermostatClimatePreset ( )
45+
46+ const { mutate, isError, error, isPending } =
47+ useDeleteThermostatClimatePreset ( )
48+
49+ const errorMessage = getErrorMessage ( error )
4450
4551 if (
4652 selectedClimatePreset != null ||
@@ -62,52 +68,61 @@ export function ClimatePresets(props: ClimatePresetsManagement): JSX.Element {
6268 }
6369
6470 return (
65- < div className = 'seam-thermostat-climate-presets' >
66- < ContentHeader title = { t . title } onBack = { onBack } />
67- < div className = 'seam-thermostat-climate-presets-body' >
68- < Button
69- onClick = { ( ) => {
70- setSelectedClimatePreset ( CreateNewPresetSymbol )
71- } }
72- className = 'seam-climate-presets-add-button'
73- >
74- < AddIcon />
75- { t . createNew }
76- </ Button >
77-
78- < div className = 'seam-thermostat-climate-presets-cards' >
79- { device . properties . available_climate_presets . map ( ( preset ) => (
80- < PresetCard
81- onClickEdit = { ( ) => {
82- setSelectedClimatePreset ( preset )
83- } }
84- onClickDelete = { ( ) => {
85- setClimatePresetKeySelectedForDeletion (
86- preset . climate_preset_key
87- )
88- deleteMutation . mutate ( {
89- climate_preset_key : preset . climate_preset_key ,
90- device_id : device . device_id ,
91- } )
92- } }
93- temperatureUnit = { props . temperatureUnit }
94- preset = { preset }
95- key = { preset . climate_preset_key }
96- deletionLoading = {
97- deleteMutation . isPending &&
98- climatePresetKeySelectedForDeletion ===
99- preset . climate_preset_key
100- }
101- disabled = {
102- deleteMutation . isPending &&
103- climatePresetKeySelectedForDeletion !==
104- preset . climate_preset_key
105- }
106- />
107- ) ) }
71+ < >
72+ < Snackbar
73+ message = { errorMessage }
74+ variant = 'error'
75+ visible = { isError }
76+ automaticVisibility
77+ />
78+
79+ < div className = 'seam-thermostat-climate-presets' >
80+ < ContentHeader title = { t . title } onBack = { onBack } />
81+ < div className = 'seam-thermostat-climate-presets-body' >
82+ < Button
83+ onClick = { ( ) => {
84+ setSelectedClimatePreset ( CreateNewPresetSymbol )
85+ } }
86+ className = 'seam-climate-presets-add-button'
87+ >
88+ < AddIcon />
89+ { t . createNew }
90+ </ Button >
91+
92+ < div className = 'seam-thermostat-climate-presets-cards' >
93+ { device . properties . available_climate_presets . map ( ( preset ) => (
94+ < PresetCard
95+ onClickEdit = { ( ) => {
96+ setSelectedClimatePreset ( preset )
97+ } }
98+ onClickDelete = { ( ) => {
99+ setClimatePresetKeySelectedForDeletion (
100+ preset . climate_preset_key
101+ )
102+ mutate ( {
103+ climate_preset_key : preset . climate_preset_key ,
104+ device_id : device . device_id ,
105+ } )
106+ } }
107+ temperatureUnit = { props . temperatureUnit }
108+ preset = { preset }
109+ key = { preset . climate_preset_key }
110+ deletionLoading = {
111+ isPending &&
112+ climatePresetKeySelectedForDeletion ===
113+ preset . climate_preset_key
114+ }
115+ disabled = {
116+ isPending &&
117+ climatePresetKeySelectedForDeletion !==
118+ preset . climate_preset_key
119+ }
120+ />
121+ ) ) }
122+ </ div >
108123 </ div >
109124 </ div >
110- </ div >
125+ </ >
111126 )
112127}
113128
@@ -232,4 +247,5 @@ const t = {
232247 createNew : 'Create New' ,
233248 delete : 'Delete' ,
234249 edit : 'Edit' ,
250+ climatePresetNotFound : 'Climate Preset not found.' ,
235251}
0 commit comments