1- import React , { RefObject , useState } from 'react' ;
1+ import React , { RefObject , useState , useEffect } from 'react' ;
22import Button from '../button' ;
33import cx from 'classnames' ;
44import useComponentVisible from '../../hooks/useComponentVisible' ;
@@ -14,8 +14,8 @@ export function StartStopJoinButton({ devices, setPermitJoin, bridgeInfo }: Star
1414 const { t } = useTranslation ( [ 'navbar' ] ) ;
1515 const { ref, isComponentVisible, setIsComponentVisible } = useComponentVisible ( false ) ;
1616 const [ selectedRouter , setSelectedRouter ] = useState < Device > ( { } as Device ) ;
17- const { permit_join_timeout : permitJoinTimeout } = bridgeInfo ;
18- const permitJoin = permitJoinTimeout > 0 ;
17+ const [ permitJoinTimeout , setPermitJoinTimeout ] = useState < number | undefined > ( undefined ) ;
18+ const { permit_join : permitJoin , permit_join_end : permitJoinEnd } = bridgeInfo ;
1919
2020 const selectAndHide = ( device : Device ) => {
2121 setSelectedRouter ( device ) ;
@@ -39,6 +39,21 @@ export function StartStopJoinButton({ devices, setPermitJoin, bridgeInfo }: Star
3939 const onBtnClick = ( ) => {
4040 setPermitJoin ( permitJoin ? 0 : 254 , selectedRouter ) ;
4141 } ;
42+ const updatePermitJoinTimeout = ( ) => {
43+ setPermitJoinTimeout ( permitJoinEnd ? Math . round ( ( permitJoinEnd - Date . now ( ) ) / 1000 ) : undefined ) ;
44+ } ;
45+
46+ useEffect ( ( ) => {
47+ let interval ;
48+ updatePermitJoinTimeout ( ) ;
49+
50+ if ( permitJoinEnd ) {
51+ interval = setInterval ( ( ) => updatePermitJoinTimeout ( ) , 1000 ) ;
52+ }
53+
54+ return ( ) => clearInterval ( interval ) ;
55+ } , [ permitJoinEnd ] ) ;
56+
4257 const permitJoinTimer = (
4358 < >
4459 { permitJoinTimeout ? (
0 commit comments