1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162 |
- import React from 'react';
- import Link from '@docusaurus/Link';
- import useBaseUrl from '@docusaurus/useBaseUrl';
- import isInternalUrl from '@docusaurus/isInternalUrl';
- import {isRegexpStringMatch} from '@docusaurus/theme-common';
- import IconExternalLink from '@theme/Icon/ExternalLink';
- export default function NavbarNavLink({
- activeBasePath,
- activeBaseRegex,
- to,
- href,
- label,
- html,
- isDropdownLink,
- prependBaseUrlToHref,
- ...props
- }) {
- // TODO all this seems hacky
- // {to: 'version'} should probably be forbidden, in favor of {to: '/version'}
- const toUrl = useBaseUrl(to);
- const activeBaseUrl = useBaseUrl(activeBasePath);
- const normalizedHref = useBaseUrl(href, {forcePrependBaseUrl: true});
- const isExternalLink = label && href && !isInternalUrl(href);
- // 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}
- />
- );
- }
- return (
- <Link
- to={toUrl}
- isNavLink
- {...((activeBasePath || activeBaseRegex) && {
- isActive: (_match, location) =>
- activeBaseRegex
- ? isRegexpStringMatch(activeBaseRegex, location.pathname)
- : location.pathname.startsWith(activeBaseUrl),
- })}
- {...props}
- {...linkContentProps}
- />
- );
- }
|