AnchorLink.js 3.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990
  1. "use strict";
  2. "use client";
  3. var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default;
  4. var _interopRequireWildcard = require("@babel/runtime/helpers/interopRequireWildcard").default;
  5. Object.defineProperty(exports, "__esModule", {
  6. value: true
  7. });
  8. exports.default = void 0;
  9. var React = _interopRequireWildcard(require("react"));
  10. var _classnames = _interopRequireDefault(require("classnames"));
  11. var _warning = require("../_util/warning");
  12. var _configProvider = require("../config-provider");
  13. var _context = _interopRequireDefault(require("./context"));
  14. const AnchorLink = props => {
  15. const {
  16. href,
  17. title,
  18. prefixCls: customizePrefixCls,
  19. children,
  20. className,
  21. target,
  22. replace
  23. } = props;
  24. const context = React.useContext(_context.default);
  25. const {
  26. registerLink,
  27. unregisterLink,
  28. scrollTo,
  29. onClick,
  30. activeLink,
  31. direction
  32. } = context || {};
  33. React.useEffect(() => {
  34. registerLink === null || registerLink === void 0 ? void 0 : registerLink(href);
  35. return () => {
  36. unregisterLink === null || unregisterLink === void 0 ? void 0 : unregisterLink(href);
  37. };
  38. }, [href]);
  39. const handleClick = e => {
  40. onClick === null || onClick === void 0 ? void 0 : onClick(e, {
  41. title,
  42. href
  43. });
  44. scrollTo === null || scrollTo === void 0 ? void 0 : scrollTo(href);
  45. // Support clicking on an anchor does not record history.
  46. if (e.defaultPrevented) {
  47. return;
  48. }
  49. const isExternalLink = href.startsWith('http://') || href.startsWith('https://');
  50. // Support external link
  51. if (isExternalLink) {
  52. if (replace) {
  53. e.preventDefault();
  54. window.location.replace(href);
  55. }
  56. return;
  57. }
  58. // Handling internal anchor link
  59. e.preventDefault();
  60. const historyMethod = replace ? 'replaceState' : 'pushState';
  61. window.history[historyMethod](null, '', href);
  62. };
  63. // =================== Warning =====================
  64. if (process.env.NODE_ENV !== 'production') {
  65. const warning = (0, _warning.devUseWarning)('Anchor.Link');
  66. process.env.NODE_ENV !== "production" ? warning(!children || direction !== 'horizontal', 'usage', '`Anchor.Link children` is not supported when `Anchor` direction is horizontal') : void 0;
  67. }
  68. const {
  69. getPrefixCls
  70. } = React.useContext(_configProvider.ConfigContext);
  71. const prefixCls = getPrefixCls('anchor', customizePrefixCls);
  72. const active = activeLink === href;
  73. const wrapperClassName = (0, _classnames.default)(`${prefixCls}-link`, className, {
  74. [`${prefixCls}-link-active`]: active
  75. });
  76. const titleClassName = (0, _classnames.default)(`${prefixCls}-link-title`, {
  77. [`${prefixCls}-link-title-active`]: active
  78. });
  79. return /*#__PURE__*/React.createElement("div", {
  80. className: wrapperClassName
  81. }, /*#__PURE__*/React.createElement("a", {
  82. className: titleClassName,
  83. href: href,
  84. title: typeof title === 'string' ? title : '',
  85. target: target,
  86. onClick: handleClick
  87. }, title), direction !== 'horizontal' ? children : null);
  88. };
  89. var _default = exports.default = AnchorLink;