@@ -9,6 +9,7 @@ import { DeviceModel } from 'lib/seam/components/DeviceDetails/DeviceModel.js'
99import { deviceErrorFilter , deviceWarningFilter } from 'lib/seam/filters.js'
1010import type { LockDevice } from 'lib/seam/locks/lock-device.js'
1111import { useToggleLock } from 'lib/seam/locks/use-toggle-lock.js'
12+ import { useToggleLockSnackbar } from 'lib/seam/locks/use-toggle-lock-snackbar.js'
1213import { Alerts } from 'lib/ui/Alert/Alerts.js'
1314import { Button } from 'lib/ui/Button.js'
1415import { BatteryStatusIndicator } from 'lib/ui/device/BatteryStatusIndicator.js'
@@ -38,11 +39,20 @@ export function LockDeviceDetails({
3839 onEditName,
3940} : LockDeviceDetailsProps ) : JSX . Element | null {
4041 const [ accessCodesOpen , toggleAccessCodesOpen ] = useToggle ( )
41- const toggleLock = useToggleLock ( )
4242 const { accessCodes } = useAccessCodes ( {
4343 device_id : device . device_id ,
4444 } )
4545
46+ const { renderSnackbar, showToggleSnackbar } = useToggleLockSnackbar ( )
47+ const toggleLock = useToggleLock ( {
48+ onSuccess : ( ) => {
49+ showToggleSnackbar ( 'success' )
50+ } ,
51+ onError : ( ) => {
52+ showToggleSnackbar ( 'error' )
53+ } ,
54+ } )
55+
4656 const lockStatus = device . properties . locked ? t . locked : t . unlocked
4757 const toggleLockLabel = device . properties . locked ? t . unlock : t . lock
4858
@@ -88,87 +98,91 @@ export function LockDeviceDetails({
8898 ]
8999
90100 return (
91- < div className = { classNames ( 'seam-device-details' , className ) } >
92- < ContentHeader title = 'Device' onBack = { onBack } />
93- < div className = 'seam-body' >
94- < div className = 'seam-summary' >
95- < div className = 'seam-content' >
96- < div className = 'seam-image' >
97- < DeviceImage device = { device } />
98- </ div >
99- < div className = 'seam-info' >
100- < span className = 'seam-label' > { t . device } </ span >
101- < EditableDeviceName
102- tagName = 'h4'
103- value = { device . properties . name }
104- className = 'seam-device-name'
105- onEdit = { onEditName }
106- />
107- < div className = 'seam-properties' >
108- < span className = 'seam-label' > { t . status } :</ span > { ' ' }
109- < OnlineStatus device = { device } />
110- { device . properties . online && (
111- < >
112- < span className = 'seam-label' > { t . power } :</ span > { ' ' }
113- < BatteryStatusIndicator device = { device } />
114- </ >
115- ) }
116- < DeviceModel device = { device } />
101+ < >
102+ { renderSnackbar ( ) }
103+
104+ < div className = { classNames ( 'seam-device-details' , className ) } >
105+ < ContentHeader title = 'Device' onBack = { onBack } />
106+ < div className = 'seam-body' >
107+ < div className = 'seam-summary' >
108+ < div className = 'seam-content' >
109+ < div className = 'seam-image' >
110+ < DeviceImage device = { device } />
111+ </ div >
112+ < div className = 'seam-info' >
113+ < span className = 'seam-label' > { t . device } </ span >
114+ < EditableDeviceName
115+ tagName = 'h4'
116+ value = { device . properties . name }
117+ className = 'seam-device-name'
118+ onEdit = { onEditName }
119+ />
120+ < div className = 'seam-properties' >
121+ < span className = 'seam-label' > { t . status } :</ span > { ' ' }
122+ < OnlineStatus device = { device } />
123+ { device . properties . online && (
124+ < >
125+ < span className = 'seam-label' > { t . power } :</ span > { ' ' }
126+ < BatteryStatusIndicator device = { device } />
127+ </ >
128+ ) }
129+ < DeviceModel device = { device } />
130+ </ div >
117131 </ div >
118132 </ div >
133+ < Alerts alerts = { alerts } className = 'seam-alerts-space-top' />
119134 </ div >
120- < Alerts alerts = { alerts } className = 'seam-alerts-space-top' />
121- </ div >
122- < div className = 'seam-box' >
123- < div
124- className = 'seam-content seam-access-codes'
125- onClick = { toggleAccessCodesOpen }
126- >
127- < span className = 'seam-value' >
128- { accessCodeCount } { t . accessCodes }
129- </ span >
130- < ChevronRightIcon />
135+ < div className = 'seam-box' >
136+ < div
137+ className = 'seam-content seam-access-codes'
138+ onClick = { toggleAccessCodesOpen }
139+ >
140+ < span className = 'seam-value' >
141+ { accessCodeCount } { t . accessCodes }
142+ </ span >
143+ < ChevronRightIcon />
144+ </ div >
131145 </ div >
132- </ div >
133146
134- < div className = 'seam-box' >
135- { device . properties . locked && device . properties . online && (
136- < div className = 'seam-content seam-lock-status' >
137- < div >
138- < span className = 'seam-label' > { t . lockStatus } </ span >
139- < span className = 'seam-value' > { lockStatus } </ span >
140- </ div >
141- < div className = 'seam-right' >
142- { ! disableLockUnlock &&
143- device . capabilities_supported . includes ( 'lock' ) && (
144- < Button
145- size = 'small'
146- onClick = { ( ) => {
147- toggleLock . mutate ( device )
148- } }
149- >
150- { toggleLockLabel }
151- </ Button >
152- ) }
147+ < div className = 'seam-box' >
148+ { device . properties . locked && device . properties . online && (
149+ < div className = 'seam-content seam-lock-status' >
150+ < div >
151+ < span className = 'seam-label' > { t . lockStatus } </ span >
152+ < span className = 'seam-value' > { lockStatus } </ span >
153+ </ div >
154+ < div className = 'seam-right' >
155+ { ! disableLockUnlock &&
156+ device . capabilities_supported . includes ( 'lock' ) && (
157+ < Button
158+ size = 'small'
159+ onClick = { ( ) => {
160+ toggleLock . mutate ( device )
161+ } }
162+ >
163+ { toggleLockLabel }
164+ </ Button >
165+ ) }
166+ </ div >
153167 </ div >
154- </ div >
155- ) }
168+ ) }
156169
157- < AccessCodeLength
158- supportedCodeLengths = {
159- device . properties ?. supported_code_lengths ?? [ ]
170+ < AccessCodeLength
171+ supportedCodeLengths = {
172+ device . properties ?. supported_code_lengths ?? [ ]
173+ }
174+ />
175+ </ div >
176+ < DeviceInfo
177+ device = { device }
178+ disableConnectedAccountInformation = {
179+ disableConnectedAccountInformation
160180 }
181+ disableResourceIds = { disableResourceIds }
161182 />
162183 </ div >
163- < DeviceInfo
164- device = { device }
165- disableConnectedAccountInformation = {
166- disableConnectedAccountInformation
167- }
168- disableResourceIds = { disableResourceIds }
169- />
170184 </ div >
171- </ div >
185+ </ >
172186 )
173187}
174188
0 commit comments