import classNames from 'classnames'; import * as React from 'react'; import type { ConfigConsumerProps } from '../config-provider'; import { ConfigConsumer } from '../config-provider'; import warning from '../_util/warning'; import type { AntAnchor } from './Anchor'; import AnchorContext from './context'; export interface AnchorLinkBaseProps { prefixCls?: string; href: string; target?: string; title: React.ReactNode; className?: string; } export interface AnchorLinkProps extends AnchorLinkBaseProps { children?: React.ReactNode; } const AnchorLink: React.FC = (props) => { const { href = '#', title, prefixCls: customizePrefixCls, children, className, target } = props; const context = React.useContext(AnchorContext); const { registerLink, unregisterLink, scrollTo, onClick, activeLink, direction } = context || {}; React.useEffect(() => { registerLink?.(href); return () => { unregisterLink?.(href); }; }, [href, registerLink, unregisterLink]); const handleClick = (e: React.MouseEvent) => { onClick?.(e, { title, href }); scrollTo?.(href); }; // =================== Warning ===================== if (process.env.NODE_ENV !== 'production') { warning( !children || direction !== 'horizontal', 'Anchor.Link', '`Anchor.Link children` is not supported when `Anchor` direction is horizontal', ); } return ( {({ getPrefixCls }: ConfigConsumerProps) => { const prefixCls = getPrefixCls('anchor', customizePrefixCls); const active = activeLink === href; const wrapperClassName = classNames(`${prefixCls}-link`, className, { [`${prefixCls}-link-active`]: active, }); const titleClassName = classNames(`${prefixCls}-link-title`, { [`${prefixCls}-link-title-active`]: active, }); return (
{title} {direction !== 'horizontal' ? children : null}
); }}
); }; export default AnchorLink;