import { InfoCardProps } from '@junwon/centum/types'
import { useRouter } from 'solito/router'
import { Paragraph, YStack, XStack, isWeb, Anchor } from 'tamagui'
function CardTitle({ title }: { title: string }) {
const cardTitleStyle = isWeb
? {
fontFamily: 'Spline+Sans',
fontWeight: 500,
}
: { fontFamily: 'SplineSansMedium' }
return (
{title}
)
}
function CardBody({
body,
onLinkPress,
}: {
body: string[]
onLinkPress?: (topic: string) => void
}) {
const router = useRouter()
const cardContentStyle = isWeb
? {
fontFamily: 'Spline+Sans',
fontWeight: 300,
}
: { fontFamily: 'SplineSansLight' }
const renderLinks = (content_parts: (string | JSX.Element)[]): (string | JSX.Element)[] => {
return content_parts
.map((content) => {
if (typeof content !== 'string') return content
const linkColor = '#06CAEB'
const internalLinkRegex = /(\{(.*?)\}\[(.*?)\])/g
const externalLinkRegex = /(\{(.*?)\}\((.*?)\))/g
const parts: (string | JSX.Element)[] = []
let lastIndex = 0
// Process external links
content.replace(externalLinkRegex, (match, _, display_text, external_link, index) => {
if (index > lastIndex) {
parts.push(content.slice(lastIndex, index))
}
lastIndex = index + match.length
parts.push(
{display_text}
)
return match
})
// Process internal links
content.replace(
internalLinkRegex,
(match, fullMatch, display_text, internal_link, index) => {
if (index > lastIndex) {
parts.push(content.slice(lastIndex, index))
}
lastIndex = index + match.length
parts.push(
router.push(`/${internal_link}`)}
>
{display_text}
)
return match
}
)
parts.push(content.slice(lastIndex))
return parts
})
.flat()
}
const renderOldLinks = (content: string): (string | JSX.Element)[] => {
const linkColor = '#06CAEB'
const regex = /(\{\{(.*?)\|(.*?)\}\}|\[\[(.*?)\|(.*?)\]\])/g
const parts: (string | JSX.Element)[] = []
let lastIndex = 0
content.replace(
regex,
(
match,
_,
display_text_ext,
destination_link,
display_text_int,
destination_topic,
index
) => {
parts.push(content.slice(lastIndex, index))
lastIndex = index + match.length
if (match.startsWith('{{')) {
parts.push(
{display_text_ext}
)
} else if (match.startsWith('[[')) {
parts.push(
onLinkPress && onLinkPress(destination_topic)}
>
{display_text_int}
)
}
return match
}
)
parts.push(content.slice(lastIndex))
return parts
}
return (
{body.map((content, index) => (
{renderLinks(renderOldLinks(content))}
))}
)
}
export const InfoCard = (props: InfoCardProps) => {
return (
)
}