mirror of
https://github.com/funamitech/mastodon
synced 2024-12-16 07:38:27 +09:00
42 lines
966 B
TypeScript
42 lines
966 B
TypeScript
import { useCallback } from 'react';
|
|
|
|
import { useAppHistory } from './router';
|
|
|
|
interface Props extends React.AnchorHTMLAttributes<HTMLAnchorElement> {
|
|
to: string;
|
|
}
|
|
|
|
export const Permalink: React.FC<Props> = ({
|
|
className,
|
|
href,
|
|
to,
|
|
children,
|
|
...props
|
|
}) => {
|
|
const history = useAppHistory();
|
|
|
|
const handleClick = useCallback<React.MouseEventHandler<HTMLAnchorElement>>(
|
|
(e) => {
|
|
// eslint-disable-next-line @typescript-eslint/no-unnecessary-condition -- history can actually be undefined as the component can be mounted outside a router context
|
|
if (e.button === 0 && !(e.ctrlKey || e.metaKey) && history) {
|
|
e.preventDefault();
|
|
history.push(to);
|
|
}
|
|
},
|
|
[history, to],
|
|
);
|
|
|
|
return (
|
|
<a
|
|
target='_blank'
|
|
rel='noreferrer'
|
|
href={href}
|
|
onClick={handleClick}
|
|
className={`permalink${className ? ' ' + className : ''}`}
|
|
{...props}
|
|
>
|
|
{children}
|
|
</a>
|
|
);
|
|
};
|