From 1f512d54f9a5357ed3e02cb92442442fcba0a8a6 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, 3 Nov 2023 23:43:29 +0800 Subject: [PATCH 1/4] chore: compatible for react 16 --- src/index.tsx | 19 ++++++++++++------- 1 file changed, 12 insertions(+), 7 deletions(-) diff --git a/src/index.tsx b/src/index.tsx index 5400f4ec..3f5d8a17 100644 --- a/src/index.tsx +++ b/src/index.tsx @@ -9,7 +9,6 @@ import useId from 'rc-util/lib/hooks/useId'; import useLayoutEffect from 'rc-util/lib/hooks/useLayoutEffect'; import isMobile from 'rc-util/lib/isMobile'; import * as React from 'react'; -import { flushSync } from 'react-dom'; import Popup from './Popup'; import TriggerWrapper from './TriggerWrapper'; import type { TriggerContextProps } from './context'; @@ -320,15 +319,21 @@ export function generateTrigger( const openRef = React.useRef(mergedOpen); openRef.current = mergedOpen; + const lastTriggerRef = React.useRef([]); + lastTriggerRef.current = []; + const internalTriggerOpen = useEvent((nextOpen: boolean) => { + setMergedOpen(nextOpen); + // Enter or Pointer will both trigger open state change // We only need take one to avoid duplicated change event trigger - flushSync(() => { - if (mergedOpen !== nextOpen) { - setMergedOpen(nextOpen); - onPopupVisibleChange?.(nextOpen); - } - }); + // Use `lastTriggerRef` to record last open type + if ( + lastTriggerRef.current[lastTriggerRef.current.length - 1] !== nextOpen + ) { + lastTriggerRef.current.push(nextOpen); + onPopupVisibleChange?.(nextOpen); + } }); // Trigger for delay From c4665e3c44264c99b91386c1b63be573f670d84a 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, 3 Nov 2023 23:45:42 +0800 Subject: [PATCH 2/4] chore: patch type --- src/index.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/index.tsx b/src/index.tsx index 3f5d8a17..fdb7f1f5 100644 --- a/src/index.tsx +++ b/src/index.tsx @@ -319,7 +319,7 @@ export function generateTrigger( const openRef = React.useRef(mergedOpen); openRef.current = mergedOpen; - const lastTriggerRef = React.useRef([]); + const lastTriggerRef = React.useRef([]); lastTriggerRef.current = []; const internalTriggerOpen = useEvent((nextOpen: boolean) => { From 5c133d110633c1fe7ca4185850ae525aa42d2508 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: Sat, 4 Nov 2023 08:56:33 +0800 Subject: [PATCH 3/4] chore: opt --- src/index.tsx | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/index.tsx b/src/index.tsx index fdb7f1f5..76cfcb87 100644 --- a/src/index.tsx +++ b/src/index.tsx @@ -329,7 +329,8 @@ export function generateTrigger( // We only need take one to avoid duplicated change event trigger // Use `lastTriggerRef` to record last open type if ( - lastTriggerRef.current[lastTriggerRef.current.length - 1] !== nextOpen + lastTriggerRef.current[lastTriggerRef.current.length - 1] ?? + mergedOpen !== nextOpen ) { lastTriggerRef.current.push(nextOpen); onPopupVisibleChange?.(nextOpen); From b6ca1c1a091268127b3d35f3413b7f8961a9b233 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: Sat, 4 Nov 2023 08:57:14 +0800 Subject: [PATCH 4/4] chore: add qt --- src/index.tsx | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/index.tsx b/src/index.tsx index 76cfcb87..87dcb99d 100644 --- a/src/index.tsx +++ b/src/index.tsx @@ -329,8 +329,8 @@ export function generateTrigger( // We only need take one to avoid duplicated change event trigger // Use `lastTriggerRef` to record last open type if ( - lastTriggerRef.current[lastTriggerRef.current.length - 1] ?? - mergedOpen !== nextOpen + (lastTriggerRef.current[lastTriggerRef.current.length - 1] ?? + mergedOpen) !== nextOpen ) { lastTriggerRef.current.push(nextOpen); onPopupVisibleChange?.(nextOpen);