From 786fcf712d52f25e2dd9a0b866be04fde6dd1f5b Mon Sep 17 00:00:00 2001 From: austinkelsay Date: Sun, 11 Feb 2024 21:32:46 -0600 Subject: [PATCH] resource carousel improvements --- src/components/resources/ResourcesCarousel.js | 37 +++++++++++++------ src/hooks/useNostr.js | 5 +-- src/utils/time.js | 4 ++ 3 files changed, 30 insertions(+), 16 deletions(-) create mode 100644 src/utils/time.js diff --git a/src/components/resources/ResourcesCarousel.js b/src/components/resources/ResourcesCarousel.js index be0a9a8..b98b1cb 100644 --- a/src/components/resources/ResourcesCarousel.js +++ b/src/components/resources/ResourcesCarousel.js @@ -1,41 +1,54 @@ - import React, { useState, useEffect } from 'react'; import { Button } from 'primereact/button'; import { Carousel } from 'primereact/carousel'; -import { Tag } from 'primereact/tag'; +import Image from 'next/image'; import { useSelector } from 'react-redux'; +import { useImageProxy } from '@/hooks/useImageProxy'; import { parseResourceEvent } from '@/utils/nostr'; +import { formatUnixTimestamp } from '@/utils/time'; export default function ResourcesCarousel() { const resources = useSelector((state) => state.events.resources); + const [processedResources, setProcessedResources] = useState([]); + const { returnImageProxy } = useImageProxy(); - console.log('Resources:', resources); + useEffect(() => { + const processResources = resources.map(resource => { + const { content, title, summary, image, published_at } = parseResourceEvent(resource); + return { content, title, summary, image, published_at }; + }); + setProcessedResources(processResources); + }, [resources]); const resourceTemplate = (resource) => { - const { content, title, summary, image, published_at } = parseResourceEvent(resource); return (
- {title} + resource thumbnail
-

{title}

-

{summary}

+

{resource.title}

+

{resource.summary}

-

Published on {published_at}

+

Published: {formatUnixTimestamp(resource.published_at)}

); - }; + }; return ( <>

Resources

- + - ) + ); } - \ No newline at end of file diff --git a/src/hooks/useNostr.js b/src/hooks/useNostr.js index ef68e6d..3e4e8da 100644 --- a/src/hooks/useNostr.js +++ b/src/hooks/useNostr.js @@ -66,7 +66,6 @@ export const useNostr = () => { const filter = [{kinds: [30023], authors: ["f33c8a9617cb15f705fc70cd461cfd6eaf22f9e24c33eabad981648e5ec6f741"]}]; const params = {seenOnEnabled: true}; - const seenEventIds = new Set(); // Set to keep track of event IDs that have been processed const hasPlebdevsTag = (eventData) => { return eventData.some(([tag, value]) => tag === "t" && value === "plebdevs"); @@ -75,9 +74,7 @@ export const useNostr = () => { const sub = pool.current.subscribeMany(relays, filter, { ...params, onevent: (event) => { - // Assuming event has a unique identifier under `id` field - if (!seenEventIds.has(event.id) && hasPlebdevsTag(event.tags)) { - seenEventIds.add(event.id); // Add event ID to the set to track it's been processed + if (hasPlebdevsTag(event.tags)) { dispatch(addResource(event)); } }, diff --git a/src/utils/time.js b/src/utils/time.js new file mode 100644 index 0000000..addc14e --- /dev/null +++ b/src/utils/time.js @@ -0,0 +1,4 @@ +export const formatUnixTimestamp = (time) => { + const date = new Date(time * 1000); // Convert to milliseconds + return date.toDateString(); +}