Skip to content

Commit 0e7d99e

Browse files
dbismutKent C. Dodds
authored and
Kent C. Dodds
committed
feat: add createEvent that returns the created Event (#258)
* Add createEvent that returns the created Event * Typescript definitions for createEvent * Revert package.json 😬
1 parent fcb2cbc commit 0e7d99e

File tree

2 files changed

+11
-4
lines changed

2 files changed

+11
-4
lines changed

src/events.js

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -307,11 +307,13 @@ function fireEvent(element, event) {
307307
return element.dispatchEvent(event)
308308
}
309309

310+
const createEvent = {}
311+
310312
Object.keys(eventMap).forEach(key => {
311313
const {EventType, defaultInit} = eventMap[key]
312314
const eventName = key.toLowerCase()
313315

314-
fireEvent[key] = (node, init) => {
316+
createEvent[key] = (node, init) => {
315317
const eventInit = {...defaultInit, ...init}
316318
const {target: {value, files, ...targetProperties} = {}} = eventInit
317319
Object.assign(node, targetProperties)
@@ -331,9 +333,10 @@ Object.keys(eventMap).forEach(key => {
331333
}
332334
const window = getWindowFromNode(node)
333335
const EventConstructor = window[EventType] || window.Event
334-
const event = new EventConstructor(eventName, eventInit)
335-
return fireEvent(node, event)
336+
return new EventConstructor(eventName, eventInit)
336337
}
338+
339+
fireEvent[key] = (node, init) => fireEvent(node, createEvent[key](node, init))
337340
})
338341

339342
function getWindowFromNode(node) {
@@ -377,6 +380,6 @@ Object.keys(eventAliasMap).forEach(aliasKey => {
377380
fireEvent[aliasKey] = (...args) => fireEvent[key](...args)
378381
})
379382

380-
export {fireEvent}
383+
export {fireEvent, createEvent}
381384

382385
/* eslint complexity:["error", 9] */

typings/events.d.ts

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -75,5 +75,9 @@ export type FireFunction = (element: Element | Window, event: Event) => boolean
7575
export type FireObject = {
7676
[K in EventType]: (element: Element | Window, options?: {}) => boolean
7777
}
78+
export type CreateObject = {
79+
[K in EventType]: (element: Element | Window, options?: {}) => Event
80+
}
7881

82+
export const createEvent: CreateObject
7983
export const fireEvent: FireFunction & FireObject

0 commit comments

Comments
 (0)