import React, { useEffect, useState } from "react"; import { useRouter } from "next/router"; import { useNostr } from "@/hooks/useNostr"; import { parseCourseEvent, parseEvent, findKind0Fields } from "@/utils/nostr"; import { useImageProxy } from "@/hooks/useImageProxy"; import { Button } from "primereact/button"; import { Tag } from "primereact/tag"; import Image from "next/image"; import CourseDetails from "@/components/CourseDetails"; import { nip19 } from "nostr-tools"; import dynamic from 'next/dynamic'; const MDDisplay = dynamic( () => import("@uiw/react-markdown-preview"), { ssr: false, } ); const BitcoinConnectPayButton = dynamic( () => import('@getalby/bitcoin-connect-react').then((mod) => mod.PayButton), { ssr: false, } ); const Course = () => { const [course, setCourse] = useState(null); const [lessonIds, setLessonIds] = useState([]); const [lessons, setLessons] = useState([]); const [bitcoinConnect, setBitcoinConnect] = useState(false); const router = useRouter(); const { fetchSingleEvent, fetchSingleNaddrEvent, fetchKind0 } = useNostr(); const { returnImageProxy } = useImageProxy(); const { slug } = router.query; const fetchAuthor = async (pubkey) => { const author = await fetchKind0(pubkey); const fields = await findKind0Fields(author); if (fields) { return fields; } } const handleZapEvent = async () => { if (!event) return; const response = await zapEvent(event); console.log('zap response:', response); } useEffect(() => { if (typeof window === 'undefined') return; const bitcoinConnectConfig = window.localStorage.getItem('bc:config'); if (bitcoinConnectConfig) { setBitcoinConnect(true); } }, []); useEffect(() => { const getCourse = async () => { if (slug) { const fetchedCourse = await fetchSingleEvent(slug); const formattedCourse = parseCourseEvent(fetchedCourse); const aTags = formattedCourse.tags.filter(tag => tag[0] === 'a'); setCourse(formattedCourse); if (aTags.length > 0) { const lessonIds = aTags.map(tag => tag[1]); setLessonIds(lessonIds); console.log("LESSON IDS", lessonIds); } } }; if (slug && !course) { getCourse(); } }, [slug]); useEffect(() => { if (lessonIds.length > 0) { const fetchLesson = async (lessonId) => { try { const l = await fetchSingleNaddrEvent(lessonId.split(':')[2]); const author = await fetchAuthor(l.pubkey); const parsedLesson = parseEvent(l); const lessonObj = { ...parsedLesson, author } setLessons(prev => [...prev, lessonObj]); } catch (error) { console.error('Error fetching lesson:', error); } } lessonIds.forEach(lessonId => fetchLesson(lessonId)); } }, [lessonIds]); useEffect(() => { console.log("AHHHHH", lessons); }, [lessons]) return ( <> {lessons.length > 0 && lessons.map((lesson, index) => (
{lesson && lesson.topics && lesson.topics.length > 0 && ( lesson.topics.map((topic, index) => ( )) ) }

{lesson?.title}

{lesson?.summary}

{lesson && (
resource thumbnail {bitcoinConnect ? (
) : (
)}
)}
{ lesson?.content && }
)) }
{ course?.content && }
); } export default Course;