@@ -3,6 +3,8 @@ import classNames from 'classnames'
33import { DateTime } from 'luxon'
44import { useCallback , useEffect , useState } from 'react'
55
6+ import { useDevice } from '@seamapi/react/hooks'
7+
68import { CopyIcon } from 'lib/icons/Copy.js'
79import { useAccessCode } from 'lib/seam/access-codes/use-access-code.js'
810import { useDeleteAccessCode } from 'lib/seam/access-codes/use-delete-access-code.js'
@@ -94,6 +96,12 @@ export function AccessCodeDetails({
9496 )
9597 } , [ accessCode , deleteCode , onDelete , preventDefaultOnDelete ] )
9698
99+ const { device } = useDevice ( { device_id : accessCode ?. device_id } ) ;
100+ const cannotSpecifyPinCode = device ?. properties
101+ . code_constraints
102+ ?. some ( ( { constraint_type : type } ) => type === "cannot_specify_pin_code" )
103+ ?? false ;
104+
97105 if ( accessCode == null ) {
98106 return null
99107 }
@@ -164,11 +172,11 @@ export function AccessCodeDetails({
164172
165173 ...( isAccessCodeBeingRemoved
166174 ? [
167- {
168- variant : 'warning' as const ,
169- message : t . warningRemoving ,
170- } ,
171- ]
175+ {
176+ variant : 'warning' as const ,
177+ message : t . warningRemoving ,
178+ } ,
179+ ]
172180 : [ ] ) ,
173181 ]
174182
@@ -192,18 +200,23 @@ export function AccessCodeDetails({
192200 alerts . length > 0 && 'seam-top-has-alerts'
193201 ) }
194202 >
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 >
203+ {
204+ ! cannotSpecifyPinCode && ( < >
205+ < span className = 'seam-label' > { t . accessCode } </ span >
206+ < h5 className = 'seam-access-code-name' > { name } </ h5 >
207+ < div className = 'seam-code' >
208+ < span > { accessCode . code } </ span >
209+ < IconButton
210+ onClick = { ( ) => {
211+ void copyToClipboard ( accessCode . code ?? '' )
212+ } }
213+ >
214+ < CopyIcon />
215+ </ IconButton >
216+ </ div >
217+ </ > )
218+ }
219+
207220 < div className = 'seam-duration' >
208221 < Duration accessCode = { accessCode } />
209222 </ div >
@@ -215,7 +228,8 @@ export function AccessCodeDetails({
215228 onSelectDevice = { selectDevice }
216229 />
217230 </ div >
218- { ( ! disableEditAccessCode || ! disableDeleteAccessCode ) && (
231+
232+ { ( ! cannotSpecifyPinCode && ( ! disableEditAccessCode || ! disableDeleteAccessCode ) ) && (
219233 < div className = 'seam-actions' >
220234 { ! disableEditAccessCode && ! accessCode . is_offline_access_code && (
221235 < Button
@@ -237,6 +251,7 @@ export function AccessCodeDetails({
237251 ) }
238252 </ div >
239253 ) }
254+
240255 < div className = 'seam-details' >
241256 { ! disableResourceIds && (
242257 < div className = 'seam-row' >
0 commit comments