/
Link.tsx
36 lines (32 loc) · 963 Bytes
/
Link.tsx
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
import { Link as ASTLink } from '@rocket.chat/message-parser';
import React, { FC } from 'react';
import { baseURI } from '../../../lib/baseuri';
import Bold from './Bold';
import Italic from './Italic';
import Strike from './Strike';
type LinkProps = {
value: ASTLink['value'];
};
const Link: FC<LinkProps> = ({ value }) => {
const { src, label } = value;
const target = src.value.indexOf(baseURI) === 0 ? '' : '_blank';
return (
<a href={src.value} data-title={src.value} target={target} rel='noopener noreferrer'>
{((block: ASTLink['value']['label']): JSX.Element | string | null => {
switch (block.type) {
case 'PLAIN_TEXT':
return <>{block.value}</>;
case 'STRIKE':
return <Strike value={block.value} />;
case 'ITALIC':
return <Italic value={block.value} />;
case 'BOLD':
return <Bold value={block.value} />;
default:
return null;
}
})(label)}
</a>
);
};
export default Link;