From e22c60b8a84937e6bf87f84fa5782c85d260d3b6 Mon Sep 17 00:00:00 2001 From: Bin Date: Sun, 12 Apr 2026 16:49:46 +0800 Subject: [PATCH] fix(align): restore overflowX and overflowY after force align --- src/hooks/useAlign.ts | 5 +++++ tests/align.test.tsx | 34 ++++++++++++++++++++++++++++++++++ 2 files changed, 39 insertions(+) diff --git a/src/hooks/useAlign.ts b/src/hooks/useAlign.ts index db297856..bb5b0611 100644 --- a/src/hooks/useAlign.ts +++ b/src/hooks/useAlign.ts @@ -184,6 +184,9 @@ export default function useAlign( const originRight = popupElement.style.right; const originBottom = popupElement.style.bottom; const originOverflow = popupElement.style.overflow; + const originOverflowX = popupElement.style.overflowX; + const originOverflowY = popupElement.style.overflowY; + // Placement const placementInfo: AlignType = { @@ -295,6 +298,8 @@ export default function useAlign( popupElement.style.right = originRight; popupElement.style.bottom = originBottom; popupElement.style.overflow = originOverflow; + popupElement.style.overflowX = originOverflowX; + popupElement.style.overflowY = originOverflowY; popupElement.parentElement?.removeChild(placeholderElement); diff --git a/tests/align.test.tsx b/tests/align.test.tsx index d4e7386b..1c9c9c31 100644 --- a/tests/align.test.tsx +++ b/tests/align.test.tsx @@ -226,6 +226,40 @@ describe('Trigger.Align', () => { }); }); + it('should restore overflowX and overflowY after align', async () => { + const triggerRef = React.createRef(); + + render( + } + popupStyle={{ + overflowX: 'auto', + overflowY: 'scroll', + }} + ref={triggerRef} + > +
+ , + ); + + await awaitFakeTimer(); + + const popupElement = document.querySelector( + '.rc-trigger-popup', + ) as HTMLElement; + expect(popupElement.style.overflowX).toBe('auto'); + expect(popupElement.style.overflowY).toBe('scroll'); + + act(() => { + triggerRef.current!.forceAlign(); + }); + await awaitFakeTimer(); + + expect(popupElement.style.overflowX).toBe('auto'); + expect(popupElement.style.overflowY).toBe('scroll'); + }); + it('targetOffset support ptg', async () => { render(