index.js 2.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778
  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 _useConfigInject = _interopRequireDefault(require("../../config-provider/hooks/useConfigInject"));
  9. var _isVisible = _interopRequireDefault(require("../../vc-util/Dom/isVisible"));
  10. var _classNames = _interopRequireDefault(require("../classNames"));
  11. var _propsUtil = require("../props-util");
  12. var _style = _interopRequireDefault(require("./style"));
  13. var _useWave = _interopRequireDefault(require("./useWave"));
  14. var _default = exports.default = (0, _vue.defineComponent)({
  15. compatConfig: {
  16. MODE: 3
  17. },
  18. name: 'Wave',
  19. props: {
  20. disabled: Boolean
  21. },
  22. setup(props, _ref) {
  23. let {
  24. slots
  25. } = _ref;
  26. const instance = (0, _vue.getCurrentInstance)();
  27. const {
  28. prefixCls,
  29. wave
  30. } = (0, _useConfigInject.default)('wave', props);
  31. // ============================== Style ===============================
  32. const [, hashId] = (0, _style.default)(prefixCls);
  33. // =============================== Wave ===============================
  34. const showWave = (0, _useWave.default)(instance, (0, _vue.computed)(() => (0, _classNames.default)(prefixCls.value, hashId.value)), wave);
  35. let onClick;
  36. const clear = () => {
  37. const node = (0, _propsUtil.findDOMNode)(instance);
  38. node.removeEventListener('click', onClick, true);
  39. };
  40. (0, _vue.onMounted)(() => {
  41. (0, _vue.watch)(() => props.disabled, () => {
  42. clear();
  43. (0, _vue.nextTick)(() => {
  44. const node = (0, _propsUtil.findDOMNode)(instance);
  45. node === null || node === void 0 ? void 0 : node.removeEventListener('click', onClick, true);
  46. if (!node || node.nodeType !== 1 || props.disabled) {
  47. return;
  48. }
  49. // Click handler
  50. onClick = e => {
  51. // Fix radio button click twice
  52. if (e.target.tagName === 'INPUT' || !(0, _isVisible.default)(e.target) ||
  53. // No need wave
  54. !node.getAttribute || node.getAttribute('disabled') || node.disabled || node.className.includes('disabled') || node.className.includes('-leave')) {
  55. return;
  56. }
  57. showWave();
  58. };
  59. // Bind events
  60. node.addEventListener('click', onClick, true);
  61. });
  62. }, {
  63. immediate: true,
  64. flush: 'post'
  65. });
  66. });
  67. (0, _vue.onBeforeUnmount)(() => {
  68. clear();
  69. });
  70. return () => {
  71. var _a;
  72. // ============================== Render ==============================
  73. const children = (_a = slots.default) === null || _a === void 0 ? void 0 : _a.call(slots)[0];
  74. return children;
  75. };
  76. }
  77. });