@@ -13,6 +13,7 @@ import type { TriggerContextProps } from './context';
1313import TriggerContext , { UniqueContext } from './context' ;
1414import useAction from './hooks/useAction' ;
1515import useAlign from './hooks/useAlign' ;
16+ import useDelay from './hooks/useDelay' ;
1617import useWatch from './hooks/useWatch' ;
1718import useWinClick from './hooks/useWinClick' ;
1819import type {
@@ -303,17 +304,7 @@ export function generateTrigger(
303304 const lastTriggerRef = React . useRef < boolean [ ] > ( [ ] ) ;
304305 lastTriggerRef . current = [ ] ;
305306
306- const internalTriggerOpen = useEvent ( ( nextOpen : boolean , delay : number = 0 ) => {
307- // If UniqueContext exists, delegate show/hide to Provider
308- if ( uniqueContext ) {
309- if ( nextOpen && targetEle ) {
310- uniqueContext . show ( targetEle , delay ) ;
311- } else {
312- uniqueContext . hide ( targetEle , delay ) ;
313- }
314- return ;
315- }
316-
307+ const internalTriggerOpen = useEvent ( ( nextOpen : boolean ) => {
317308 setMergedOpen ( nextOpen ) ;
318309
319310 // Enter or Pointer will both trigger open state change
@@ -330,32 +321,24 @@ export function generateTrigger(
330321 } ) ;
331322
332323 // Trigger for delay
333- const delayRef = React . useRef < ReturnType < typeof setTimeout > > ( null ) ;
334-
335- const clearDelay = ( ) => {
336- clearTimeout ( delayRef . current ) ;
337- } ;
324+ const delayInvoke = useDelay ( ) ;
338325
339326 const triggerOpen = ( nextOpen : boolean , delay = 0 ) => {
340327 // If UniqueContext exists, pass delay to Provider instead of handling it internally
341328 if ( uniqueContext ) {
342- internalTriggerOpen ( nextOpen , delay ) ;
329+ if ( nextOpen && targetEle ) {
330+ uniqueContext . show ( targetEle , delay ) ;
331+ } else {
332+ uniqueContext . hide ( targetEle , delay ) ;
333+ }
343334 return ;
344335 }
345336
346- clearDelay ( ) ;
347-
348- if ( delay === 0 ) {
337+ delayInvoke ( ( ) => {
349338 internalTriggerOpen ( nextOpen ) ;
350- } else {
351- delayRef . current = setTimeout ( ( ) => {
352- internalTriggerOpen ( nextOpen ) ;
353- } , delay * 1000 ) ;
354- }
339+ } , delay ) ;
355340 } ;
356341
357- React . useEffect ( ( ) => clearDelay , [ ] ) ;
358-
359342 // ========================== Motion ============================
360343 const [ inMotion , setInMotion ] = React . useState ( false ) ;
361344
0 commit comments