|
|
@@ -112,12 +112,37 @@ function createInvoker(
|
|
|
} else if (e._vts <= invoker.attached) {
|
|
|
return
|
|
|
}
|
|
|
- callWithAsyncErrorHandling(
|
|
|
- patchStopImmediatePropagation(e, invoker.value),
|
|
|
- instance,
|
|
|
- ErrorCodes.NATIVE_EVENT_HANDLER,
|
|
|
- [e],
|
|
|
- )
|
|
|
+ const value = invoker.value
|
|
|
+ if (isArray(value)) {
|
|
|
+ const originalStop = e.stopImmediatePropagation
|
|
|
+ e.stopImmediatePropagation = () => {
|
|
|
+ originalStop.call(e)
|
|
|
+ ;(e as any)._stopped = true
|
|
|
+ }
|
|
|
+ const handlers = value.slice()
|
|
|
+ const args = [e]
|
|
|
+ for (let i = 0; i < handlers.length; i++) {
|
|
|
+ if ((e as any)._stopped) {
|
|
|
+ break
|
|
|
+ }
|
|
|
+ const handler = handlers[i]
|
|
|
+ if (handler) {
|
|
|
+ callWithAsyncErrorHandling(
|
|
|
+ handler,
|
|
|
+ instance,
|
|
|
+ ErrorCodes.NATIVE_EVENT_HANDLER,
|
|
|
+ args,
|
|
|
+ )
|
|
|
+ }
|
|
|
+ }
|
|
|
+ } else {
|
|
|
+ callWithAsyncErrorHandling(
|
|
|
+ value,
|
|
|
+ instance,
|
|
|
+ ErrorCodes.NATIVE_EVENT_HANDLER,
|
|
|
+ [e],
|
|
|
+ )
|
|
|
+ }
|
|
|
}
|
|
|
invoker.value = initialValue
|
|
|
invoker.attached = getNow()
|
|
|
@@ -134,21 +159,3 @@ function sanitizeEventValue(value: unknown, propName: string): EventValue {
|
|
|
)
|
|
|
return NOOP
|
|
|
}
|
|
|
-
|
|
|
-function patchStopImmediatePropagation(
|
|
|
- e: Event,
|
|
|
- value: EventValue,
|
|
|
-): EventValue {
|
|
|
- if (isArray(value)) {
|
|
|
- const originalStop = e.stopImmediatePropagation
|
|
|
- e.stopImmediatePropagation = () => {
|
|
|
- originalStop.call(e)
|
|
|
- ;(e as any)._stopped = true
|
|
|
- }
|
|
|
- return (value as Function[]).map(
|
|
|
- fn => (e: Event) => !(e as any)._stopped && fn && fn(e),
|
|
|
- )
|
|
|
- } else {
|
|
|
- return value
|
|
|
- }
|
|
|
-}
|