Skip to content

Commit 3c96456

Browse files
committed
chore: api update
1 parent 1693516 commit 3c96456

4 files changed

Lines changed: 23 additions & 13 deletions

File tree

src/UniqueProvider/index.tsx

Lines changed: 15 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -8,25 +8,34 @@ export interface UniqueProviderProps {
88

99
const 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}

src/context.ts

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
import * as React from 'react';
2+
import type { TriggerProps } from './index';
23

34
// ===================== Nest =====================
45
export interface TriggerContextProps {
@@ -11,8 +12,8 @@ export default TriggerContext;
1112

1213
// ==================== Unique ====================
1314
export 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

1819
export const UniqueContext = React.createContext<UniqueContextProps | null>(

src/hooks/useDelay.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff 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 {

src/index.tsx

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff 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}

0 commit comments

Comments
 (0)