Skip to content

Commit 4f9c6b4

Browse files
committed
fix: modify file name
1 parent 937da9b commit 4f9c6b4

File tree

4 files changed

+137
-0
lines changed

4 files changed

+137
-0
lines changed
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
// Jest Snapshot v1, https://goo.gl/fbAQLP
2+
3+
exports[`test KeyCombiner suite snapshot match 1`] = `
4+
<span
5+
data-testid="test_keyCombiner"
6+
>
7+
<div>
8+
command+shift+f
9+
</div>
10+
</span>
11+
`;
Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
2+
import React from 'react';
3+
import KeyEventListener from '../index';
4+
import { render, cleanup, fireEvent } from '@testing-library/react';
5+
import '@testing-library/jest-dom/extend-expect';
6+
const { KeyCombiner } = KeyEventListener
7+
describe('test KeyCombiner suite', () => {
8+
const text = 'command+shift+f';
9+
let dom, element;
10+
beforeEach(() => {
11+
dom = render(<KeyCombiner
12+
onTrigger={() => { console.log('keyAction') }}
13+
keyMap={{
14+
70: true,
15+
91: true,
16+
16: true
17+
}}>
18+
<div>{text}</div>
19+
</KeyCombiner>)
20+
element = dom.getByTestId('test_keyCombiner');
21+
})
22+
afterEach(() => {
23+
cleanup()
24+
})
25+
test('snapshot match', () => {
26+
expect(element).toMatchSnapshot();
27+
})
28+
test('test key code', () => {
29+
fireEvent.keyPress(element, { key: 'Enter', code: 'Enter' })
30+
})
31+
test('should render the correct text', () => {
32+
expect(element).toBeInTheDocument();
33+
expect(element).toHaveTextContent(`${text}`)
34+
})
35+
})
Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
import * as React from 'react';
2+
import KeyCombiner from './listener'
3+
export default class KeyEventListener extends React.Component<any, any> {
4+
static KeyCombiner=KeyCombiner
5+
componentDidMount () {
6+
addEventListener('keydown', this.bindEvent, false)
7+
addEventListener('keyup', this.bindEvent, false)
8+
}
9+
10+
componentWillUnmount () {
11+
removeEventListener('keydown', this.bindEvent, false)
12+
removeEventListener('keyup', this.bindEvent, false)
13+
}
14+
15+
bindEvent = (target: any) => {
16+
const { onKeyDown, onKeyUp } = this.props;
17+
const isKeyDown = target.type === 'keydown';
18+
19+
if (isKeyDown && onKeyDown) {
20+
onKeyDown(target)
21+
} else if (!isKeyDown && onKeyUp) {
22+
onKeyUp(target)
23+
}
24+
}
25+
26+
render () {
27+
return this.props.children;
28+
}
29+
}
Lines changed: 62 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,62 @@
1+
import * as React from 'react';
2+
3+
export default class KeyCombiner extends React.Component<any, any> {
4+
constructor (props: any) {
5+
super(props);
6+
this.state = {
7+
currentKeys: {}
8+
};
9+
}
10+
11+
componentDidMount () {
12+
addEventListener('keydown', this.bindEvent, false)
13+
addEventListener('keyup', this.bindEvent, false)
14+
}
15+
16+
componentWillUnmount () {
17+
removeEventListener('keydown', this.bindEvent, false)
18+
removeEventListener('keyup', this.bindEvent, false)
19+
this.setState({ currentKeys: {} })
20+
}
21+
22+
bindEvent = (target: any) => {
23+
const { onTrigger, keyMap } = this.props;
24+
25+
const keyCode = target.keyCode;
26+
const isKeyDown = target.type === 'keydown';
27+
28+
if (!isKeyDown) {
29+
this.setState({
30+
currentKeys: {}
31+
})
32+
return;
33+
};
34+
35+
if (keyMap[keyCode] === true) {
36+
const currentKeys = Object.assign(this.state.currentKeys, {
37+
[keyCode]: isKeyDown
38+
});
39+
40+
this.setState({
41+
currentKeys
42+
})
43+
44+
let keyAllRight = true;
45+
for (let key in keyMap) {
46+
if (!currentKeys[key]) {
47+
keyAllRight = false;
48+
break;
49+
}
50+
}
51+
if (keyAllRight) {
52+
onTrigger(target);
53+
}
54+
}
55+
}
56+
57+
render () {
58+
return <span data-testid='test_keyCombiner'>
59+
{this.props.children}
60+
</span>
61+
}
62+
}

0 commit comments

Comments
 (0)