@ithinkdt/core
Version:
iThinkDT Core
28 lines (26 loc) • 825 B
JavaScript
import { useEventListener } from '@vueuse/core'
import { inject } from 'vue'
import { onBeforeRouteLeave } from 'vue-router'
import { useTheme, PageTabInjection } from '../plugin'
export function onPageClose(hook, { hookWindowLeave = false } = {}) {
const theme = useTheme()
if (theme.multiTab) {
const tab = inject(PageTabInjection, () => {}, true)
if (tab) {
tab.hooks ??= []
tab.hooks.push(hook)
}
} else {
onBeforeRouteLeave(() => hook())
}
if (hookWindowLeave) {
useEventListener('beforeunload', (e) => {
const ret = hook(true)
if (ret) {
e.preventDefault()
e.returnValue = typeof ret === 'string' ? ret : ''
return e.returnValue
}
})
}
}