1
1
import { dispatchEvent } from '../../lib/dom' ;
2
- import { SUBJECT_TYPE , EVENTS_BY_SUBJECT_TYPE } from '../constants' ;
2
+ import { EVENTS_BY_SUBJECT_TYPE , SUBJECT_TYPE } from '../constants' ;
3
+ import { isBrowserFirefox } from '../../lib/browser' ;
3
4
4
5
function dispatchEvents ( element , events , dataTransfer ) {
5
6
events . forEach ( event => {
6
7
dispatchEvent ( element , event , dataTransfer ) ;
7
8
} ) ;
8
9
}
9
10
11
+ function getEventsBySubjectType ( subjectType ) {
12
+ const events = EVENTS_BY_SUBJECT_TYPE [ subjectType ] ;
13
+
14
+ /**
15
+ * @see https://github.com/abramenal/cypress-file-upload/issues/293
16
+ */
17
+ if ( subjectType === SUBJECT_TYPE . DRAG_N_DROP && isBrowserFirefox ( ) ) {
18
+ events . push ( 'change' ) ;
19
+ }
20
+
21
+ return events ;
22
+ }
23
+
10
24
export default function attachFileToElement ( subject , { files, subjectType, force, window } ) {
11
25
const dataTransfer = new window . DataTransfer ( ) ;
12
26
files . forEach ( f => dataTransfer . items . add ( f ) ) ;
@@ -16,7 +30,7 @@ export default function attachFileToElement(subject, { files, subjectType, force
16
30
inputElement . files = dataTransfer . files ;
17
31
18
32
if ( force ) {
19
- dispatchEvents ( inputElement , EVENTS_BY_SUBJECT_TYPE [ subjectType ] , dataTransfer ) ;
33
+ dispatchEvents ( inputElement , getEventsBySubjectType ( subjectType ) , dataTransfer ) ;
20
34
}
21
35
} else if ( subjectType === SUBJECT_TYPE . DRAG_N_DROP ) {
22
36
const inputElements = subject [ 0 ] . querySelectorAll ( 'input[type="file"]' ) ;
@@ -30,14 +44,14 @@ export default function attachFileToElement(subject, { files, subjectType, force
30
44
inputElement . files = dataTransfer . files ;
31
45
32
46
if ( force ) {
33
- dispatchEvents ( inputElement , EVENTS_BY_SUBJECT_TYPE [ subjectType ] , dataTransfer ) ;
47
+ dispatchEvents ( inputElement , getEventsBySubjectType ( subjectType ) , dataTransfer ) ;
34
48
}
35
49
} else {
36
50
const inputElement = subject [ 0 ] ;
37
51
inputElement . files = dataTransfer . files ;
38
52
39
53
if ( force ) {
40
- dispatchEvents ( inputElement , EVENTS_BY_SUBJECT_TYPE [ subjectType ] , dataTransfer ) ;
54
+ dispatchEvents ( inputElement , getEventsBySubjectType ( subjectType ) , dataTransfer ) ;
41
55
}
42
56
}
43
57
}
0 commit comments