import React, { useEffect, useState, useCallback } from 'react'; import { useRouter } from 'next/router'; import { useImageProxy } from '@/hooks/useImageProxy'; import ZapDisplay from '@/components/zaps/ZapDisplay'; import { getTotalFromZaps } from '@/utils/lightning'; import { Tag } from 'primereact/tag'; import { nip19, nip04 } from 'nostr-tools'; import { useSession } from 'next-auth/react'; import Image from 'next/image'; import dynamic from 'next/dynamic'; import ZapThreadsWrapper from '@/components/ZapThreadsWrapper'; import { useNDKContext } from "@/context/NDKContext"; import { useZapsSubscription } from '@/hooks/nostrQueries/zaps/useZapsSubscription'; import { findKind0Fields } from '@/utils/nostr'; import 'primeicons/primeicons.css'; import CoursePaymentButton from "@/components/bitcoinConnect/CoursePaymentButton"; import { ProgressSpinner } from 'primereact/progressspinner'; const MDDisplay = dynamic( () => import("@uiw/react-markdown-preview"), { ssr: false, } ); export default function CourseDetails({ processedEvent, paidCourse, lessons, decryptionPerformed, handlePaymentSuccess, handlePaymentError }) { const [author, setAuthor] = useState(null); const [nAddress, setNAddress] = useState(null); const [zapAmount, setZapAmount] = useState(0); const [user, setUser] = useState(null); const { zaps, zapsLoading, zapsError } = useZapsSubscription({ event: processedEvent }); const { returnImageProxy } = useImageProxy(); const { data: session, status } = useSession(); const router = useRouter(); const {ndk, addSigner} = useNDKContext(); useEffect(() => { console.log("processedEvent", processedEvent); }, [processedEvent]); useEffect(() => { console.log("zaps", zaps); }, [zaps]); useEffect(() => { console.log("paidCourse", paidCourse); }, [paidCourse]); useEffect(() => { console.log("decryptionPerformed", decryptionPerformed); }, [decryptionPerformed]); useEffect(() => { if (session) { setUser(session.user); } }, [session]); const fetchAuthor = useCallback(async (pubkey) => { if (!pubkey) return; const author = await ndk.getUser({ pubkey }); const profile = await author.fetchProfile(); const fields = await findKind0Fields(profile); if (fields) { setAuthor(fields); } }, [ndk]); useEffect(() => { if (processedEvent) { fetchAuthor(processedEvent.pubkey); } }, [fetchAuthor, processedEvent]); useEffect(() => { if (processedEvent?.d) { const naddr = nip19.naddrEncode({ pubkey: processedEvent.pubkey, kind: processedEvent.kind, identifier: processedEvent.d, }); setNAddress(naddr); } }, [processedEvent]); useEffect(() => { if (!zaps || zaps.length === 0) return; const total = getTotalFromZaps(zaps, processedEvent); setZapAmount(total); }, [zaps, processedEvent]); if (!processedEvent || !author) { return (
{processedEvent?.summary}
Created by{' '} {author?.username || author?.name || author?.pubkey}
Paid {processedEvent.price} sats
)} {paidCourse && author && processedEvent?.pubkey === session?.user?.pubkey && (Price {processedEvent.price} sats
)}