reka-ui
Version:
Vue port for Radix UI Primitives.
22 lines (20 loc) • 537 B
text/typescript
export function handleAndDispatchCustomEvent<
E extends CustomEvent,
OriginalEvent extends Event,
>(
name: string,
handler: ((event: E) => void) | undefined,
detail: { originalEvent: OriginalEvent } & (E extends CustomEvent<infer D>
? D
: never),
) {
const target = detail.originalEvent.target
const event = new CustomEvent(name, {
bubbles: false,
cancelable: true,
detail,
})
if (handler)
target.addEventListener(name, handler as EventListener, { once: true })
target.dispatchEvent(event)
}