import React from 'react'; import { nip19 } from "nostr-tools"; import { Card, CardContent, CardFooter, CardHeader, CardTitle, } from "@/components/ui/card" import { Tooltip, TooltipContent, TooltipProvider, TooltipTrigger, } from "@/components/ui/tooltip" import { Carousel, CarouselContent, CarouselItem, CarouselNext, CarouselPrevious, } from "@/components/ui/carousel" import ReactionButton from '@/components/ReactionButton'; import { Avatar, AvatarImage } from '@/components/ui/avatar'; import ViewRawButton from '@/components/ViewRawButton'; import ViewNoteButton from './ViewNoteButton'; import Link from 'next/link'; import ViewCopyButton from './ViewCopyButton'; import { NDKEvent } from '@nostr-dev-kit/ndk'; import ZapButton from './ZapButton'; import { useProfile } from '@/hooks/useNDK'; interface NoteCardProps { pubkey: string; text: string; eventId: string; tags: string[][]; event: any; showViewNoteCardButton?: boolean; } const NoteCard: React.FC = ({ pubkey, text, eventId, tags, event, showViewNoteCardButton }) => { const { data: userData } = useProfile(pubkey); const title = userData?.displayName || userData?.name || userData?.nip05 || userData?.npub || nip19.npubEncode(pubkey); text = text.replaceAll('\n', ' '); const imageSrc = text.match(/https?:\/\/[^ ]*\.(png|jpg|gif|jpeg)/g); const videoSrc = text.match(/https?:\/\/[^ ]*\.(mp4|webm|mov)/g); const textWithoutImage = text.replace(/https?:\/\/.*\.(?:png|jpg|gif|mp4|webm|mov|jpeg)/g, ''); const createdAt = new Date(event.created_at * 1000); const hrefProfile = `/profile/${nip19.npubEncode(pubkey)}`; const profileImageSrc = userData?.image || "https://robohash.org/" + pubkey; const uploadedVia = tags.find((tag) => tag[0] === "client")?.[1]; return ( <>
{title}

{title}

{textWithoutImage &&

{textWithoutImage}

} {imageSrc && imageSrc.length > 0 && ( {imageSrc.map((image, index) => ( {`Image ))} )} {videoSrc && videoSrc.length > 0 && ( {videoSrc.map((video, index) => ( ))} )}

{showViewNoteCardButton && }
{createdAt.toLocaleString()} {uploadedVia && Uploaded via {uploadedVia}}
); } export default NoteCard;