Skip to content

Commit 59b906a

Browse files
committed
use duplication
1 parent 0affc48 commit 59b906a

File tree

3 files changed

+50
-53
lines changed

3 files changed

+50
-53
lines changed

src/lib/seam/components/AccessCodeDetails/AccessCodeDevice.tsx

Lines changed: 25 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,11 @@
1+
import { useState } from 'react'
2+
13
import { useDevice } from 'lib/seam/devices/use-device.js'
24
import { isLockDevice, type LockDevice } from 'lib/seam/locks/lock-device.js'
35
import { useToggleLock } from 'lib/seam/locks/use-toggle-lock.js'
4-
import { useToggleLockSnackbar } from 'lib/seam/locks/use-toggle-lock-snackbar.js'
56
import { Button } from 'lib/ui/Button.js'
67
import { DeviceImage } from 'lib/ui/device/DeviceImage.js'
8+
import { Snackbar, type SnackbarVariant } from 'lib/ui/Snackbar/Snackbar.js'
79
import { TextButton } from 'lib/ui/TextButton.js'
810

911
export function AccessCodeDevice({
@@ -50,22 +52,38 @@ function Content(props: {
5052
onSelectDevice: (deviceId: string) => void
5153
}): JSX.Element {
5254
const { device, disableLockUnlock, onSelectDevice } = props
55+
const [snackbarVisible, setSnackbarVisible] = useState(false)
56+
const [snackbarVariant, setSnackbarVariant] =
57+
useState<SnackbarVariant>('success')
5358

54-
const { ToggleLockSnackbarNode, showToggleSnackbar } = useToggleLockSnackbar()
5559
const toggleLock = useToggleLock({
5660
onSuccess: () => {
57-
showToggleSnackbar('success')
61+
setSnackbarVisible(true)
62+
setSnackbarVariant('success')
5863
},
5964
onError: () => {
60-
showToggleSnackbar('error')
65+
setSnackbarVisible(true)
66+
setSnackbarVariant('error')
6167
},
6268
})
6369

6470
const toggleLockLabel = device.properties.locked ? t.unlock : t.lock
6571

6672
return (
6773
<>
68-
{ToggleLockSnackbarNode}
74+
<Snackbar
75+
variant={snackbarVariant}
76+
visible={snackbarVisible}
77+
onClose={() => {
78+
setSnackbarVisible(false)
79+
}}
80+
message={
81+
snackbarVariant === 'success'
82+
? t.successfullyUpdated
83+
: t.failedToUpdate
84+
}
85+
autoDismiss
86+
/>
6987

7088
<div className='seam-access-code-device'>
7189
<div className='seam-device-image'>
@@ -99,4 +117,6 @@ const t = {
99117
deviceDetails: 'Device details',
100118
unlock: 'Unlock',
101119
lock: 'Lock',
120+
successfullyUpdated: 'Lock status has been successfully updated',
121+
failedToUpdate: 'Failed to update lock status',
102122
}

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

Lines changed: 25 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
import classNames from 'classnames'
2+
import { useState } from 'react'
23

34
import { ChevronRightIcon } from 'lib/icons/ChevronRight.js'
45
import { useAccessCodes } from 'lib/seam/access-codes/use-access-codes.js'
@@ -9,14 +10,14 @@ import { DeviceModel } from 'lib/seam/components/DeviceDetails/DeviceModel.js'
910
import { deviceErrorFilter, deviceWarningFilter } from 'lib/seam/filters.js'
1011
import type { LockDevice } from 'lib/seam/locks/lock-device.js'
1112
import { useToggleLock } from 'lib/seam/locks/use-toggle-lock.js'
12-
import { useToggleLockSnackbar } from 'lib/seam/locks/use-toggle-lock-snackbar.js'
1313
import { Alerts } from 'lib/ui/Alert/Alerts.js'
1414
import { Button } from 'lib/ui/Button.js'
1515
import { BatteryStatusIndicator } from 'lib/ui/device/BatteryStatusIndicator.js'
1616
import { DeviceImage } from 'lib/ui/device/DeviceImage.js'
1717
import { EditableDeviceName } from 'lib/ui/device/EditableDeviceName.js'
1818
import { OnlineStatus } from 'lib/ui/device/OnlineStatus.js'
1919
import { ContentHeader } from 'lib/ui/layout/ContentHeader.js'
20+
import { Snackbar, type SnackbarVariant } from 'lib/ui/Snackbar/Snackbar.js'
2021
import { useToggle } from 'lib/ui/use-toggle.js'
2122

2223
interface LockDeviceDetailsProps extends NestedSpecificDeviceDetailsProps {
@@ -43,13 +44,18 @@ export function LockDeviceDetails({
4344
device_id: device.device_id,
4445
})
4546

46-
const { ToggleLockSnackbarNode, showToggleSnackbar } = useToggleLockSnackbar()
47+
const [snackbarVisible, setSnackbarVisible] = useState(false)
48+
const [snackbarVariant, setSnackbarVariant] =
49+
useState<SnackbarVariant>('success')
50+
4751
const toggleLock = useToggleLock({
4852
onSuccess: () => {
49-
showToggleSnackbar('success')
53+
setSnackbarVisible(true)
54+
setSnackbarVariant('success')
5055
},
5156
onError: () => {
52-
showToggleSnackbar('error')
57+
setSnackbarVisible(true)
58+
setSnackbarVariant('error')
5359
},
5460
})
5561

@@ -99,7 +105,19 @@ export function LockDeviceDetails({
99105

100106
return (
101107
<>
102-
{ToggleLockSnackbarNode}
108+
<Snackbar
109+
variant={snackbarVariant}
110+
visible={snackbarVisible}
111+
onClose={() => {
112+
setSnackbarVisible(false)
113+
}}
114+
message={
115+
snackbarVariant === 'success'
116+
? t.successfullyUpdated
117+
: t.failedToUpdate
118+
}
119+
autoDismiss
120+
/>
103121

104122
<div className={classNames('seam-device-details', className)}>
105123
<ContentHeader title='Device' onBack={onBack} />
@@ -222,4 +240,6 @@ const t = {
222240
lockStatus: 'Lock status',
223241
status: 'Status',
224242
power: 'Power',
243+
successfullyUpdated: 'Lock status has been successfully updated',
244+
failedToUpdate: 'Failed to update lock status',
225245
}

src/lib/seam/locks/use-toggle-lock-snackbar.tsx

Lines changed: 0 additions & 43 deletions
This file was deleted.

0 commit comments

Comments
 (0)