@@ -43,7 +43,7 @@ export default function useOpen(
4343 propOpen : boolean ,
4444 onOpen : ( nextOpen : boolean ) => void ,
4545 postOpen : ( nextOpen : boolean ) => boolean ,
46- ) : [ boolean , TriggerOpenType ] {
46+ ) : [ open : boolean , toggleOpen : TriggerOpenType , lockOptions : boolean ] {
4747 // SSR not support Portal which means we need delay `open` for the first time render
4848 const [ rendered , setRendered ] = useState ( false ) ;
4949
@@ -53,6 +53,9 @@ export default function useOpen(
5353
5454 const [ stateOpen , internalSetOpen ] = useControlledState ( defaultOpen , propOpen ) ;
5555
56+ // Lock for options update
57+ const [ lock , setLock ] = useState ( false ) ;
58+
5659 // During SSR, always return false for open state
5760 const ssrSafeOpen = rendered ? stateOpen : false ;
5861 const mergedOpen = postOpen ( ssrSafeOpen ) ;
@@ -70,9 +73,11 @@ export default function useOpen(
7073 const { cancelFun } = config ;
7174
7275 taskIdRef . current += 1 ;
76+
7377 const id = taskIdRef . current ;
7478
7579 const nextOpenVal = typeof nextOpen === 'boolean' ? nextOpen : ! mergedOpen ;
80+ setLock ( ! nextOpenVal ) ;
7681
7782 function triggerUpdate ( ) {
7883 if (
@@ -82,6 +87,7 @@ export default function useOpen(
8287 ! cancelFun ?.( )
8388 ) {
8489 triggerEvent ( nextOpenVal ) ;
90+ setLock ( false ) ;
8591 }
8692 }
8793
@@ -95,5 +101,5 @@ export default function useOpen(
95101 }
96102 } ) ;
97103
98- return [ mergedOpen , toggleOpen ] as const ;
104+ return [ mergedOpen , toggleOpen , lock ] ;
99105}
0 commit comments