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 { useDiscordQuery } from '@/hooks/communityQueries/useDiscordQuery'; import { useQuery } from '@tanstack/react-query'; import axios from 'axios'; import { useRouter } from 'next/router'; import { useCommunityNotes } from '@/hooks/nostr/useCommunityNotes'; import { useNDKContext } from '@/context/NDKContext'; import { findKind0Fields } from '@/utils/nostr'; import NostrIcon from '../../../public/nostr.png'; import Image from 'next/image'; import { useImageProxy } from '@/hooks/useImageProxy'; import { nip19 } from 'nostr-tools'; const StackerNewsIconComponent = () => ( ); const fetchStackerNews = async () => { const response = await axios.get('/api/stackernews'); return response.data.data.items.items; }; const GlobalFeed = () => { const router = useRouter(); const { data: discordData, error: discordError, isLoading: discordLoading } = useDiscordQuery({page: router.query.page}); const { data: stackerNewsData, error: stackerNewsError, isLoading: stackerNewsLoading } = useQuery({queryKey: ['stackerNews'], queryFn: fetchStackerNews}); const { communityNotes: nostrData, error: nostrError, isLoading: nostrLoading } = useCommunityNotes(); const { ndk } = useNDKContext(); const { returnImageProxy } = useImageProxy(); const [authorData, setAuthorData] = useState({}); useEffect(() => { const fetchAuthors = async () => { const authorDataMap = {}; for (const message of nostrData) { const author = await fetchAuthor(message.pubkey); authorDataMap[message.pubkey] = author; } setAuthorData(authorDataMap); }; if (nostrData && nostrData.length > 0) { fetchAuthors(); } }, [nostrData]); const fetchAuthor = async (pubkey) => { // ... (keep the existing fetchAuthor function) } if (discordLoading || stackerNewsLoading || nostrLoading) { return (
{item.type === 'discord' ? item.author : item.type === 'stackernews' ? item.user.name : authorData[item.pubkey]?.username || item.pubkey.substring(0, 12) + '...'}
{item.content}
) : ( <>Comments: {item.comments.length} | Sats: {item.sats}
> )}