AnchorLink.js 3.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788
  1. "use strict";
  2. var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
  3. Object.defineProperty(exports, "__esModule", {
  4. value: true
  5. });
  6. exports.default = exports.anchorLinkProps = void 0;
  7. var _vue = require("vue");
  8. var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
  9. var _vueTypes = _interopRequireDefault(require("../_util/vue-types"));
  10. var _propsUtil = require("../_util/props-util");
  11. var _classNames3 = _interopRequireDefault(require("../_util/classNames"));
  12. var _useConfigInject2 = _interopRequireDefault(require("../_util/hooks/useConfigInject"));
  13. var _context = require("./context");
  14. var anchorLinkProps = function anchorLinkProps() {
  15. return {
  16. prefixCls: String,
  17. href: String,
  18. title: _vueTypes.default.any,
  19. target: String
  20. };
  21. };
  22. exports.anchorLinkProps = anchorLinkProps;
  23. var _default = (0, _vue.defineComponent)({
  24. compatConfig: {
  25. MODE: 3
  26. },
  27. name: 'AAnchorLink',
  28. props: (0, _propsUtil.initDefaultProps)(anchorLinkProps(), {
  29. href: '#'
  30. }),
  31. slots: ['title'],
  32. setup: function setup(props, _ref) {
  33. var slots = _ref.slots;
  34. var mergedTitle = null;
  35. var _useInjectAnchor = (0, _context.useInjectAnchor)(),
  36. contextHandleClick = _useInjectAnchor.handleClick,
  37. scrollTo = _useInjectAnchor.scrollTo,
  38. unregisterLink = _useInjectAnchor.unregisterLink,
  39. registerLink = _useInjectAnchor.registerLink,
  40. activeLink = _useInjectAnchor.activeLink;
  41. var _useConfigInject = (0, _useConfigInject2.default)('anchor', props),
  42. prefixCls = _useConfigInject.prefixCls;
  43. var handleClick = function handleClick(e) {
  44. var href = props.href;
  45. contextHandleClick(e, {
  46. title: mergedTitle,
  47. href: href
  48. });
  49. scrollTo(href);
  50. };
  51. (0, _vue.watch)(function () {
  52. return props.href;
  53. }, function (val, oldVal) {
  54. (0, _vue.nextTick)(function () {
  55. unregisterLink(oldVal);
  56. registerLink(val);
  57. });
  58. });
  59. (0, _vue.onMounted)(function () {
  60. registerLink(props.href);
  61. });
  62. (0, _vue.onBeforeUnmount)(function () {
  63. unregisterLink(props.href);
  64. });
  65. return function () {
  66. var _slots$default;
  67. var href = props.href,
  68. target = props.target;
  69. var pre = prefixCls.value;
  70. var title = (0, _propsUtil.getPropsSlot)(slots, props, 'title');
  71. mergedTitle = title;
  72. var active = activeLink.value === href;
  73. var wrapperClassName = (0, _classNames3.default)("".concat(pre, "-link"), (0, _defineProperty2.default)({}, "".concat(pre, "-link-active"), active));
  74. var titleClassName = (0, _classNames3.default)("".concat(pre, "-link-title"), (0, _defineProperty2.default)({}, "".concat(pre, "-link-title-active"), active));
  75. return (0, _vue.createVNode)("div", {
  76. "class": wrapperClassName
  77. }, [(0, _vue.createVNode)("a", {
  78. "class": titleClassName,
  79. "href": href,
  80. "title": typeof title === 'string' ? title : '',
  81. "target": target,
  82. "onClick": handleClick
  83. }, [title]), (_slots$default = slots.default) === null || _slots$default === void 0 ? void 0 : _slots$default.call(slots)]);
  84. };
  85. }
  86. });
  87. exports.default = _default;