context.js 2.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374
  1. "use strict";
  2. Object.defineProperty(exports, "__esModule", {
  3. value: true
  4. });
  5. exports.useProviderTrigger = exports.useProvidePortal = exports.useInjectTrigger = exports.useInjectPortal = void 0;
  6. var _vue = require("vue");
  7. var TriggerContextKey = Symbol('TriggerContextKey');
  8. var useProviderTrigger = function useProviderTrigger() {
  9. var portal = null;
  10. (0, _vue.provide)(TriggerContextKey, {
  11. setPortal: function setPortal(val) {
  12. portal = val;
  13. },
  14. popPortal: true
  15. });
  16. return function () {
  17. return portal;
  18. };
  19. };
  20. exports.useProviderTrigger = useProviderTrigger;
  21. var useInjectTrigger = function useInjectTrigger(tryPopPortal) {
  22. return tryPopPortal ? (0, _vue.inject)(TriggerContextKey, {
  23. setPortal: function setPortal() {},
  24. popPortal: false
  25. }) : {
  26. setPortal: function setPortal() {},
  27. popPortal: false
  28. };
  29. };
  30. exports.useInjectTrigger = useInjectTrigger;
  31. var PortalContextKey = Symbol('PortalContextKey');
  32. var useProvidePortal = function useProvidePortal(instance) {
  33. var config = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {
  34. inTriggerContext: true
  35. };
  36. (0, _vue.provide)(PortalContextKey, {
  37. inTriggerContext: config.inTriggerContext,
  38. shouldRender: (0, _vue.computed)(function () {
  39. var _ref = instance || {},
  40. sPopupVisible = _ref.sPopupVisible,
  41. popupRef = _ref.popupRef,
  42. forceRender = _ref.forceRender,
  43. autoDestroy = _ref.autoDestroy;
  44. // if (popPortal) return true;
  45. var shouldRender = false;
  46. if (sPopupVisible || popupRef || forceRender) {
  47. shouldRender = true;
  48. }
  49. if (!sPopupVisible && autoDestroy) {
  50. shouldRender = false;
  51. }
  52. return shouldRender;
  53. })
  54. });
  55. };
  56. exports.useProvidePortal = useProvidePortal;
  57. var useInjectPortal = function useInjectPortal() {
  58. useProvidePortal({}, {
  59. inTriggerContext: false
  60. });
  61. var portalContext = (0, _vue.inject)(PortalContextKey, {
  62. shouldRender: (0, _vue.computed)(function () {
  63. return false;
  64. }),
  65. inTriggerContext: false
  66. });
  67. return {
  68. shouldRender: (0, _vue.computed)(function () {
  69. return portalContext.shouldRender.value || portalContext.inTriggerContext === false;
  70. })
  71. };
  72. };
  73. exports.useInjectPortal = useInjectPortal;