Skip to content

Commit 881eacc

Browse files
committed
chore: adjust
1 parent 57a27f7 commit 881eacc

File tree

6 files changed

+39
-4
lines changed

6 files changed

+39
-4
lines changed

src/UniqueProvider/index.tsx

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ import { isDOM } from '@rc-component/util/lib/Dom/findDOMNode';
1515
import UniqueContainer from './UniqueContainer';
1616
import { clsx } from 'clsx';
1717
import { getAlignPopupClassName } from '../util';
18+
import useEscKeyDown from '../hooks/useEscKeyDown';
1819

1920
export interface UniqueProviderProps {
2021
children: React.ReactNode;
@@ -91,6 +92,8 @@ const UniqueProvider = ({
9192
onTargetVisibleChanged(visible);
9293
});
9394

95+
useEscKeyDown(mergedOptions?.id, open, popupEle, () => trigger(false));
96+
9497
// =========================== Align ============================
9598
const [
9699
ready,
Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -62,7 +62,7 @@ function registerEscEntry(entry: EscEntry) {
6262
addEscListener(win);
6363
}
6464

65-
export default function useEscCancel(
65+
export default function useEscKeyDown(
6666
popupId: string,
6767
open: boolean,
6868
popupEle: HTMLElement,
@@ -73,7 +73,7 @@ export default function useEscCancel(
7373
});
7474

7575
React.useEffect(() => {
76-
if (!open || !popupEle) {
76+
if (!popupId || !open || !popupEle) {
7777
return;
7878
}
7979

src/index.tsx

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ import useAlign from './hooks/useAlign';
1616
import useDelay from './hooks/useDelay';
1717
import useWatch from './hooks/useWatch';
1818
import useWinClick from './hooks/useWinClick';
19-
import useEscCancel from './hooks/useEscCancel';
19+
import useEscKeyDown from './hooks/useEscKeyDown';
2020
import type {
2121
ActionType,
2222
AlignType,
@@ -648,7 +648,7 @@ export function generateTrigger(
648648
triggerOpen,
649649
);
650650

651-
useEscCancel(id, mergedOpen, popupEle, triggerOpen);
651+
useEscKeyDown(id, mergedOpen, popupEle, triggerOpen);
652652

653653
// ======================= Action: Hover ========================
654654
const hoverToShow = showActions.has('hover');

tests/basic.test.jsx

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1217,6 +1217,20 @@ describe('Trigger.Basic', () => {
12171217
expect(isPopupHidden()).toBeTruthy();
12181218
});
12191219

1220+
it('non-escape key should not close popup', async () => {
1221+
const { container } = render(
1222+
<Trigger action="click" popup={<strong>trigger</strong>}>
1223+
<div className="target" />
1224+
</Trigger>,
1225+
);
1226+
1227+
trigger(container, '.target');
1228+
expect(isPopupHidden()).toBeFalsy();
1229+
1230+
fireEvent.keyDown(window, { key: 'Enter' });
1231+
expect(isPopupHidden()).toBeFalsy();
1232+
});
1233+
12201234
it('esc should close nested popup from inside out', async () => {
12211235
const useIdModule = require('@rc-component/util/lib/hooks/useId');
12221236
let seed = 0;

tests/unique.test.tsx

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -374,4 +374,21 @@ describe('Trigger.Unique', () => {
374374
// Verify onAlign was called due to target change
375375
expect(mockOnAlign).toHaveBeenCalled();
376376
});
377+
378+
it('esc should close unique popup', async () => {
379+
const { container,baseElement } = render(
380+
<UniqueProvider>
381+
<Trigger action={['click']} popup={<div>Popup</div>} unique>
382+
<div className="target" />
383+
</Trigger>
384+
</UniqueProvider>,
385+
);
386+
fireEvent.click(container.querySelector('.target'));
387+
await awaitFakeTimer();
388+
expect(baseElement.querySelector('.rc-trigger-popup-hidden')).toBeFalsy();
389+
390+
fireEvent.keyDown(window, { key: 'Escape' });
391+
await awaitFakeTimer();
392+
expect(baseElement.querySelector('.rc-trigger-popup-hidden')).toBeTruthy();
393+
});
377394
});

tsconfig.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
"skipLibCheck": true,
99
"esModuleInterop": true,
1010
"allowSyntheticDefaultImports": true,
11+
"types": ["@testing-library/jest-dom", "node"],
1112
"paths": {
1213
"@/*": ["src/*"],
1314
"@@/*": [".dumi/tmp/*"],

0 commit comments

Comments
 (0)