mirror of
https://gitee.com/vant-contrib/vant.git
synced 2025-04-06 03:57:59 +08:00
78 lines
1.6 KiB
TypeScript
78 lines
1.6 KiB
TypeScript
import Overlay from '../../overlay';
|
|
import { context } from './context';
|
|
import { mount } from '../../utils/functional';
|
|
import { removeNode } from '../../utils/dom/node';
|
|
|
|
export type OverlayConfig = {
|
|
zIndex?: number;
|
|
className?: string;
|
|
customStyle?: string | object[] | object;
|
|
};
|
|
|
|
const defaultConfig: OverlayConfig = {
|
|
className: '',
|
|
customStyle: {},
|
|
};
|
|
|
|
function mountOverlay(vm: any) {
|
|
return mount(Overlay, {
|
|
on: {
|
|
// close popup when overlay clicked & closeOnClickOverlay is true
|
|
click() {
|
|
vm.$emit('click-overlay');
|
|
|
|
if (vm.closeOnClickOverlay) {
|
|
if (vm.onClickOverlay) {
|
|
vm.onClickOverlay();
|
|
} else {
|
|
vm.close();
|
|
}
|
|
}
|
|
},
|
|
},
|
|
});
|
|
}
|
|
|
|
export function updateOverlay(vm: any): void {
|
|
const item = context.find(vm);
|
|
|
|
if (item) {
|
|
const el = vm.$el;
|
|
const { config, overlay } = item;
|
|
|
|
if (el && el.parentNode) {
|
|
el.parentNode.insertBefore(overlay.$el, el);
|
|
}
|
|
|
|
Object.assign(overlay, defaultConfig, config, {
|
|
show: true,
|
|
});
|
|
}
|
|
}
|
|
|
|
export function openOverlay(vm: any, config: OverlayConfig): void {
|
|
const item = context.find(vm);
|
|
if (item) {
|
|
item.config = config;
|
|
} else {
|
|
const overlay = mountOverlay(vm);
|
|
context.stack.push({ vm, config, overlay });
|
|
}
|
|
|
|
updateOverlay(vm);
|
|
}
|
|
|
|
export function closeOverlay(vm: any): void {
|
|
const item = context.find(vm);
|
|
if (item) {
|
|
item.overlay.show = false;
|
|
}
|
|
}
|
|
|
|
export function removeOverlay(vm: any) {
|
|
const item = context.find(vm);
|
|
if (item) {
|
|
removeNode(item.overlay.$el);
|
|
}
|
|
}
|