import MuiLink, { LinkProps as MuiLinkProps } from "@mui/material/Link"; import { styled } from "@mui/material/styles"; import clsx from "clsx"; import NextLink, { LinkProps as NextLinkProps } from "next/link"; import { useRouter } from "next/router"; import * as React from "react"; // Add support for the sx prop for consistency with the other branches. const Anchor = styled("a")({}); interface NextLinkComposedProps extends Omit, "href">, Omit { to: NextLinkProps["href"]; linkAs?: NextLinkProps["as"]; } export const NextLinkComposed = React.forwardRef(function NextLinkComposed( props, ref ) { const { to, linkAs, replace, scroll, shallow, prefetch, locale, ...other } = props; return ( ); }); export type LinkProps = { activeClassName?: string; as?: NextLinkProps["as"]; href: NextLinkProps["href"]; linkAs?: NextLinkProps["as"]; // Useful when the as prop is shallow by styled(). noLinkStyle?: boolean; } & Omit & Omit; // A styled version of the Next.js Link component: // https://nextjs.org/docs/api-reference/next/link const Link = React.forwardRef(function Link(props, ref) { const { activeClassName = "active", as, className: classNameProps, href, linkAs: linkAsProp, locale, noLinkStyle, prefetch, replace, role, // Link don't have roles. scroll, shallow, ...other } = props; const router = useRouter(); const pathname = typeof href === "string" ? href : href.pathname; const className = clsx(classNameProps, { [activeClassName]: router.pathname === pathname && activeClassName, }); const isExternal = typeof href === "string" && (href.indexOf("http") === 0 || href.indexOf("mailto:") === 0); if (isExternal) { if (noLinkStyle) { return ; } return ; } const linkAs = linkAsProp || as; const nextjsProps = { to: href, linkAs, replace, scroll, shallow, prefetch, locale }; if (noLinkStyle) { return ; } return ; }); export default Link;