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