diff --git a/src/components/content/carousels/templates/CourseTemplate.js b/src/components/content/carousels/templates/CourseTemplate.js index 5902231..a6b0f30 100644 --- a/src/components/content/carousels/templates/CourseTemplate.js +++ b/src/components/content/carousels/templates/CourseTemplate.js @@ -19,7 +19,6 @@ const CourseTemplate = (course) => { const fetchZaps = async () => { try { const zaps = await fetchZapsForEvent(course.id); - console.log('zaps:', zaps); setZaps(zaps); } catch (error) { console.error('Error fetching zaps:', error); diff --git a/src/components/content/carousels/templates/ResourceTemplate.js b/src/components/content/carousels/templates/ResourceTemplate.js index 1bfa763..93d765e 100644 --- a/src/components/content/carousels/templates/ResourceTemplate.js +++ b/src/components/content/carousels/templates/ResourceTemplate.js @@ -1,39 +1,78 @@ -import React from "react"; +import React, { useEffect, useState } from "react"; import Image from "next/image"; import { useRouter } from "next/router"; import useResponsiveImageDimensions from "@/hooks/useResponsiveImageDimensions"; import { formatTimestampToHowLongAgo } from "@/utils/time"; import { useImageProxy } from "@/hooks/useImageProxy"; +import { useNostr } from "@/hooks/useNostr"; +import { getSatAmountFromInvoice } from "@/utils/lightning"; const ResourceTemplate = (resource) => { + const [zaps, setZaps] = useState([]); + const [zapAmount, setZapAmount] = useState(null); const router = useRouter(); const { returnImageProxy } = useImageProxy(); const { width, height } = useResponsiveImageDimensions(); + + const { fetchZapsForEvent } = useNostr(); + + useEffect(() => { + const fetchZaps = async () => { + try { + const zaps = await fetchZapsForEvent(resource.id); + setZaps(zaps); + } catch (error) { + console.error('Error fetching zaps:', error); + } + }; + fetchZaps(); + }, [fetchZapsForEvent, resource]); + + useEffect(() => { + if (zaps.length > 0) { + zaps.map((zap) => { + const bolt11Tag = zap.tags.find(tag => tag[0] === 'bolt11'); + const invoice = bolt11Tag ? bolt11Tag[1] : null; + + if (invoice) { + const amount = getSatAmountFromInvoice(invoice); + setZapAmount(zapAmount + amount); + } + }) + } + }, [zaps]); + return ( -
router.push(`/details/${resource.id}`)} className="flex flex-col items-center mx-auto px-4 cursor-pointer mt-8 rounded-md shadow-lg"> -
+
router.push(`/details/${resource.id}`)} className="flex flex-col items-center mx-auto px-4 cursor-pointer mt-8 rounded-md"> +
resource thumbnail -
+

{resource.title}

-

- {resource.summary} -

-

Published: {formatTimestampToHowLongAgo(resource.published_at)}

+
+

+ {resource.summary} +

+
+
+

Published: {formatTimestampToHowLongAgo(resource.published_at)}

+

{zapAmount}

+
diff --git a/src/components/content/carousels/templates/WorkshopTemplate.js b/src/components/content/carousels/templates/WorkshopTemplate.js index b7df7d3..89704ce 100644 --- a/src/components/content/carousels/templates/WorkshopTemplate.js +++ b/src/components/content/carousels/templates/WorkshopTemplate.js @@ -1,14 +1,47 @@ -import React from "react"; +import React, {useEffect, useState} from "react"; import Image from "next/image"; import { useRouter } from "next/router"; import useResponsiveImageDimensions from "@/hooks/useResponsiveImageDimensions"; import { formatTimestampToHowLongAgo } from "@/utils/time"; import { useImageProxy } from "@/hooks/useImageProxy"; +import { useNostr } from "@/hooks/useNostr"; +import {getSatAmountFromInvoice} from "@/utils/lightning"; const WorkshopTemplate = (workshop) => { + const [zaps, setZaps] = useState([]); + const [zapAmount, setZapAmount] = useState(null); const router = useRouter(); const { returnImageProxy } = useImageProxy(); const { width, height } = useResponsiveImageDimensions(); + + const { fetchZapsForEvent } = useNostr(); + + useEffect(() => { + const fetchZaps = async () => { + try { + const zaps = await fetchZapsForEvent(workshop.id); + setZaps(zaps); + } catch (error) { + console.error('Error fetching zaps:', error); + } + }; + fetchZaps(); + }, [fetchZapsForEvent, workshop]); + + useEffect(() => { + if (zaps.length > 0) { + zaps.map((zap) => { + const bolt11Tag = zap.tags.find(tag => tag[0] === 'bolt11'); + const invoice = bolt11Tag ? bolt11Tag[1] : null; + + if (invoice) { + const amount = getSatAmountFromInvoice(invoice); + setZapAmount(zapAmount + amount); + } + }) + } + }, [zaps]); + return (
router.push(`/details/${workshop.id}`)} className="flex flex-col items-center mx-auto px-4 cursor-pointer mt-8 rounded-md shadow-lg">
@@ -33,7 +66,10 @@ const WorkshopTemplate = (workshop) => { }}> {workshop.summary}

-

Published: {formatTimestampToHowLongAgo(workshop.published_at)}

+
+

Published: {formatTimestampToHowLongAgo(workshop.published_at)}

+

{zapAmount}

+