ExternalLink.tsx raw
1 import { Link } from "react-router";
2 import { isHttpMode } from "src/utils/isHttpMode";
3 import { openLink } from "src/utils/openLink";
4
5 type Props = React.HTMLAttributes<HTMLElement> & {
6 to: string;
7 children?: React.ReactNode;
8 };
9
10 export default function ExternalLink({ to, children, ...props }: Props) {
11 const _isHttpMode = isHttpMode();
12
13 return _isHttpMode ? (
14 <Link to={to} target="_blank" rel="noreferer noopener" {...props}>
15 {children}
16 </Link>
17 ) : (
18 <span
19 {...props}
20 onClick={(e) => {
21 props.onClick?.(e);
22 if (!e.defaultPrevented) {
23 openLink(to);
24 }
25 }}
26 >
27 {children}
28 </span>
29 );
30 }
31