markdown-button.tsx 985 Bytes
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