36 lines
1.2 KiB
TypeScript
36 lines
1.2 KiB
TypeScript
import React from "react";
|
|
import NextJSLink, { LinkProps } from "next/link";
|
|
|
|
interface Props extends Omit<LinkProps, "href" | "as"> {
|
|
to: string;
|
|
template?: string;
|
|
target?: string;
|
|
onClick?: (event: React.MouseEvent<HTMLAnchorElement, MouseEvent>) => void;
|
|
onMouseEnter?: (event: React.MouseEvent<HTMLAnchorElement, MouseEvent>) => void;
|
|
onMouseLeave?: (event: React.MouseEvent<HTMLAnchorElement, MouseEvent>) => void;
|
|
}
|
|
|
|
const Link: React.FC<Props> = ({ to, template, passHref, onClick, onMouseEnter, onMouseLeave, ...props }) => {
|
|
if (template) {
|
|
return (
|
|
<NextJSLink href={template} passHref={passHref} as={to} {...props}>
|
|
<a onClick={onClick} onMouseEnter={onMouseEnter} onMouseLeave={onMouseLeave} {...props} />
|
|
</NextJSLink>
|
|
)
|
|
}
|
|
if (to.startsWith("/") || to.startsWith("#")) {
|
|
return (
|
|
<NextJSLink href={to} passHref={passHref} {...props}>
|
|
<a onClick={onClick} onMouseEnter={onMouseEnter} onMouseLeave={onMouseLeave} {...props} />
|
|
</NextJSLink>
|
|
);
|
|
}
|
|
else {
|
|
return (
|
|
<a href={to} onClick={onClick} onMouseEnter={onMouseEnter} onMouseLeave={onMouseLeave} {...props} />
|
|
);
|
|
}
|
|
}
|
|
|
|
export default Link;
|