Skip to content

Commit ca9dac1

Browse files
authored
refactor: remove currentTarget from dom-utils event handlers (@fehmer) (monkeytypegame#7270)
1 parent 96e30b1 commit ca9dac1

File tree

2 files changed

+24
-15
lines changed

2 files changed

+24
-15
lines changed

frontend/src/ts/elements/input-validation.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ import {
88
} from "@monkeytype/schemas/configs";
99
import Config, { setConfig } from "../config";
1010
import * as Notifications from "../elements/notifications";
11-
import { ElementWithUtils } from "../utils/dom";
11+
import { DomUtilsEvent, ElementWithUtils } from "../utils/dom";
1212

1313
export type ValidationResult = {
1414
status: "checking" | "success" | "failed" | "warning";
@@ -60,7 +60,7 @@ export function createInputEventHandler<T>(
6060
callback: (result: ValidationResult) => void,
6161
validation: Validation<T>,
6262
inputValueConvert?: (val: string) => T,
63-
): (e: Event) => Promise<void> {
63+
): (e: DomUtilsEvent) => Promise<void> {
6464
let callIsValid =
6565
validation.isValid !== undefined
6666
? debounceIfNeeded(

frontend/src/ts/utils/dom.ts

Lines changed: 22 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -105,6 +105,12 @@ type ElementWithValue =
105105
| HTMLTextAreaElement
106106
| HTMLSelectElement;
107107

108+
export type DomUtilsEvent<T extends Event = Event> = Omit<T, "currentTarget">;
109+
110+
type DomUtilsEventListenerOrEventListenerObject =
111+
| { (evt: DomUtilsEvent): void }
112+
| { handleEvent(object: DomUtilsEvent): void };
113+
108114
export class ElementWithUtils<T extends HTMLElement = HTMLElement> {
109115
/**
110116
* The native dom element
@@ -238,19 +244,19 @@ export class ElementWithUtils<T extends HTMLElement = HTMLElement> {
238244
*/
239245
on<K extends keyof HTMLElementEventMap>(
240246
event: K,
241-
handler: (this: T, ev: HTMLElementEventMap[K]) => void,
247+
handler: (this: T, ev: DomUtilsEvent<HTMLElementEventMap[K]>) => void,
242248
): this;
243-
on(event: string, handler: EventListenerOrEventListenerObject): this;
249+
on(event: string, handler: DomUtilsEventListenerOrEventListenerObject): this;
244250
on(
245251
event: keyof HTMLElementEventMap | string,
246252
handler:
247-
| EventListenerOrEventListenerObject
248-
| ((this: T, ev: Event) => void),
253+
| DomUtilsEventListenerOrEventListenerObject
254+
| ((this: T, ev: DomUtilsEvent) => void),
249255
): this {
250256
// this type was some AI magic but if it works it works
251257
this.native.addEventListener(
252258
event,
253-
handler as EventListenerOrEventListenerObject,
259+
handler as DomUtilsEventListenerOrEventListenerObject,
254260
);
255261
return this;
256262
}
@@ -262,19 +268,22 @@ export class ElementWithUtils<T extends HTMLElement = HTMLElement> {
262268
onChild<K extends keyof HTMLElementEventMap>(
263269
event: K,
264270
query: string,
265-
handler: (this: HTMLElement, ev: HTMLElementEventMap[K]) => void,
271+
handler: (
272+
this: HTMLElement,
273+
ev: DomUtilsEvent<HTMLElementEventMap[K]>,
274+
) => void,
266275
): this;
267276
onChild(
268277
event: string,
269278
query: string,
270-
handler: EventListenerOrEventListenerObject,
279+
handler: DomUtilsEventListenerOrEventListenerObject,
271280
): this;
272281
onChild(
273282
event: keyof HTMLElementEventMap | string,
274283
query: string,
275284
handler:
276-
| EventListenerOrEventListenerObject
277-
| ((this: HTMLElement, ev: Event) => void),
285+
| DomUtilsEventListenerOrEventListenerObject
286+
| ((this: HTMLElement, ev: DomUtilsEvent) => void),
278287
): this {
279288
// this type was some AI magic but if it works it works
280289
this.native.addEventListener(event, (e) => {
@@ -671,14 +680,14 @@ export class ElementsWithUtils<
671680
*/
672681
on<K extends keyof HTMLElementEventMap>(
673682
event: K,
674-
handler: (this: T, ev: HTMLElementEventMap[K]) => void,
683+
handler: (this: T, ev: DomUtilsEvent<HTMLElementEventMap[K]>) => void,
675684
): this;
676-
on(event: string, handler: EventListenerOrEventListenerObject): this;
685+
on(event: string, handler: DomUtilsEventListenerOrEventListenerObject): this;
677686
on(
678687
event: keyof HTMLElementEventMap | string,
679688
handler:
680-
| EventListenerOrEventListenerObject
681-
| ((this: T, ev: Event) => void),
689+
| DomUtilsEventListenerOrEventListenerObject
690+
| ((this: T, ev: DomUtilsEvent) => void),
682691
): this {
683692
for (const item of this) {
684693
item.on(event, handler);

0 commit comments

Comments
 (0)