1
1
import eventTypes from 'dom-event-types'
2
2
3
+ interface TriggerOptions {
4
+ code ?: String
5
+ key ?: String
6
+ keyCode ?: Number
7
+ [ custom : string ] : any
8
+ }
9
+
10
+ interface EventParams {
11
+ eventType : string
12
+ modifier : string
13
+ meta : any
14
+ options ?: TriggerOptions
15
+ }
16
+
3
17
const keyCodesByKeyName = {
4
18
backspace : 8 ,
5
19
tab : 9 ,
@@ -18,9 +32,11 @@ const keyCodesByKeyName = {
18
32
delete : 46
19
33
}
20
34
21
- function getEventProperties ( eventParams ) {
35
+ function getEventProperties ( eventParams : EventParams ) {
22
36
const { modifier, meta, options } = eventParams
23
- const keyCode = keyCodesByKeyName [ modifier ] || options . keyCode || options . code
37
+ const keyCode =
38
+ keyCodesByKeyName [ modifier ] ||
39
+ ( options && ( options . keyCode || options . code ) )
24
40
25
41
return {
26
42
...options , // What the user passed in as the second argument to #trigger
@@ -32,7 +48,7 @@ function getEventProperties(eventParams) {
32
48
}
33
49
}
34
50
35
- function createEvent ( eventParams ) {
51
+ function createEvent ( eventParams : EventParams ) {
36
52
const { eventType, meta } = eventParams
37
53
const metaEventInterface = window [ meta . eventInterface ]
38
54
@@ -51,37 +67,32 @@ function createEvent(eventParams) {
51
67
return event
52
68
}
53
69
54
- export default function createDOMEvent (
55
- eventString : String ,
56
- options : Object = { }
57
- ) {
70
+ function createDOMEvent ( eventString : String , options ?: TriggerOptions ) {
58
71
const [ eventType , modifier ] = eventString . split ( '.' )
59
72
const meta = eventTypes [ eventType ] || {
60
73
eventInterface : 'Event' ,
61
74
cancelable : true ,
62
75
bubbles : true
63
76
}
64
77
65
- const eventParams = { eventType, modifier, meta, options }
66
-
67
- const event = createEvent ( eventParams )
68
-
78
+ const eventParams : EventParams = { eventType, modifier, meta, options }
79
+ const event : Event = createEvent ( eventParams )
69
80
const eventPrototype = Object . getPrototypeOf ( event )
70
81
71
- Object . keys ( options ) . forEach ( ( key ) => {
72
- const propertyDescriptor = Object . getOwnPropertyDescriptor (
73
- eventPrototype ,
74
- key
75
- )
76
-
77
- const canSetProperty = ! (
78
- propertyDescriptor && propertyDescriptor . set === undefined
79
- )
80
-
81
- if ( canSetProperty ) {
82
- event [ key ] = options [ key ]
83
- }
84
- } )
85
-
82
+ options &&
83
+ Object . keys ( options ) . forEach ( ( key ) => {
84
+ const propertyDescriptor = Object . getOwnPropertyDescriptor (
85
+ eventPrototype ,
86
+ key
87
+ )
88
+ const canSetProperty = ! (
89
+ propertyDescriptor && propertyDescriptor . set === undefined
90
+ )
91
+ if ( canSetProperty ) {
92
+ event [ key ] = options [ key ]
93
+ }
94
+ } )
86
95
return event
87
96
}
97
+
98
+ export { TriggerOptions , createDOMEvent }
0 commit comments