Skip to content

Commit e5c84d8

Browse files
committed
fix: Show offline lock devices
1 parent 6e109ed commit e5c84d8

File tree

4 files changed

+42
-24
lines changed

4 files changed

+42
-24
lines changed

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -66,7 +66,7 @@ function Content(props: {
6666
{t.deviceDetails}
6767
</TextButton>
6868
</div>
69-
{!disableLockUnlock && (
69+
{!disableLockUnlock && device.properties.online && (
7070
<Button
7171
onClick={() => {
7272
toggleLock.mutate()

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

Lines changed: 26 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -101,8 +101,12 @@ export function LockDeviceDetails({
101101
<div className='seam-properties'>
102102
<span className='seam-label'>{t.status}:</span>{' '}
103103
<OnlineStatus device={device} />
104-
<span className='seam-label'>{t.power}:</span>{' '}
105-
<BatteryStatus device={device} />
104+
{device.properties.online && (
105+
<>
106+
<span className='seam-label'>{t.power}:</span>{' '}
107+
<BatteryStatus device={device} />
108+
</>
109+
)}
106110
<DeviceModel device={device} />
107111
</div>
108112
</div>
@@ -120,27 +124,28 @@ export function LockDeviceDetails({
120124
<ChevronRightIcon />
121125
</div>
122126
</div>
123-
124127
<div className='seam-box'>
125-
<div className='seam-content seam-lock-status'>
126-
<div>
127-
<span className='seam-label'>{t.lockStatus}</span>
128-
<span className='seam-value'>{lockStatus}</span>
129-
</div>
130-
<div className='seam-right'>
131-
{!disableLockUnlock &&
132-
device.capabilities_supported.includes('lock') && (
133-
<Button
134-
size='small'
135-
onClick={() => {
136-
toggleLock.mutate()
137-
}}
138-
>
139-
{toggleLockLabel}
140-
</Button>
141-
)}
128+
{device.properties.locked != null && device.properties.online && (
129+
<div className='seam-content seam-lock-status'>
130+
<div>
131+
<span className='seam-label'>{t.lockStatus}</span>
132+
<span className='seam-value'>{lockStatus}</span>
133+
</div>
134+
<div className='seam-right'>
135+
{!disableLockUnlock &&
136+
device.capabilities_supported.includes('lock') && (
137+
<Button
138+
size='small'
139+
onClick={() => {
140+
toggleLock.mutate()
141+
}}
142+
>
143+
{toggleLockLabel}
144+
</Button>
145+
)}
146+
</div>
142147
</div>
143-
</div>
148+
)}
144149
<AccessCodeLength
145150
supportedCodeLengths={
146151
device.properties?.supported_code_lengths ?? []

src/lib/seam/locks/lock-device.ts

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,13 @@
11
import type { CommonDevice, LockDevice } from 'seamapi'
22

3-
export const isLockDevice = (device: CommonDevice): device is LockDevice =>
4-
'locked' in device.properties
3+
export const isLockDevice = (device: CommonDevice): device is LockDevice => {
4+
const d = device as any
5+
return (
6+
(d.properties.online_access_codes_enabled as boolean) ||
7+
(d.properties.offline_access_codes_enabled as boolean) ||
8+
'can_remotely_lock' in d ||
9+
'can_remotely_unlock' in d ||
10+
'can_program_online_access_code' in d ||
11+
'can_program_offline_access_code' in d
12+
)
13+
}

src/lib/ui/device/LockStatus.tsx

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,10 @@ export function LockStatus(props: LockStatusProps): JSX.Element | null {
1919
},
2020
} = props
2121

22+
if (locked == null) {
23+
return null
24+
}
25+
2226
return (
2327
<div className='seam-lock-status'>
2428
<Content isLocked={locked} />

0 commit comments

Comments
 (0)