import Dialog from './Dialog' import ContainerRender from '../_util/ContainerRender' import getDialogPropTypes from './IDialogPropTypes' import { getStyle, getClass } from '../_util/props-util' const IDialogPropTypes = getDialogPropTypes() const DialogWrap = { props: { ...IDialogPropTypes, visible: IDialogPropTypes.visible.def(false), }, data () { this.renderComponent = () => {} this.removeContainer = () => {} return {} }, beforeDestroy () { if (this.visible) { this.renderComponent({ afterClose: this.removeContainer, visible: false, on: { close () {}, }, }) } else { this.removeContainer() } }, methods: { getComponent (extra = {}) { const { $attrs, $listeners, $props, $slots } = this const { on, ...otherProps } = extra const dialogProps = { props: { ...$props, dialogClass: getClass(this), dialogStyle: getStyle(this), ...otherProps, }, attrs: $attrs, ref: '_component', key: 'dialog', on: { ...$listeners, ...on, }, } return ( {$slots.default} ) }, getContainer2 () { if (this.getContainer) { return this.getContainer() } const container = document.createElement('div') document.body.appendChild(container) return container }, }, render () { const { visible } = this return ( { this.renderComponent = renderComponent this.removeContainer = removeContainer return null }} /> ) }, } export default DialogWrap