Skip to content

Commit 6fe458f

Browse files
authored
fix: support KeyboardEvent.code (#76)
1 parent 14a38d2 commit 6fe458f

File tree

5 files changed

+24
-8
lines changed

5 files changed

+24
-8
lines changed

src/Modal.tsx

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@ import useWaitForDOMRef, { DOMContainer } from './useWaitForDOMRef';
2424
import { TransitionCallbacks } from './types';
2525
import useWindow from './useWindow';
2626
import { renderTransition, TransitionHandler } from './ImperativeTransition';
27+
import { isEscKey } from './utils';
2728

2829
let manager: ModalManager;
2930

@@ -391,7 +392,7 @@ const Modal: React.ForwardRefExoticComponent<
391392
});
392393

393394
const handleDocumentKeyDown = useEventCallback((e: KeyboardEvent) => {
394-
if (keyboard && e.keyCode === 27 && modal.isTopModal()) {
395+
if (keyboard && isEscKey(e) && modal.isTopModal()) {
395396
onEscapeKeyDown?.(e);
396397

397398
if (!e.defaultPrevented) {

src/useRootClose.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,8 +7,8 @@ import useClickOutside, {
77
ClickOutsideOptions,
88
getRefTarget,
99
} from './useClickOutside';
10+
import { isEscKey } from './utils';
1011

11-
const escapeKeyCode = 27;
1212
const noop = () => {};
1313

1414
export interface RootCloseOptions extends ClickOutsideOptions {
@@ -37,7 +37,7 @@ function useRootClose(
3737
useClickOutside(ref, onClose, { disabled, clickTrigger });
3838

3939
const handleKeyUp = useEventCallback((e: KeyboardEvent) => {
40-
if (e.keyCode === escapeKeyCode) {
40+
if (isEscKey(e)) {
4141
onClose(e);
4242
}
4343
});

src/utils.ts

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
/* eslint-disable import/prefer-default-export */
2+
export function isEscKey(e: KeyboardEvent) {
3+
return e.code === 'Escape' || e.keyCode === 27;
4+
}

test/ModalSpec.js

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -158,7 +158,7 @@ describe('<Modal>', () => {
158158

159159
let { backdrop } = ref.current;
160160

161-
simulant.fire(backdrop, 'keydown', { keyCode: 27 });
161+
simulant.fire(backdrop, 'keydown', { code: 'Escape', keyCode: 27 });
162162
});
163163

164164
it('should not trigger onHide if e.preventDefault() called', () => {
@@ -176,7 +176,7 @@ describe('<Modal>', () => {
176176

177177
let { backdrop } = ref.current;
178178

179-
simulant.fire(backdrop, 'keydown', { keyCode: 27 });
179+
simulant.fire(backdrop, 'keydown', { code: 'Escape', keyCode: 27 });
180180
expect(onHideSpy).to.not.have.been.called;
181181
});
182182

@@ -306,7 +306,10 @@ describe('<Modal>', () => {
306306
wrapper.setProps({ show: true });
307307

308308
act(() => {
309-
simulant.fire(ref.current.backdrop, 'keydown', { keyCode: 27 });
309+
simulant.fire(ref.current.backdrop, 'keydown', {
310+
code: 'Escape',
311+
keyCode: 27,
312+
});
310313
});
311314

312315
expect(onEscapeSpy).to.have.been.calledOnce;

test/useRootCloseSpec.js

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -158,11 +158,15 @@ describe('useRootClose', () => {
158158

159159
expect(spy).to.not.have.been.called;
160160

161-
simulant.fire(document.body, 'keyup', { keyCode: escapeKeyCode });
161+
simulant.fire(document.body, 'keyup', {
162+
code: 'Escape',
163+
keyCode: escapeKeyCode,
164+
});
162165

163166
expect(spy).to.have.been.calledOnce;
164167

165168
expect(spy.getCall(0).args.length).to.be.equal(1);
169+
expect(spy.getCall(0).args[0].code).to.be.equal('Escape');
166170
expect(spy.getCall(0).args[0].keyCode).to.be.equal(escapeKeyCode);
167171
expect(spy.getCall(0).args[0].type).to.be.equal('keyup');
168172
});
@@ -182,13 +186,17 @@ describe('useRootClose', () => {
182186
</Wrapper>,
183187
);
184188

185-
simulant.fire(document.body, 'keyup', { keyCode: escapeKeyCode });
189+
simulant.fire(document.body, 'keyup', {
190+
code: 'Escape',
191+
keyCode: escapeKeyCode,
192+
});
186193

187194
// TODO: Update to match expectations.
188195
// expect(outerSpy).to.have.not.been.called;
189196
expect(innerSpy).to.have.been.calledOnce;
190197

191198
expect(innerSpy.getCall(0).args.length).to.be.equal(1);
199+
expect(innerSpy.getCall(0).args[0].code).to.be.equal('Escape');
192200
expect(innerSpy.getCall(0).args[0].keyCode).to.be.equal(escapeKeyCode);
193201
expect(innerSpy.getCall(0).args[0].type).to.be.equal('keyup');
194202
});

0 commit comments

Comments
 (0)