markdown-button.tsx
985 Bytes
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
37
import { Button } from 'antd';
import './base.less'
import './style.less'
const MarkdownButton = ({ node }: any) => {
const variant = node.properties.dataVariant
const message = node.properties.dataMessage
const link = node.properties.dataLink
const size = node.properties.dataSize
function is_valid_url(url: string): boolean {
try {
const parsed_url = new URL(url)
return ['http:', 'https:'].includes(parsed_url.protocol)
}
catch {
return false
}
}
return <Button
variant={variant}
size={size}
onClick={() => {
if (is_valid_url(link)) {
window.open(link, '_blank')
return
}
console.log('message', message)
}}
>
<span className='text-[13px]'>{node.children[0]?.value || ''}</span>
</Button>
}
MarkdownButton.displayName = 'MarkdownButton'
export default MarkdownButton