52 lines
2.1 KiB
JavaScript
52 lines
2.1 KiB
JavaScript
import { useMemo } from 'vooks';
|
|
import { off, on } from 'evtd';
|
|
import { inject, onBeforeUnmount, onMounted, ref } from 'vue';
|
|
import { internalSelectionMenuBodyInjectionKey } from "../../_internal/select-menu/src/interface.mjs";
|
|
import { modalBodyInjectionKey } from "../../modal/src/interface.mjs";
|
|
import { drawerBodyInjectionKey } from "../../drawer/src/interface.mjs";
|
|
import { popoverBodyInjectionKey } from "../../popover/src/interface.mjs";
|
|
const teleportDisabled = '__disabled__';
|
|
function useAdjustedTo(props) {
|
|
const modal = inject(modalBodyInjectionKey, null);
|
|
const drawer = inject(drawerBodyInjectionKey, null);
|
|
const popover = inject(popoverBodyInjectionKey, null);
|
|
const selectMenu = inject(internalSelectionMenuBodyInjectionKey, null);
|
|
const fullscreenElementRef = ref();
|
|
if (typeof document !== 'undefined') {
|
|
fullscreenElementRef.value = document.fullscreenElement;
|
|
const handleFullscreenChange = () => {
|
|
fullscreenElementRef.value = document.fullscreenElement;
|
|
};
|
|
onMounted(() => {
|
|
on('fullscreenchange', document, handleFullscreenChange);
|
|
});
|
|
onBeforeUnmount(() => {
|
|
off('fullscreenchange', document, handleFullscreenChange);
|
|
});
|
|
}
|
|
return useMemo(() => {
|
|
var _a;
|
|
const {
|
|
to
|
|
} = props;
|
|
if (to !== undefined) {
|
|
if (to === false) return teleportDisabled;
|
|
if (to === true) return fullscreenElementRef.value || 'body';
|
|
return to;
|
|
}
|
|
if (modal === null || modal === void 0 ? void 0 : modal.value) {
|
|
return (_a = modal.value.$el) !== null && _a !== void 0 ? _a : modal.value;
|
|
}
|
|
if (drawer === null || drawer === void 0 ? void 0 : drawer.value) return drawer.value;
|
|
if (popover === null || popover === void 0 ? void 0 : popover.value) return popover.value;
|
|
if (selectMenu === null || selectMenu === void 0 ? void 0 : selectMenu.value) return selectMenu.value;
|
|
return to !== null && to !== void 0 ? to : fullscreenElementRef.value || 'body';
|
|
});
|
|
}
|
|
// teleport disabled key
|
|
useAdjustedTo.tdkey = teleportDisabled;
|
|
useAdjustedTo.propTo = {
|
|
type: [String, Object, Boolean],
|
|
default: undefined
|
|
};
|
|
export { useAdjustedTo }; |