FormDialog.js 939 B

1234567891011121314151617181920212223242526272829303132333435363738
  1. import { render, h } from 'vue'
  2. import { hasOwn } from '@vue/shared'
  3. import FormDialogConstructor from './index'
  4. function showFormDialog (options, resolve, reject) {
  5. const container = document.createElement('div')
  6. options.onVanish = () => {
  7. render(null, container)
  8. }
  9. options.onAction = (action) => {
  10. if (action === 'close') {
  11. reject()
  12. } else {
  13. resolve()
  14. }
  15. }
  16. const vnode = h(FormDialogConstructor, options)
  17. render(vnode, container)
  18. document.body.appendChild(container)
  19. const instance = vnode.component
  20. const vm = instance.proxy
  21. // eslint-disable-next-line no-unused-vars
  22. for (const prop in options) {
  23. if (hasOwn(options, prop) && !hasOwn(vm.$props, prop)) {
  24. vm[prop] = options[prop]
  25. }
  26. }
  27. vm.visible = true
  28. }
  29. function FormDialog (options = {}) {
  30. return new Promise((resolve, reject) => {
  31. showFormDialog(options, resolve, reject)
  32. })
  33. }
  34. export default FormDialog