From ce982571bec238396dcc574134d60e93296ec512 Mon Sep 17 00:00:00 2001 From: Pooya Parsa Date: Mon, 4 Apr 2022 20:45:37 +0200 Subject: [PATCH] feat: `dynamicEventHandler` --- src/event.ts | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/src/event.ts b/src/event.ts index b5ecc6e1..0ed4add7 100644 --- a/src/event.ts +++ b/src/event.ts @@ -59,6 +59,20 @@ export function lazyEventHandler (factory: LazyEventHandler): EventHandler { /** @deprecated use lazyEventHandler() */ export const defineLazyEventHandler = lazyEventHandler +export interface DynamicEventHandler extends EventHandler { + set: (handler: EventHandler) => void +} +export function dynamicEventHandler (initial?: EventHandler): DynamicEventHandler { + let current: EventHandler | undefined = initial + const wrapper = eventHandler((event) => { + if (current) { + return current(event) + } + }) as DynamicEventHandler + wrapper.set = (handler) => { current = handler } + return wrapper +} + export function isEventHandler (input: any): input is EventHandler { return '__is_handler__' in input }