Skip to content

Commit

Permalink
chore: compatible for React16 (#436)
Browse files Browse the repository at this point in the history
* chore: compatible for react 16

* chore: patch type

* chore: opt

* chore: add qt
  • Loading branch information
zombieJ committed Nov 6, 2023
1 parent 4f736dd commit 6b09c6f
Showing 1 changed file with 13 additions and 7 deletions.
20 changes: 13 additions & 7 deletions src/index.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -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';
Expand Down Expand Up @@ -320,15 +319,22 @@ export function generateTrigger(
const openRef = React.useRef(mergedOpen);
openRef.current = mergedOpen;

const lastTriggerRef = React.useRef<boolean[]>([]);
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] ??
mergedOpen) !== nextOpen
) {
lastTriggerRef.current.push(nextOpen);
onPopupVisibleChange?.(nextOpen);
}
});

// Trigger for delay
Expand Down

0 comments on commit 6b09c6f

Please sign in to comment.