FloatButtonGroup.js 6.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148
  1. "use strict";
  2. var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
  3. Object.defineProperty(exports, "__esModule", {
  4. value: true
  5. });
  6. exports.default = void 0;
  7. var _vue = require("vue");
  8. var _objectSpread2 = _interopRequireDefault(require("@babel/runtime/helpers/objectSpread2"));
  9. var _CloseOutlined = _interopRequireDefault(require("@ant-design/icons-vue/lib/icons/CloseOutlined"));
  10. var _FileTextOutlined = _interopRequireDefault(require("@ant-design/icons-vue/lib/icons/FileTextOutlined"));
  11. var _classNames = _interopRequireDefault(require("../_util/classNames"));
  12. var _transition = require("../_util/transition");
  13. var _FloatButton = _interopRequireWildcard(require("./FloatButton"));
  14. var _useConfigInject = _interopRequireDefault(require("../config-provider/hooks/useConfigInject"));
  15. var _context = require("./context");
  16. var _propsUtil = require("../_util/props-util");
  17. var _interface = require("./interface");
  18. var _canUseDom = _interopRequireDefault(require("../_util/canUseDom"));
  19. var _style = _interopRequireDefault(require("./style"));
  20. var _useMergedState = _interopRequireDefault(require("../_util/hooks/useMergedState"));
  21. function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function (e) { return e ? t : r; })(e); }
  22. function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != typeof e && "function" != typeof e) return { default: e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && Object.prototype.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n.default = e, t && t.set(e, n), n; }
  23. // CSSINJS
  24. const FloatButtonGroup = (0, _vue.defineComponent)({
  25. compatConfig: {
  26. MODE: 3
  27. },
  28. name: 'AFloatButtonGroup',
  29. inheritAttrs: false,
  30. props: (0, _propsUtil.initDefaultProps)((0, _interface.floatButtonGroupProps)(), {
  31. type: 'default',
  32. shape: 'circle'
  33. }),
  34. setup(props, _ref) {
  35. let {
  36. attrs,
  37. slots,
  38. emit
  39. } = _ref;
  40. const {
  41. prefixCls,
  42. direction
  43. } = (0, _useConfigInject.default)(_FloatButton.floatButtonPrefixCls, props);
  44. // style
  45. const [wrapSSR, hashId] = (0, _style.default)(prefixCls);
  46. const [open, setOpen] = (0, _useMergedState.default)(false, {
  47. value: (0, _vue.computed)(() => props.open)
  48. });
  49. const floatButtonGroupRef = (0, _vue.ref)(null);
  50. const floatButtonRef = (0, _vue.ref)(null);
  51. (0, _context.useProvideFloatButtonGroupContext)({
  52. shape: (0, _vue.computed)(() => props.shape)
  53. });
  54. const hoverTypeAction = {
  55. onMouseenter() {
  56. var _a;
  57. setOpen(true);
  58. emit('update:open', true);
  59. (_a = props.onOpenChange) === null || _a === void 0 ? void 0 : _a.call(props, true);
  60. },
  61. onMouseleave() {
  62. var _a;
  63. setOpen(false);
  64. emit('update:open', false);
  65. (_a = props.onOpenChange) === null || _a === void 0 ? void 0 : _a.call(props, false);
  66. }
  67. };
  68. const hoverAction = (0, _vue.computed)(() => {
  69. return props.trigger === 'hover' ? hoverTypeAction : {};
  70. });
  71. const handleOpenChange = () => {
  72. var _a;
  73. const nextOpen = !open.value;
  74. emit('update:open', nextOpen);
  75. (_a = props.onOpenChange) === null || _a === void 0 ? void 0 : _a.call(props, nextOpen);
  76. setOpen(nextOpen);
  77. };
  78. const onClick = e => {
  79. var _a, _b, _c;
  80. if ((_a = floatButtonGroupRef.value) === null || _a === void 0 ? void 0 : _a.contains(e.target)) {
  81. if ((_b = (0, _propsUtil.findDOMNode)(floatButtonRef.value)) === null || _b === void 0 ? void 0 : _b.contains(e.target)) {
  82. handleOpenChange();
  83. }
  84. return;
  85. }
  86. setOpen(false);
  87. emit('update:open', false);
  88. (_c = props.onOpenChange) === null || _c === void 0 ? void 0 : _c.call(props, false);
  89. };
  90. (0, _vue.watch)((0, _vue.computed)(() => props.trigger), value => {
  91. if (!(0, _canUseDom.default)()) {
  92. return;
  93. }
  94. document.removeEventListener('click', onClick);
  95. if (value === 'click') {
  96. document.addEventListener('click', onClick);
  97. }
  98. }, {
  99. immediate: true
  100. });
  101. (0, _vue.onBeforeUnmount)(() => {
  102. document.removeEventListener('click', onClick);
  103. });
  104. return () => {
  105. var _a;
  106. const {
  107. shape = 'circle',
  108. type = 'default',
  109. tooltip,
  110. description,
  111. trigger
  112. } = props;
  113. const groupPrefixCls = `${prefixCls.value}-group`;
  114. const groupCls = (0, _classNames.default)(groupPrefixCls, hashId.value, attrs.class, {
  115. [`${groupPrefixCls}-rtl`]: direction.value === 'rtl',
  116. [`${groupPrefixCls}-${shape}`]: shape,
  117. [`${groupPrefixCls}-${shape}-shadow`]: !trigger
  118. });
  119. const wrapperCls = (0, _classNames.default)(hashId.value, `${groupPrefixCls}-wrap`);
  120. const transitionProps = (0, _transition.getTransitionProps)(`${groupPrefixCls}-wrap`);
  121. return wrapSSR((0, _vue.createVNode)("div", (0, _objectSpread2.default)((0, _objectSpread2.default)({
  122. "ref": floatButtonGroupRef
  123. }, attrs), {}, {
  124. "class": groupCls
  125. }, hoverAction.value), [trigger && ['click', 'hover'].includes(trigger) ? (0, _vue.createVNode)(_vue.Fragment, null, [(0, _vue.createVNode)(_transition.Transition, transitionProps, {
  126. default: () => [(0, _vue.withDirectives)((0, _vue.createVNode)("div", {
  127. "class": wrapperCls
  128. }, [slots.default && slots.default()]), [[_vue.vShow, open.value]])]
  129. }), (0, _vue.createVNode)(_FloatButton.default, {
  130. "ref": floatButtonRef,
  131. "type": type,
  132. "shape": shape,
  133. "tooltip": tooltip,
  134. "description": description
  135. }, {
  136. icon: () => {
  137. var _a, _b;
  138. return open.value ? ((_a = slots.closeIcon) === null || _a === void 0 ? void 0 : _a.call(slots)) || (0, _vue.createVNode)(_CloseOutlined.default, null, null) : ((_b = slots.icon) === null || _b === void 0 ? void 0 : _b.call(slots)) || (0, _vue.createVNode)(_FileTextOutlined.default, null, null);
  139. },
  140. tooltip: slots.tooltip,
  141. description: slots.description
  142. })]) : (_a = slots.default) === null || _a === void 0 ? void 0 : _a.call(slots)]));
  143. };
  144. }
  145. });
  146. var _default = exports.default = FloatButtonGroup;