UNPKG

@ithinkdt/core

Version:

iThinkDT Core

28 lines (26 loc) 825 B
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 } }) } }