import React, { useEffect, useState } from "react"; import axios from "axios"; import { useToast } from "@/hooks/useToast"; import { Tag } from "primereact/tag"; import Image from "next/image"; import { useRouter } from "next/router"; import ResourcePaymentButton from "@/components/bitcoinConnect/ResourcePaymentButton"; import ZapDisplay from "@/components/zaps/ZapDisplay"; import GenericButton from "@/components/buttons/GenericButton"; import { useImageProxy } from "@/hooks/useImageProxy"; import { useZapsSubscription } from "@/hooks/nostrQueries/zaps/useZapsSubscription"; import { getTotalFromZaps } from "@/utils/lightning"; import { useSession } from "next-auth/react"; import useWindowWidth from "@/hooks/useWindowWidth"; import dynamic from "next/dynamic"; const MDDisplay = dynamic( () => import("@uiw/react-markdown-preview"), { ssr: false, } ); const lnAddress = process.env.NEXT_PUBLIC_LIGHTNING_ADDRESS; const DocumentDetails = ({ processedEvent, topics, title, summary, image, price, author, paidResource, decryptedContent, handlePaymentSuccess, handlePaymentError, authorView }) => { const [zapAmount, setZapAmount] = useState(0); const router = useRouter(); const { returnImageProxy } = useImageProxy(); const { zaps, zapsLoading, zapsError } = useZapsSubscription({ event: processedEvent }); const { data: session, status } = useSession(); const { showToast } = useToast(); const windowWidth = useWindowWidth(); useEffect(() => { if (zaps.length > 0) { const total = getTotalFromZaps(zaps, processedEvent); setZapAmount(total); } }, [zaps, processedEvent]); const handleDelete = async () => { try { const response = await axios.delete(`/api/resources/${processedEvent.d}`); if (response.status === 204) { showToast('success', 'Success', 'Resource deleted successfully.'); router.push('/'); } } catch (error) { if (error.response && error.response.data && error.response.data.error.includes("Invalid `prisma.resource.delete()`")) { showToast('error', 'Error', 'Resource cannot be deleted because it is part of a course, delete the course first.'); } else if (error.response && error.response.data && error.response.data.error) { showToast('error', 'Error', error.response.data.error); } else { showToast('error', 'Error', 'Failed to delete resource. Please try again.'); } } } const renderPaymentMessage = () => { if (session?.user && session.user?.role?.subscribed && decryptedContent) { return } if (paidResource && decryptedContent && author && processedEvent?.pubkey !== session?.user?.pubkey && !session?.user?.role?.subscribed) { return } if (paidResource && author && processedEvent?.pubkey === session?.user?.pubkey) { return } return null; }; const renderContent = () => { if (decryptedContent) { return ; } if (paidResource && !decryptedContent) { return (

This content is paid and needs to be purchased before viewing.

); } if (processedEvent?.content) { return ; } return null; } return (
background image

{title}

{topics && topics.length > 0 && ( topics.map((topic, index) => ( )) )}

{summary}

{renderContent()}
{renderPaymentMessage()} {authorView && (
router.push(`/details/${processedEvent.id}/edit`)} label="Edit" severity='warning' outlined />
)}
) } export default DocumentDetails;