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}
/>
);
}