import React, { useState, useEffect } from "react"; import { useRouter } from "next/router"; import { Button } from "primereact/button"; import MenuTab from "@/components/menutab/MenuTab"; import { useLocalStorageWithEffect } from "@/hooks/useLocalStorage"; import { useCoursesQuery } from "@/hooks/nostrQueries/content/useCoursesQuery"; import { useResourcesQuery } from "@/hooks/nostrQueries/content/useResourcesQuery"; import { useWorkshopsQuery } from "@/hooks/nostrQueries/content/useWorkshopsQuery"; import { useDraftsQuery } from "@/hooks/apiQueries/useDraftsQuery"; import { useContentIdsQuery } from "@/hooks/apiQueries/useContentIdsQuery"; import { useToast } from "@/hooks/useToast"; import ContentList from "@/components/content/lists/ContentList"; import { parseEvent } from "@/utils/nostr"; import { useNDKContext } from "@/context/NDKContext"; const AUTHOR_PUBKEY = process.env.NEXT_PUBLIC_AUTHOR_PUBKEY; const UserContent = () => { const [activeIndex, setActiveIndex] = useState(0); const [isClient, setIsClient] = useState(false); const [content, setContent] = useState([]); const [publishedContent, setPublishedContent] = useState([]); const [user] = useLocalStorageWithEffect("user", {}); const router = useRouter(); const { showToast } = useToast(); const ndk = useNDKContext(); const { courses, coursesLoading, coursesError } = useCoursesQuery(); const { resources, resourcesLoading, resourcesError } = useResourcesQuery(); const { workshops, workshopsLoading, workshopsError } = useWorkshopsQuery(); const { drafts, draftsLoading, draftsError } = useDraftsQuery(); const { contentIds, contentIdsLoading, contentIdsError, refetchContentIds } = useContentIdsQuery(); useEffect(() => { setIsClient(true); }, []); const contentItems = [ { label: "Published", icon: "pi pi-verified" }, { label: "Drafts", icon: "pi pi-file-edit" }, { label: "Resources", icon: "pi pi-book" }, { label: "Workshops", icon: "pi pi-video" }, { label: "Courses", icon: "pi pi-desktop" }, ]; useEffect(() => { const fetchAllContentFromNDK = async (ids) => { try { await ndk.connect(); const filter = { "#d": ids, authors: [AUTHOR_PUBKEY] }; const uniqueEvents = new Set(); const events = await ndk.fetchEvents(filter); events.forEach(event => { uniqueEvents.add(event); }); console.log('uniqueEvents', uniqueEvents) return Array.from(uniqueEvents); } catch (error) { console.error('Error fetching workshops from NDK:', error); return []; } }; const fetchContent = async () => { if (contentIds && isClient) { const content = await fetchAllContentFromNDK(contentIds); setPublishedContent(content); } } fetchContent(); }, [contentIds, isClient, ndk]); useEffect(() => { if (isClient) { const getContentByIndex = (index) => { switch (index) { case 0: return publishedContent.map(parseEvent) || []; case 1: return drafts || []; case 2: return resources?.map(parseEvent) || []; case 3: return workshops?.map(parseEvent) || []; case 4: return courses?.map(parseEvent) || []; default: return []; } }; setContent(getContentByIndex(activeIndex)); } }, [activeIndex, isClient, drafts, resources, workshops, courses, publishedContent]) const isLoading = coursesLoading || resourcesLoading || workshopsLoading || draftsLoading || contentIdsLoading; const isError = coursesError || resourcesError || workshopsError || draftsError || contentIdsError; return (
Loading...
) : isError ? (Error loading content.
) : content.length > 0 ? (No content available.
)}