import { Avatar, AvatarFallback, AvatarImage } from '@/components/ui/avatar'; import { Badge } from '@/components/ui/badge'; import { Separator } from '@/components/ui/separator'; import { SharedData } from '@/types/global'; import { Renderer } from 'richtor'; import 'richtor/styles'; interface Props extends SharedData { blog: Blog; } const Preview = ({ blog }: Props) => { const createdAt = new Date(blog.created_at).toLocaleDateString(); const authorInitials = blog.user?.name ? blog.user.name .split(' ') .map((n) => n.charAt(0)) .join('') .toUpperCase() : 'AU'; const bannerSrc = blog.banner || '/assets/images/blank-image.jpg'; const thumbnailSrc = blog.thumbnail || '/assets/images/blank-image.jpg'; const keywords = (blog.keywords || '') .split(',') .map((k) => k.trim()) .filter(Boolean); return (
{/* Banner */}
Blog banner
{/* Title and meta */}
{blog.category?.name && {blog.category.name}} {keywords.slice(0, 3).map((k) => ( {k} ))}

{blog.title}

{authorInitials} {blog.user?.name}
{createdAt}
{/* Content */}
Blog thumbnail
{/* Keywords */} {keywords.length > 0 && (
{keywords.map((k) => ( #{k} ))}
)}
); }; export default Preview;