| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263 |
- import { motion } from 'framer-motion'
- import { useEffect, useState } from 'react'
- import { cn } from 'ui'
- import { Markdown } from '@/components/interfaces/Markdown'
- const CHAR_LIMIT = 500 // Adjust this number as needed
- export const MarkdownContent = ({
- integrationId,
- initiallyExpanded,
- }: {
- integrationId: string
- initiallyExpanded?: boolean
- }) => {
- const [content, setContent] = useState<string>('')
- const [isExpanded, setIsExpanded] = useState(initiallyExpanded ?? false)
- useEffect(() => {
- import(`@/static-data/integrations/${integrationId}/overview.md`)
- .then((module) => setContent(String(module.default)))
- .catch((error) => console.error('Error loading markdown:', error))
- }, [integrationId])
- const displayContent = isExpanded ? content : content.slice(0, CHAR_LIMIT)
- const supportExpanding = content.length > CHAR_LIMIT || (content.match(/\n/g) || []).length > 1
- if (displayContent.length === 0) return null
- return (
- <div className="px-10">
- <div className="relative">
- <motion.div
- initial={false}
- animate={{ height: isExpanded ? 'auto' : 80 }}
- className="overflow-hidden"
- transition={{ duration: 0.4 }}
- >
- <Markdown content={displayContent} className="max-w-3xl!" />
- </motion.div>
- {!isExpanded && (
- <div
- className={cn(
- 'bottom-0 left-0 right-0 h-24',
- supportExpanding && 'bg-linear-to-t from-background-200 to-transparent',
- !isExpanded ? 'absolute' : 'relative'
- )}
- />
- )}
- {supportExpanding && (
- <div className={cn('bottom-0', !isExpanded ? 'absolute' : 'relative mt-3')}>
- <button
- className="text-foreground-light hover:text-foreground underline text-sm"
- onClick={() => setIsExpanded(!isExpanded)}
- >
- {isExpanded ? 'Show less' : 'Read more'}
- </button>
- </div>
- )}
- </div>
- </div>
- )
- }
|