import { ArrowLeft as ArrowLeftIcon, ArrowRight as ArrowRightIcon, } from "lucide-react"; import React, { forwardRef, useImperativeHandle, useRef, useState, } from "react"; import { useNavigate } from "react-router-dom"; import "../../assets/styles/listRow.css"; import ListItem, { ListItemProps } from "./ListItem"; interface ListRowProps { variant?: "default" | "search"; type: "stream" | "category" | "user"; title?: string; description?: string; items: ListItemProps[]; wrap?: boolean; onItemClick: (itemName: string) => void; titleClickable?: boolean; extraClasses?: string; itemExtraClasses?: string; amountForScroll?: number; children?: React.ReactNode; } const ListRow = forwardRef< { addMoreItems: (newItems: ListItemProps[]) => void }, ListRowProps >( ( { variant = "default", type, title = "", description = "", items, onItemClick, titleClickable = false, wrap = false, extraClasses = "", itemExtraClasses = "", amountForScroll = 4, children, }, ref ) => { const [currentItems, setCurrentItems] = useState(items); const slider = useRef(null); const scrollAmount = window.innerWidth * 0.3; const navigate = useNavigate(); const addMoreItems = (newItems: ListItemProps[]) => { setCurrentItems((prevItems) => [...prevItems, ...newItems]); }; useImperativeHandle(ref, () => ({ addMoreItems, })); const slideRight = () => { if (!wrap && slider.current) { slider.current.scrollBy({ left: +scrollAmount, behavior: "smooth" }); } }; const slideLeft = () => { if (!wrap && slider.current) { slider.current.scrollBy({ left: -scrollAmount, behavior: "smooth" }); } }; const handleTitleClick = (type: string) => { switch (type) { case "stream": break; case "category": navigate("/categories"); break; case "user": break; default: break; } }; return (
{/* List Details */}

handleTitleClick(type) : undefined} > {title}

{description}

{/* List Items */}
{!wrap && currentItems.length > amountForScroll && ( <> )}
{currentItems.length === 0 ? (

Nothing Found

) : ( <> {currentItems.map((item) => ( (item.type === "stream" || item.type === "user") && item.username ? onItemClick?.(item.username) : onItemClick?.(item.title) } extraClasses={`${itemExtraClasses}`} /> ))} )}
{children}
); } ); export default ListRow;