From 252a8e8e4d6f330fc7845c44fbdea78d5d69af6d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E4=BA=8C=E8=B4=A7=E6=9C=BA=E5=99=A8=E4=BA=BA?= Date: Tue, 25 Mar 2025 20:12:22 +0800 Subject: [PATCH] chore: compatible with legacy --- src/index.tsx | 8 ++++++++ tests/basic.test.jsx | 11 +++++++++-- 2 files changed, 17 insertions(+), 2 deletions(-) diff --git a/src/index.tsx b/src/index.tsx index dc9c7136..2b5a696e 100644 --- a/src/index.tsx +++ b/src/index.tsx @@ -63,6 +63,10 @@ export interface TriggerProps { popupVisible?: boolean; defaultPopupVisible?: boolean; onOpenChange?: (visible: boolean) => void; + afterOpenChange?: (visible: boolean) => void; + /** @deprecated Use `onOpenChange` instead */ + onPopupVisibleChange?: (visible: boolean) => void; + /** @deprecated Use `afterOpenChange` instead */ afterPopupVisibleChange?: (visible: boolean) => void; // =================== Portal ==================== @@ -139,6 +143,8 @@ export function generateTrigger( popupVisible, defaultPopupVisible, onOpenChange, + afterOpenChange, + onPopupVisibleChange, afterPopupVisibleChange, // Delay @@ -300,6 +306,7 @@ export function generateTrigger( ) { lastTriggerRef.current.push(nextOpen); onOpenChange?.(nextOpen); + onPopupVisibleChange?.(nextOpen); } }); @@ -453,6 +460,7 @@ export function generateTrigger( const onVisibleChanged = (visible: boolean) => { setInMotion(false); onAlign(); + afterOpenChange?.(visible); afterPopupVisibleChange?.(visible); }; diff --git a/tests/basic.test.jsx b/tests/basic.test.jsx index 2163ea23..8edea894 100644 --- a/tests/basic.test.jsx +++ b/tests/basic.test.jsx @@ -235,16 +235,18 @@ describe('Trigger.Basic', () => { fireEvent.mouseDown(document.body); expect(isPopupAllHidden()).toBeTruthy(); }); - describe('afterPopupVisibleChange can be triggered', () => { + describe('afterOpenChange can be triggered', () => { it('uncontrolled', async () => { let triggered = 0; + const afterPopupVisibleChange = jest.fn(); const { container } = render( { + afterOpenChange={() => { triggered = 1; }} + afterPopupVisibleChange={afterPopupVisibleChange} popup={trigger} >
click
@@ -256,6 +258,7 @@ describe('Trigger.Basic', () => { await awaitFakeTimer(); expect(triggered).toBe(1); + expect(afterPopupVisibleChange).toHaveBeenCalledWith(true); }); it('controlled', async () => { @@ -979,10 +982,12 @@ describe('Trigger.Basic', () => { describe('click window to hide', () => { it('should hide', async () => { const onOpenChange = jest.fn(); + const onPopupVisibleChange = jest.fn(); const { container } = render( trigger} > @@ -993,6 +998,7 @@ describe('Trigger.Basic', () => { fireEvent.click(container.querySelector('.target')); await awaitFakeTimer(); expect(onOpenChange).toHaveBeenCalledWith(true); + expect(onPopupVisibleChange).toHaveBeenCalledWith(true); onOpenChange.mockReset(); // Click outside to close @@ -1000,6 +1006,7 @@ describe('Trigger.Basic', () => { fireEvent.click(document.body); await awaitFakeTimer(); expect(onOpenChange).toHaveBeenCalledWith(false); + expect(onPopupVisibleChange).toHaveBeenCalledWith(false); }); it('should not hide when mouseDown inside but mouseUp outside', async () => {