upload.js
1.29 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
55
56
57
"use strict";
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.upload = upload;
var _dom = require("@testing-library/dom");
var _click = require("./click");
var _blur = require("./blur");
var _focus = require("./focus");
function upload(element, fileOrFiles, init) {
if (element.disabled) return;
let files;
let input = element;
(0, _click.click)(element, init);
if (element.tagName === 'LABEL') {
files = element.control.multiple ? fileOrFiles : [fileOrFiles];
input = element.control;
} else {
files = element.multiple ? fileOrFiles : [fileOrFiles];
} // blur fires when the file selector pops up
(0, _blur.blur)(element, init); // focus fires when they make their selection
(0, _focus.focus)(element, init); // the event fired in the browser isn't actually an "input" or "change" event
// but a new Event with a type set to "input" and "change"
// Kinda odd...
const inputFiles = {
length: files.length,
item: index => files[index],
...files
};
(0, _dom.fireEvent)(input, (0, _dom.createEvent)('input', input, {
target: {
files: inputFiles
},
bubbles: true,
cancelable: false,
composed: true,
...init
}));
_dom.fireEvent.change(input, {
target: {
files: inputFiles
},
...init
});
}