mirror of
https://github.com/element-plus/element-plus.git
synced 2024-12-27 03:01:14 +08:00
bbd16a08e9
* refactor(hooks): remove use-css-var * refactor(hooks): remove use-events * refactor(hooks): remove use-migrating * refactor(hooks): remove use-transition * refactor(hooks): named export useAttrs * refactor(hooks): named export useFocus * refactor(hooks): refactor useFormItem * refactor(hooks): refactor useGlobalConfig * refactor(hooks): refactor useLocale * refactor(hooks): refactor useLockscreen * refactor(hooks): refactor useModal * refactor(hooks): refactor useModelToggle * refactor(hooks): refactor usePreventGlobal * refactor(hooks): refactor useRestoreActive * refactor(hooks): refactor useTeleport * refactor(hooks): refactor useThrottleRender * refactor(hooks): refactor useTimeout * refactor(hooks): refactor useTransitionFallthrogh
26 lines
614 B
TypeScript
26 lines
614 B
TypeScript
import { watch } from 'vue'
|
|
import { useEventListener } from '@vueuse/core'
|
|
import type { Ref } from 'vue'
|
|
|
|
export const usePreventGlobal = <E extends keyof DocumentEventMap>(
|
|
indicator: Ref<boolean>,
|
|
evt: E,
|
|
cb: (e: DocumentEventMap[E]) => boolean
|
|
) => {
|
|
const prevent = (e: DocumentEventMap[E]) => {
|
|
if (cb(e)) e.stopImmediatePropagation()
|
|
}
|
|
let stop: (() => void) | undefined = undefined
|
|
watch(
|
|
() => indicator.value,
|
|
(val) => {
|
|
if (val) {
|
|
stop = useEventListener(document, evt, prevent, true)
|
|
} else {
|
|
stop?.()
|
|
}
|
|
},
|
|
{ immediate: true }
|
|
)
|
|
}
|