From e3cced22c6d771dfea56e6fe69d4650e35ef9129 Mon Sep 17 00:00:00 2001 From: austinkelsay Date: Tue, 27 Aug 2024 20:58:19 -0500 Subject: [PATCH] all content page, filtering and rendering content all works, just need search now --- .../content/carousels/GenericCarousel.js | 35 +++++-- src/pages/content.js | 98 +++++++++++++------ src/utils/nostr.js | 10 +- 3 files changed, 102 insertions(+), 41 deletions(-) diff --git a/src/components/content/carousels/GenericCarousel.js b/src/components/content/carousels/GenericCarousel.js index dae5f18..7de5303 100644 --- a/src/components/content/carousels/GenericCarousel.js +++ b/src/components/content/carousels/GenericCarousel.js @@ -1,6 +1,8 @@ import React, { useState, useEffect } from 'react'; import { Carousel } from 'primereact/carousel'; import ResourceTemplate from '@/components/content/carousels/templates/ResourceTemplate'; +import CourseTemplate from '@/components/content/carousels/templates/CourseTemplate'; +import WorkshopTemplate from '@/components/content/carousels/templates/WorkshopTemplate'; import TemplateSkeleton from '@/components/content/carousels/skeletons/TemplateSkeleton'; const responsiveOptions = [ @@ -18,7 +20,7 @@ const responsiveOptions = [ } ]; -export default function GenericCarousel({items}) { +export default function GenericCarousel({items, selectedTopic}) { const [carousels, setCarousels] = useState([]); useEffect(() => { @@ -33,9 +35,16 @@ export default function GenericCarousel({items}) { itemsPerCarousel = 1; } + const filteredItems = selectedTopic === 'All' + ? items + : items.filter(item => + item.topics && + (item.topics.includes(selectedTopic) || item.type === selectedTopic.toLowerCase()) + ); + const newCarousels = []; - for (let i = 0; i < items.length; i += itemsPerCarousel) { - newCarousels.push(items.slice(i, i + itemsPerCarousel)); + for (let i = 0; i < filteredItems.length; i += itemsPerCarousel) { + newCarousels.push(filteredItems.slice(i, i + itemsPerCarousel)); } setCarousels(newCarousels); }; @@ -46,19 +55,25 @@ export default function GenericCarousel({items}) { return () => { window.removeEventListener('resize', handleResize); }; - }, [items]); - + }, [items, selectedTopic]); return ( <> {carousels.map((carouselItems, index) => ( - carouselItems.length > 0 ? - : - - } + itemTemplate={(item) => { + if (carouselItems.length > 0) { + if (item.type === 'resource') { + return ; + } else if (item.type === 'workshop') { + return ; + } else if (item.type === 'course') { + return ; + } + } + return ; + }} responsiveOptions={responsiveOptions} className="mb-4" pt={{ diff --git a/src/pages/content.js b/src/pages/content.js index 1ae054b..6f292f7 100644 --- a/src/pages/content.js +++ b/src/pages/content.js @@ -7,23 +7,47 @@ import { useCourses } from '@/hooks/nostr/useCourses'; import { TabMenu } from 'primereact/tabmenu'; import 'primeicons/primeicons.css'; import { InputText } from 'primereact/inputtext'; +import { Button } from 'primereact/button'; -const MenuTab = ({ items, activeIndex, onTabChange }) => { - const menuItems = items.map((item, index) => ({ - label: item, - icon: 'pi pi-tag', - command: () => onTabChange(index) - })); +const MenuTab = ({ items, selectedTopic, onTabChange }) => { + const allItems = ['All', ...items]; + + const menuItems = allItems.map((item, index) => { + let icon = 'pi pi-tag'; + if (item === 'All') icon = 'pi pi-eye'; + else if (item === 'resource') icon = 'pi pi-file'; + else if (item === 'workshop') icon = 'pi pi-video'; + else if (item === 'course') icon = 'pi pi-desktop'; + + return { + label: ( +