1234567891011121314151617181920212223242526272829303132 |
- import { onBeforeUnmount, onMounted } from 'vue'
- import { isClient } from '@vueuse/core'
- import { EVENT_CODE } from '@element-plus/constants'
- let registeredEscapeHandlers: ((e: KeyboardEvent) => void)[] = []
- const cachedHandler = (e: Event) => {
- const event = e as KeyboardEvent
- if (event.key === EVENT_CODE.esc) {
- registeredEscapeHandlers.forEach((registeredHandler) =>
- registeredHandler(event)
- )
- }
- }
- export const useEscapeKeydown = (handler: (e: KeyboardEvent) => void) => {
- onMounted(() => {
- if (registeredEscapeHandlers.length === 0) {
- document.addEventListener('keydown', cachedHandler)
- }
- if (isClient) registeredEscapeHandlers.push(handler)
- })
- onBeforeUnmount(() => {
- registeredEscapeHandlers = registeredEscapeHandlers.filter(
- (registeredHandler) => registeredHandler !== handler
- )
- if (registeredEscapeHandlers.length === 0) {
- if (isClient) document.removeEventListener('keydown', cachedHandler)
- }
- })
- }
|