DialogWrap.js 2.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677
  1. import _objectSpread from "@babel/runtime/helpers/esm/objectSpread2";
  2. import _extends from "@babel/runtime/helpers/esm/extends";
  3. import { createVNode as _createVNode, resolveDirective as _resolveDirective } from "vue";
  4. import Dialog from './Dialog';
  5. import getDialogPropTypes from './IDialogPropTypes';
  6. import Portal from '../_util/PortalWrapper';
  7. import { defineComponent, ref, watch } from 'vue';
  8. import { useProvidePortal } from '../vc-trigger/context';
  9. import { initDefaultProps } from '../_util/props-util';
  10. const IDialogPropTypes = getDialogPropTypes();
  11. const DialogWrap = defineComponent({
  12. compatConfig: {
  13. MODE: 3
  14. },
  15. name: 'DialogWrap',
  16. inheritAttrs: false,
  17. props: initDefaultProps(IDialogPropTypes, {
  18. visible: false
  19. }),
  20. setup(props, _ref) {
  21. let {
  22. attrs,
  23. slots
  24. } = _ref;
  25. const animatedVisible = ref(props.visible);
  26. useProvidePortal({}, {
  27. inTriggerContext: false
  28. });
  29. watch(() => props.visible, () => {
  30. if (props.visible) {
  31. animatedVisible.value = true;
  32. }
  33. }, {
  34. flush: 'post'
  35. });
  36. return () => {
  37. const {
  38. visible,
  39. getContainer,
  40. forceRender,
  41. destroyOnClose = false,
  42. afterClose
  43. } = props;
  44. let dialogProps = _extends(_extends(_extends({}, props), attrs), {
  45. ref: '_component',
  46. key: 'dialog'
  47. });
  48. // 渲染在当前 dom 里;
  49. if (getContainer === false) {
  50. return _createVNode(Dialog, _objectSpread(_objectSpread({}, dialogProps), {}, {
  51. "getOpenCount": () => 2
  52. }), slots);
  53. }
  54. // Destroy on close will remove wrapped div
  55. if (!forceRender && destroyOnClose && !animatedVisible.value) {
  56. return null;
  57. }
  58. return _createVNode(Portal, {
  59. "autoLock": true,
  60. "visible": visible,
  61. "forceRender": forceRender,
  62. "getContainer": getContainer
  63. }, {
  64. default: childProps => {
  65. dialogProps = _extends(_extends(_extends({}, dialogProps), childProps), {
  66. afterClose: () => {
  67. afterClose === null || afterClose === void 0 ? void 0 : afterClose();
  68. animatedVisible.value = false;
  69. }
  70. });
  71. return _createVNode(Dialog, dialogProps, slots);
  72. }
  73. });
  74. };
  75. }
  76. });
  77. export default DialogWrap;