overlay.js 1.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677
  1. import _extends from "@babel/runtime/helpers/esm/extends";
  2. import Overlay from '../../overlay';
  3. import { context } from './context';
  4. import { mount } from '../../utils/functional';
  5. var defaultConfig = {
  6. className: '',
  7. customStyle: {}
  8. };
  9. var overlay; // close popup when click overlay && closeOnClickOverlay is true
  10. function onClickOverlay() {
  11. if (context.top) {
  12. var vm = context.top.vm;
  13. vm.$emit('click-overlay');
  14. if (vm.closeOnClickOverlay) {
  15. if (vm.onClickOverlay) {
  16. vm.onClickOverlay();
  17. } else {
  18. vm.close();
  19. }
  20. }
  21. }
  22. }
  23. export function updateOverlay() {
  24. if (!overlay) {
  25. overlay = mount(Overlay, {
  26. on: {
  27. click: onClickOverlay
  28. }
  29. });
  30. }
  31. if (context.top) {
  32. var _context$top = context.top,
  33. vm = _context$top.vm,
  34. config = _context$top.config;
  35. var el = vm.$el;
  36. var target = el && el.parentNode ? el.parentNode : document.body;
  37. if (target) {
  38. target.appendChild(overlay.$el);
  39. }
  40. _extends(overlay, defaultConfig, config, {
  41. visible: true
  42. });
  43. } else {
  44. overlay.visible = false;
  45. }
  46. }
  47. export function openOverlay(vm, config) {
  48. if (!context.stack.some(function (item) {
  49. return item.vm === vm;
  50. })) {
  51. context.stack.push({
  52. vm: vm,
  53. config: config
  54. });
  55. updateOverlay();
  56. }
  57. }
  58. export function closeOverlay(vm) {
  59. var stack = context.stack;
  60. if (stack.length) {
  61. if (context.top.vm === vm) {
  62. stack.pop();
  63. updateOverlay();
  64. } else {
  65. context.stack = stack.filter(function (item) {
  66. return item.vm !== vm;
  67. });
  68. }
  69. }
  70. }