12345678910111213141516171819202122232425262728293031323334353637383940 |
- import { useChatContext } from '@/app/components/base/chat/chat/context'
- import Button from '@/app/components/base/button'
- import cn from '@/utils/classnames'
- const MarkdownButton = ({ node }: any) => {
- const { onSend } = useChatContext()
- 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}
- className={cn('!h-8 !px-3 select-none')}
- onClick={() => {
- if (is_valid_url(link)) {
- window.open(link, '_blank')
- return
- }
- onSend?.(message)
- }}
- >
- <span className='text-[13px]'>{node.children[0]?.value || ''}</span>
- </Button>
- }
- MarkdownButton.displayName = 'MarkdownButton'
- export default MarkdownButton
|