|
1 | 1 | import Portal from '@rc-component/portal'; |
2 | 2 | import { clsx } from 'clsx'; |
3 | 3 | import type { CSSMotionProps } from '@rc-component/motion'; |
4 | | -// TODO: Replace ResizeObserver with useResizeObserver |
5 | | -import ResizeObserver, { useResizeObserver } from '@rc-component/resize-observer'; |
| 4 | +import { useResizeObserver } from '@rc-component/resize-observer'; |
6 | 5 | import { isDOM } from '@rc-component/util/lib/Dom/findDOMNode'; |
7 | 6 | import { getShadowRoot } from '@rc-component/util/lib/Dom/shadow'; |
| 7 | +import { useComposeRef } from '@rc-component/util/lib/ref'; |
8 | 8 | import useEvent from '@rc-component/util/lib/hooks/useEvent'; |
9 | 9 | import useId from '@rc-component/util/lib/hooks/useId'; |
10 | 10 | import useLayoutEffect from '@rc-component/util/lib/hooks/useLayoutEffect'; |
@@ -783,22 +783,25 @@ export function generateTrigger( |
783 | 783 | y: arrowY, |
784 | 784 | }; |
785 | 785 |
|
| 786 | + // =================== Resize Observer =================== |
| 787 | + // Use hook to observe target element resize |
| 788 | + // Pass targetEle directly instead of a function so the hook will re-observe when target changes |
| 789 | + useResizeObserver(mergedOpen, targetEle, onTargetResize); |
| 790 | + |
| 791 | + // Compose refs |
| 792 | + const mergedRef = useComposeRef(setTargetRef, (child as any).ref); |
| 793 | + |
786 | 794 | // Child Node |
787 | 795 | const triggerNode = React.cloneElement(child, { |
| 796 | + ref: mergedRef, |
788 | 797 | ...mergedChildrenProps, |
789 | 798 | ...passedProps, |
790 | 799 | }); |
791 | 800 |
|
792 | 801 | // Render |
793 | 802 | return ( |
794 | 803 | <> |
795 | | - <ResizeObserver |
796 | | - disabled={!mergedOpen} |
797 | | - ref={setTargetRef} |
798 | | - onResize={onTargetResize} |
799 | | - > |
800 | | - {triggerNode} |
801 | | - </ResizeObserver> |
| 804 | + {triggerNode} |
802 | 805 | {rendedRef.current && (!uniqueContext || !unique) && ( |
803 | 806 | <TriggerContext.Provider value={context}> |
804 | 807 | <Popup |
|
0 commit comments