File tree Expand file tree Collapse file tree
Expand file tree Collapse file tree Original file line number Diff line number Diff line change @@ -8,25 +8,34 @@ export interface UniqueProviderProps {
88
99const UniqueProvider = ( { children } : UniqueProviderProps ) => {
1010 const [ target , setTarget ] = React . useState < HTMLElement | null > ( null ) ;
11+ const [ currentNode , setCurrentNode ] = React . useState < React . ReactNode > ( null ) ;
12+
13+ // ========================== Register ==========================
1114 const delayInvoke = useDelay ( ) ;
1215
13- const show = ( targetElement : HTMLElement , delay : number ) => {
16+ const show = ( node : React . ReactNode , targetElement : HTMLElement , delay : number ) => {
1417 delayInvoke ( ( ) => {
18+ setCurrentNode ( node ) ;
1519 setTarget ( targetElement ) ;
1620 } , delay ) ;
1721 } ;
1822
19- const hide = ( targetElement : HTMLElement , delay : number ) => {
23+ const hide = ( delay : number ) => {
2024 delayInvoke ( ( ) => {
2125 setTarget ( null ) ;
26+ setCurrentNode ( null ) ;
2227 } , delay ) ;
2328 } ;
2429
25- const contextValue = React . useMemo < UniqueContextProps > ( ( ) => ( {
26- show,
27- hide,
28- } ) , [ ] ) ;
30+ const contextValue = React . useMemo < UniqueContextProps > (
31+ ( ) => ( {
32+ show,
33+ hide,
34+ } ) ,
35+ [ ] ,
36+ ) ;
2937
38+ // =========================== Render ===========================
3039 return (
3140 < UniqueContext . Provider value = { contextValue } >
3241 { children }
Original file line number Diff line number Diff line change 11import * as React from 'react' ;
2+ import type { TriggerProps } from './index' ;
23
34// ===================== Nest =====================
45export interface TriggerContextProps {
@@ -11,8 +12,8 @@ export default TriggerContext;
1112
1213// ==================== Unique ====================
1314export interface UniqueContextProps {
14- show : ( target : HTMLElement , delay : number ) => void ;
15- hide : ( target : HTMLElement , delay : number ) => void ;
15+ show : ( popup : TriggerProps [ 'popup' ] , target : HTMLElement , delay : number ) => void ;
16+ hide : ( delay : number ) => void ;
1617}
1718
1819export const UniqueContext = React . createContext < UniqueContextProps | null > (
Original file line number Diff line number Diff line change @@ -10,9 +10,9 @@ export default function useDelay() {
1010 }
1111 } ;
1212
13- const delayInvoke = ( callback : ( ) => void , delay : number ) => {
13+ const delayInvoke = ( callback : VoidFunction , delay : number ) => {
1414 clearDelay ( ) ;
15-
15+
1616 if ( delay === 0 ) {
1717 callback ( ) ;
1818 } else {
Original file line number Diff line number Diff line change @@ -327,9 +327,9 @@ export function generateTrigger(
327327 // If UniqueContext exists, pass delay to Provider instead of handling it internally
328328 if ( uniqueContext ) {
329329 if ( nextOpen && targetEle ) {
330- uniqueContext . show ( targetEle , delay ) ;
330+ uniqueContext . show ( popup , targetEle , delay ) ;
331331 } else {
332- uniqueContext . hide ( targetEle , delay ) ;
332+ uniqueContext . hide ( delay ) ;
333333 }
334334 return ;
335335 }
@@ -724,7 +724,7 @@ export function generateTrigger(
724724 >
725725 { triggerNode }
726726 </ ResizeObserver >
727- { rendedRef . current && (
727+ { rendedRef . current && ! uniqueContext && (
728728 < TriggerContext . Provider value = { context } >
729729 < Popup
730730 portal = { PortalComponent }
You can’t perform that action at this time.
0 commit comments