Skip to content

Commit b281732

Browse files
committed
conditionally render UI based on availability: online, device property, access code type, etc.
1 parent 97cd9bc commit b281732

File tree

5 files changed

+53
-31
lines changed

5 files changed

+53
-31
lines changed

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

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -217,7 +217,7 @@ export function AccessCodeDetails({
217217
</div>
218218
{(!disableEditAccessCode || !disableDeleteAccessCode) && (
219219
<div className='seam-actions'>
220-
{!disableEditAccessCode && (
220+
{!disableEditAccessCode && !accessCode.is_offline_access_code && (
221221
<Button
222222
size='small'
223223
onClick={handleEdit}
@@ -226,7 +226,7 @@ export function AccessCodeDetails({
226226
{t.editCode}
227227
</Button>
228228
)}
229-
{!disableDeleteAccessCode && (
229+
{!disableDeleteAccessCode && !accessCode.is_offline_access_code && (
230230
<Button
231231
size='small'
232232
onClick={handleDelete}

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

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

src/lib/seam/components/AccessCodeTable/AccessCodeTable.tsx

Lines changed: 19 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@ import { TableTitle } from 'lib/ui/Table/TableTitle.js'
2929
import { SearchTextField } from 'lib/ui/TextField/SearchTextField.js'
3030
import { Caption } from 'lib/ui/typography/Caption.js'
3131
import { useToggle } from 'lib/ui/use-toggle.js'
32+
import { useDevice } from 'lib/index.js'
3233

3334
export const NestedAccessCodeTable = withRequiredCommonProps(AccessCodeTable)
3435

@@ -73,6 +74,10 @@ export function AccessCodeTable({
7374
device_id: deviceId,
7475
})
7576

77+
const { device } = useDevice({
78+
device_id: deviceId,
79+
})
80+
7681
const [selectedViewAccessCodeId, setSelectedViewAccessCodeId] = useState<
7782
string | null
7883
>(null)
@@ -128,6 +133,10 @@ export function AccessCodeTable({
128133
}
129134
}, [accessCodeResult])
130135

136+
if (device == null) {
137+
return <></>
138+
}
139+
131140
if (selectedEditAccessCodeId != null) {
132141
return (
133142
<NestedEditAccessCodeForm
@@ -214,14 +223,16 @@ export function AccessCodeTable({
214223
) : (
215224
<div className='seam-fragment' />
216225
)}
217-
{!disableCreateAccessCode && (
218-
<IconButton
219-
onClick={toggleAddAccessCodeForm}
220-
className='seam-add-button'
221-
>
222-
<AddIcon />
223-
</IconButton>
224-
)}
226+
{!disableCreateAccessCode &&
227+
(device.properties.online_access_codes_enabled === true ||
228+
device.can_program_online_access_codes === true) && (
229+
<IconButton
230+
onClick={toggleAddAccessCodeForm}
231+
className='seam-add-button'
232+
>
233+
<AddIcon />
234+
</IconButton>
235+
)}
225236
</div>
226237
<div className='seam-table-header-loading-wrap'>
227238
<LoadingToast

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

Lines changed: 27 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -99,8 +99,12 @@ export function LockDeviceDetails({
9999
<div className='seam-properties'>
100100
<span className='seam-label'>{t.status}:</span>{' '}
101101
<OnlineStatus device={device} />
102-
<span className='seam-label'>{t.power}:</span>{' '}
103-
<BatteryStatusIndicator device={device} />
102+
{device.properties.online && (
103+
<>
104+
<span className='seam-label'>{t.power}:</span>{' '}
105+
<BatteryStatusIndicator device={device} />
106+
</>
107+
)}
104108
<DeviceModel device={device} />
105109
</div>
106110
</div>
@@ -120,25 +124,28 @@ export function LockDeviceDetails({
120124
</div>
121125

122126
<div className='seam-box'>
123-
<div className='seam-content seam-lock-status'>
124-
<div>
125-
<span className='seam-label'>{t.lockStatus}</span>
126-
<span className='seam-value'>{lockStatus}</span>
127-
</div>
128-
<div className='seam-right'>
129-
{!disableLockUnlock &&
130-
device.capabilities_supported.includes('lock') && (
131-
<Button
132-
size='small'
133-
onClick={() => {
134-
toggleLock.mutate(device)
135-
}}
136-
>
137-
{toggleLockLabel}
138-
</Button>
139-
)}
127+
{device.properties.locked && device.properties.online && (
128+
<div className='seam-content seam-lock-status'>
129+
<div>
130+
<span className='seam-label'>{t.lockStatus}</span>
131+
<span className='seam-value'>{lockStatus}</span>
132+
</div>
133+
<div className='seam-right'>
134+
{!disableLockUnlock &&
135+
device.capabilities_supported.includes('lock') && (
136+
<Button
137+
size='small'
138+
onClick={() => {
139+
toggleLock.mutate(device)
140+
}}
141+
>
142+
{toggleLockLabel}
143+
</Button>
144+
)}
145+
</div>
140146
</div>
141-
</div>
147+
)}
148+
142149
<AccessCodeLength
143150
supportedCodeLengths={
144151
device.properties?.supported_code_lengths ?? []

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)