import React, { useState, useEffect } from 'react'; import { Card } from 'primereact/card'; import { Avatar } from 'primereact/avatar'; import { Tag } from 'primereact/tag'; import { Button } from 'primereact/button'; import { ProgressSpinner } from 'primereact/progressspinner'; import { useNDKContext } from '@/context/NDKContext'; import { useSession } from 'next-auth/react'; import { findKind0Fields } from '@/utils/nostr'; import NostrIcon from '../../../public/images/nostr.png'; import Image from 'next/image'; import { useImageProxy } from '@/hooks/useImageProxy'; import { nip19 } from 'nostr-tools'; import { useCommunityNotes } from '@/hooks/nostr/useCommunityNotes'; import { highlightText } from '@/utils/text'; import ZapThreadsWrapper from '@/components/ZapThreadsWrapper'; const NostrFeed = ({ searchQuery }) => { const { communityNotes, isLoading, error } = useCommunityNotes(); const { ndk } = useNDKContext(); const { returnImageProxy } = useImageProxy(); const { data: session } = useSession(); const [authorData, setAuthorData] = useState({}); const [npub, setNpub] = useState(null); useEffect(() => { const fetchAuthors = async () => { const authorDataMap = {}; for (const message of communityNotes) { if (!authorDataMap[message.pubkey]) { const author = await fetchAuthor(message.pubkey); authorDataMap[message.pubkey] = author; } } setAuthorData(authorDataMap); }; if (communityNotes && communityNotes.length > 0) { fetchAuthors(); } }, [communityNotes]); useEffect(() => { if (session?.user?.pubkey) { setNpub(nip19.npubEncode(session.user.pubkey)); } }, [session]); const fetchAuthor = async (pubkey) => { try { const filter = { kinds: [0], authors: [pubkey] }; const author = await ndk.fetchEvent(filter); if (author) { try { const fields = await findKind0Fields(JSON.parse(author.content)); return fields; } catch (error) { console.error('Error fetching author:', error); } } return null; } catch (error) { console.error('Error fetching author:', error); } }; const getAvatarImage = (message) => { return authorData[message.pubkey]?.avatar ? returnImageProxy(authorData[message.pubkey]?.avatar) : null; }; const renderHeader = (message) => (
{authorData[message.pubkey]?.username || message.pubkey.substring(0, 12) + '...'}
{highlightText(message.content, searchQuery)}