navigation-key.js
1.11 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
"use strict";
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.navigationKey = navigationKey;
var _dom = require("@testing-library/dom");
var _utils = require("../utils");
const keys = {
ArrowLeft: {
keyCode: 37
},
ArrowRight: {
keyCode: 39
}
};
function getSelectionRange(currentElement, key) {
const {
selectionStart,
selectionEnd
} = currentElement();
const cursorChange = Number(key in keys) * (key === 'ArrowLeft' ? -1 : 1);
return {
selectionStart: selectionStart + cursorChange,
selectionEnd: selectionEnd + cursorChange
};
}
function navigationKey(key) {
const event = {
key,
keyCode: keys[key].keyCode,
which: keys[key].keyCode
};
return ({
currentElement,
eventOverrides
}) => {
_dom.fireEvent.keyDown(currentElement(), { ...event,
...eventOverrides
});
const range = getSelectionRange(currentElement, key);
(0, _utils.setSelectionRangeIfNecessary)(currentElement(), range.selectionStart, range.selectionEnd);
_dom.fireEvent.keyUp(currentElement(), { ...event,
...eventOverrides
});
};
}