From b08d7a70c9b30192dd568340c9d25cfbc8ce3180 Mon Sep 17 00:00:00 2001 From: sibbng Date: Thu, 8 Sep 2022 22:14:28 +0300 Subject: [PATCH 1/4] feat(onClickOutside): add `bubble` modifier to directive --- packages/core/onClickOutside/directive.ts | 17 +++++------------ 1 file changed, 5 insertions(+), 12 deletions(-) diff --git a/packages/core/onClickOutside/directive.ts b/packages/core/onClickOutside/directive.ts index fe41f7a28cb..09f65c133b8 100644 --- a/packages/core/onClickOutside/directive.ts +++ b/packages/core/onClickOutside/directive.ts @@ -1,19 +1,12 @@ import type { FunctionDirective } from 'vue-demi' import { onClickOutside } from '.' -const handler = (): FunctionDirective(evt: E) => void> => { - let stop = null as unknown as ReturnType - return (el, binding) => { - if (stop) { - stop() - stop = onClickOutside(el, binding.value) - return - } - stop = onClickOutside(el, binding.value) - } +export const vOnClickOutside: FunctionDirective void> = (el, binding) => { + const stop = onClickOutside(el, (...args) => { + binding.value(...args) + stop && stop() + }, { capture: !binding.modifiers.bubble }) } -export const vOnClickOutside = handler() - // alias export { vOnClickOutside as VOnClickOutside } From 9b58ea44a5375a42211edcdda8150f742ab6b451 Mon Sep 17 00:00:00 2001 From: sibbng Date: Fri, 9 Sep 2022 03:23:56 +0300 Subject: [PATCH 2/4] fix: migrate to `ObjectDirective` --- packages/core/onClickOutside/demo.vue | 21 ++++++++---------- packages/core/onClickOutside/directive.ts | 26 +++++++++++++++++------ packages/core/onClickOutside/index.ts | 4 +++- 3 files changed, 32 insertions(+), 19 deletions(-) diff --git a/packages/core/onClickOutside/demo.vue b/packages/core/onClickOutside/demo.vue index 533ada38144..4ffc6f407a4 100644 --- a/packages/core/onClickOutside/demo.vue +++ b/packages/core/onClickOutside/demo.vue @@ -1,6 +1,8 @@