export default function NavbarNavLink()

in src/theme/NavbarItem/NavbarNavLink.tsx [21:91]


export default function NavbarNavLink({
  activeBasePath,
  activeBaseRegex,
  tos,
  to,
  href,
  label,
  html,
  isDropdownLink,
  prependBaseUrlToHref,
  ...props
}: SProps): JSX.Element {
  // TODO all this seems hacky
  // {to: 'version'} should probably be forbidden, in favor of {to: '/version'}
  const { i18n: { currentLocale } } = useDocusaurusContext();
  // If to is a string, we assume it's a path that needs localization
  const aliasTo = tos?.[currentLocale] || to;
  const toUrl = useBaseUrl(aliasTo);
  const activeBaseUrl = useBaseUrl(activeBasePath);
  const normalizedHref = useBaseUrl(href, {forcePrependBaseUrl: true});
  const isExternalLink = label && href && !isInternalUrl(href);

  const clickLink = (e) => {
     if (e.target?.lang) {
       localStorage.setItem('_lang_user_', e.target.lang);
     }
  }

  // Link content is set through html XOR label
  const linkContentProps = html
    ? {dangerouslySetInnerHTML: {__html: html}}
    : {
        children: (
          <>
            {label}
            {isExternalLink && (
              <IconExternalLink
                {...(isDropdownLink && {width: 12, height: 12})}
              />
            )}
          </>
        ),
      };

  if (href) {
    return (
      <Link
        href={prependBaseUrlToHref ? normalizedHref : href}
        {...props}
        {...linkContentProps}
        onClick={clickLink}
      />
    );
  }

  return (
    <Link
      to={toUrl}
      isNavLink
      {...((activeBasePath || activeBaseRegex) && {
        isActive: (_match, location) =>
          activeBaseRegex
            ? isRegexpStringMatch(activeBaseRegex, location.pathname)
            : location.pathname.startsWith(activeBaseUrl),
      })}
      {...props}
      {...linkContentProps}
      onClick={clickLink}
    />
  );
}