import React from 'react'; import { ChevronRightIcon } from '@heroicons/react/24/outline'; import { rdsFontSizes } from '../../../utils/tailwindClasses'; import { Badge } from '../../Badge'; import { Link } from '../../Link/Link'; // Set types for as props type BaseItemTypeProps = 'li' | 'div'; type TitleTypeProps = 'h2' | 'h3'; export interface MarketplaceItemProps { children?: React.ReactNode; fontSize?: 'base' | 'lg' | 'xl'; title?: string; link?: string; image?: string; alt?: string; cost?: string; condition?: string; category?: string; } export interface ItemBaseProps { as?: keyof JSX.IntrinsicElements; } export interface BaseItemProps { as?: BaseItemTypeProps; } export interface TitleProps { as?: TitleTypeProps; } const MarketplaceItemBase = ({ as: Component = 'div', children, link, }: ItemBaseProps & MarketplaceItemProps) => { return (
{children}
); }; const Content = ({ children }: MarketplaceItemProps) => { return
{children}
; }; const Title = ({ as = 'h3', fontSize = 'base', title, }: TitleProps & MarketplaceItemProps) => { return React.createElement( as, { className: `text-sm font-semibold text-cu-black group-hover:text-cu-red ${rdsFontSizes[fontSize]}`, }, title ); }; const Image = ({ image, alt }: MarketplaceItemProps) => { return (
{alt}
); }; const Details = ({ cost, condition }: MarketplaceItemProps) => { return ( ); }; const Category = ({ category }: MarketplaceItemProps) => { return (
{category}
); }; // Set default for base component as props MarketplaceItemBase.defaultProps = { as: 'li', }; MarketplaceItemBase.displayName = 'MarketplaceItem'; Content.displayName = 'MarketplaceItem.Content'; Title.displayName = 'MarketplaceItem.Title'; Image.displayName = 'MarketplaceItem.Image'; Details.displayName = 'MarketplaceItem.Details'; Category.displayName = 'MarketplaceItem.Category'; export const MarketplaceItem = Object.assign(MarketplaceItemBase, { Content, Title, Image, Details, Category, });