From 51945187cf216a7136cefe43ae671511141f1435 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: Fri, 17 Jul 2026 11:56:09 +0800 Subject: [PATCH 1/2] fix: update open state while disabled --- src/index.tsx | 5 +++-- tests/basic.test.jsx | 29 +++++++++++++++++++++++++++++ 2 files changed, 32 insertions(+), 2 deletions(-) diff --git a/src/index.tsx b/src/index.tsx index 90f8202d..22f29a0a 100644 --- a/src/index.tsx +++ b/src/index.tsx @@ -322,7 +322,8 @@ export function generateTrigger( popupVisible, ); - const mergedOpen = (internalOpen || false) && !disabled; + const rawOpen = internalOpen || false; + const mergedOpen = rawOpen && !disabled; // ========================== Children ========================== const child = React.useMemo(() => { @@ -387,7 +388,7 @@ export function generateTrigger( const internalTriggerOpen = useEvent((nextOpen: boolean) => { flushSync(() => { - if (mergedOpen !== nextOpen) { + if (rawOpen !== nextOpen) { setInternalOpen(nextOpen); onOpenChange?.(nextOpen); onPopupVisibleChange?.(nextOpen); diff --git a/tests/basic.test.jsx b/tests/basic.test.jsx index edebbd61..159c857f 100644 --- a/tests/basic.test.jsx +++ b/tests/basic.test.jsx @@ -208,6 +208,35 @@ describe('Trigger.Basic', () => { expect(isPopupHidden()).toBeFalsy(); expect(onOpenChange).not.toHaveBeenCalled(); }); + + it('updates open state when mouse leaves while disabled', () => { + const onOpenChange = jest.fn(); + const Demo = ({ disabled = false }) => ( + trigger} + > +
hover
+
+ ); + + const { container, rerender } = render(); + + trigger(container, '.target', 'mouseEnter'); + expect(isPopupHidden()).toBeFalsy(); + onOpenChange.mockReset(); + + rerender(); + expect(isPopupHidden()).toBeTruthy(); + + trigger(container, '.target', 'mouseLeave'); + expect(onOpenChange).toHaveBeenCalledWith(false); + + rerender(); + expect(isPopupHidden()).toBeTruthy(); + }); }); it('contextMenu works', () => { From 6f53057643a78a6e723897350f87ca9f54274455 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: Fri, 17 Jul 2026 12:02:24 +0800 Subject: [PATCH 2/2] ci: pin react-doctor version --- .github/workflows/react-doctor.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/react-doctor.yml b/.github/workflows/react-doctor.yml index 56430b6e..4a3e5284 100644 --- a/.github/workflows/react-doctor.yml +++ b/.github/workflows/react-doctor.yml @@ -21,4 +21,4 @@ jobs: persist-credentials: false - uses: millionco/react-doctor@0b4f4f4bd248a154e64eb508a48347f71154b3f3 with: - github-token: ${{ secrets.GITHUB_TOKEN }} + version: 0.7.4