import addressModal from '../../components/addressModal'
import uploadModal from '../../components/uploadModal'
import exportModal from '../../components/exportModal'
import refocusModal from '../../components/refocusModal'
import store from '../../store'
function install(Vue) {
function showModal(type, { cancelCallback, confirmCallback, handlerCallback, ...restProps }) {
let modalComponent
switch (type) {
case 'address':
modalComponent = addressModal
break
case 'upload':
modalComponent = uploadModal
break
case 'export':
modalComponent = exportModal
break
case 'refocus':
modalComponent = refocusModal
break
default:
return
}
const Modal = Vue.extend(modalComponent)
const instance = new Modal({
store,
propsData: {
value: true,
...restProps,
},
methods: {
close() {
document.body.removeChild(this.$el)
this.$destroy()
},
},
}).$mount()
if (cancelCallback) {
instance.$on('on-cancel', cancelCallback)
}
if (confirmCallback) {
instance.$on('on-ok', confirmCallback)
}
if (handlerCallback) {
instance.$on('handler', handlerCallback)
}
document.body.appendChild(instance.$el)
}
Vue.prototype.$showModal = showModal
return showModal
}
export default install