1 | "use strict";
|
2 |
|
3 | Object.defineProperty(exports, "__esModule", {
|
4 | value: true
|
5 | });
|
6 | exports.deselectOptions = exports.selectOptions = void 0;
|
7 |
|
8 | var _dom = require("@testing-library/dom");
|
9 |
|
10 | var _click = require("./click");
|
11 |
|
12 | var _focus = require("./focus");
|
13 |
|
14 | function selectOptionsBase(newValue, select, values, init) {
|
15 | if (!newValue && !select.multiple) {
|
16 | throw (0, _dom.getConfig)().getElementError(`Unable to deselect an option in a non-multiple select. Use selectOptions to change the selection instead.`, select);
|
17 | }
|
18 |
|
19 | const valArray = Array.isArray(values) ? values : [values];
|
20 | const allOptions = Array.from(select.querySelectorAll('option'));
|
21 | const selectedOptions = valArray.map(val => {
|
22 | if (allOptions.includes(val)) {
|
23 | return val;
|
24 | } else {
|
25 | const matchingOption = allOptions.find(o => o.value === val);
|
26 |
|
27 | if (matchingOption) {
|
28 | return matchingOption;
|
29 | } else {
|
30 | throw (0, _dom.getConfig)().getElementError(`Value "${val}" not found in options`, select);
|
31 | }
|
32 | }
|
33 | }).filter(option => !option.disabled);
|
34 | if (select.disabled || !selectedOptions.length) return;
|
35 |
|
36 | if (select.multiple) {
|
37 | for (const option of selectedOptions) {
|
38 |
|
39 | _dom.fireEvent.pointerOver(option, init);
|
40 |
|
41 | _dom.fireEvent.pointerEnter(select, init);
|
42 |
|
43 | _dom.fireEvent.mouseOver(option);
|
44 |
|
45 | _dom.fireEvent.mouseEnter(select);
|
46 |
|
47 | _dom.fireEvent.pointerMove(option, init);
|
48 |
|
49 | _dom.fireEvent.mouseMove(option, init);
|
50 |
|
51 | _dom.fireEvent.pointerDown(option, init);
|
52 |
|
53 | _dom.fireEvent.mouseDown(option, init);
|
54 |
|
55 | (0, _focus.focus)(select, init);
|
56 |
|
57 | _dom.fireEvent.pointerUp(option, init);
|
58 |
|
59 | _dom.fireEvent.mouseUp(option, init);
|
60 |
|
61 | selectOption(option);
|
62 |
|
63 | _dom.fireEvent.click(option, init);
|
64 | }
|
65 | } else if (selectedOptions.length === 1) {
|
66 | (0, _click.click)(select, init);
|
67 | selectOption(selectedOptions[0]);
|
68 | } else {
|
69 | throw (0, _dom.getConfig)().getElementError(`Cannot select multiple options on a non-multiple select`, select);
|
70 | }
|
71 |
|
72 | function selectOption(option) {
|
73 | option.selected = newValue;
|
74 | (0, _dom.fireEvent)(select, (0, _dom.createEvent)('input', select, {
|
75 | bubbles: true,
|
76 | cancelable: false,
|
77 | composed: true,
|
78 | ...init
|
79 | }));
|
80 |
|
81 | _dom.fireEvent.change(select, init);
|
82 | }
|
83 | }
|
84 |
|
85 | const selectOptions = selectOptionsBase.bind(null, true);
|
86 | exports.selectOptions = selectOptions;
|
87 | const deselectOptions = selectOptionsBase.bind(null, false);
|
88 | exports.deselectOptions = deselectOptions; |
\ | No newline at end of file |