@@ -13,6 +13,7 @@ import {
1313} from 'lib/seam/components/common-props.js'
1414import { NestedDeviceDetails } from 'lib/seam/components/DeviceDetails/DeviceDetails.js'
1515import { NestedEditAccessCodeForm } from 'lib/seam/components/EditAccessCodeForm/EditAccessCodeForm.js'
16+ import { useDevice } from 'lib/seam/devices/use-device.js'
1617import {
1718 accessCodeErrorFilter ,
1819 accessCodeWarningFilter ,
@@ -94,6 +95,12 @@ export function AccessCodeDetails({
9495 )
9596 } , [ accessCode , deleteCode , onDelete , preventDefaultOnDelete ] )
9697
98+ const { device } = useDevice ( { device_id : accessCode ?. device_id } )
99+ const canSpecifyPinCode =
100+ device ?. properties . code_constraints ?. every (
101+ ( { constraint_type : type } ) => type !== 'cannot_specify_pin_code'
102+ ) ?? true
103+
97104 if ( accessCode == null ) {
98105 return null
99106 }
@@ -192,18 +199,23 @@ export function AccessCodeDetails({
192199 alerts . length > 0 && 'seam-top-has-alerts'
193200 ) }
194201 >
195- < span className = 'seam-label' > { t . accessCode } </ span >
196- < h5 className = 'seam-access-code-name' > { name } </ h5 >
197- < div className = 'seam-code' >
198- < span > { accessCode . code } </ span >
199- < IconButton
200- onClick = { ( ) => {
201- void copyToClipboard ( accessCode . code ?? '' )
202- } }
203- >
204- < CopyIcon />
205- </ IconButton >
206- </ div >
202+ { canSpecifyPinCode && (
203+ < >
204+ < span className = 'seam-label' > { t . accessCode } </ span >
205+ < h5 className = 'seam-access-code-name' > { name } </ h5 >
206+ < div className = 'seam-code' >
207+ < span > { accessCode . code } </ span >
208+ < IconButton
209+ onClick = { ( ) => {
210+ void copyToClipboard ( accessCode . code ?? '' )
211+ } }
212+ >
213+ < CopyIcon />
214+ </ IconButton >
215+ </ div >
216+ </ >
217+ ) }
218+
207219 < div className = 'seam-duration' >
208220 < Duration accessCode = { accessCode } />
209221 </ div >
@@ -215,28 +227,32 @@ export function AccessCodeDetails({
215227 onSelectDevice = { selectDevice }
216228 />
217229 </ div >
218- { ( ! disableEditAccessCode || ! disableDeleteAccessCode ) && (
219- < div className = 'seam-actions' >
220- { ! disableEditAccessCode && ! accessCode . is_offline_access_code && (
221- < Button
222- size = 'small'
223- onClick = { handleEdit }
224- disabled = { isAccessCodeBeingRemoved || isDeleting }
225- >
226- { t . editCode }
227- </ Button >
228- ) }
229- { ! disableDeleteAccessCode && ! accessCode . is_offline_access_code && (
230- < Button
231- size = 'small'
232- onClick = { handleDelete }
233- disabled = { isAccessCodeBeingRemoved || isDeleting }
234- >
235- { t . deleteCode }
236- </ Button >
237- ) }
238- </ div >
239- ) }
230+
231+ { canSpecifyPinCode &&
232+ ( ! disableEditAccessCode || ! disableDeleteAccessCode ) && (
233+ < div className = 'seam-actions' >
234+ { ! disableEditAccessCode && ! accessCode . is_offline_access_code && (
235+ < Button
236+ size = 'small'
237+ onClick = { handleEdit }
238+ disabled = { isAccessCodeBeingRemoved || isDeleting }
239+ >
240+ { t . editCode }
241+ </ Button >
242+ ) }
243+ { ! disableDeleteAccessCode &&
244+ ! accessCode . is_offline_access_code && (
245+ < Button
246+ size = 'small'
247+ onClick = { handleDelete }
248+ disabled = { isAccessCodeBeingRemoved || isDeleting }
249+ >
250+ { t . deleteCode }
251+ </ Button >
252+ ) }
253+ </ div >
254+ ) }
255+
240256 < div className = 'seam-details' >
241257 { ! disableResourceIds && (
242258 < div className = 'seam-row' >
0 commit comments