@prosekit/svelte
Version:
Svelte components and utilities for ProseKit
27 lines (23 loc) • 699 B
text/typescript
export function useEventHandlers(
element: HTMLElement,
eventHandlers: Record<string, (...args: any[]) => any>,
) {
const disposes: VoidFunction[] = []
const update = (eventHandlers: Record<string, (...args: any[]) => any>) => {
disposes.forEach((dispose) => dispose())
disposes.length = 0
for (const [name, handler] of Object.entries(eventHandlers)) {
element.addEventListener(name, handler)
disposes.push(() => element.removeEventListener(name, handler))
}
}
update(eventHandlers)
return {
update(eventHandlers: Record<string, (...args: any[]) => any>): void {
update(eventHandlers)
},
destroy(): void {
update({})
},
}
}