import { mergeOverrides, Block, useStyletron, BlockProps, Skeleton, LabelMedium, ParagraphSmall, } from "@mezo-org/mezo-clay" import React, { ReactNode } from "react" import SlotNumber from "./SlotNumber" import { formatUsd } from "../../utils/currency" type ListingItemLayoutProps = Omit & { icon: ReactNode label: ReactNode value: ReactNode subLabel: ReactNode subValue: ReactNode } function ListingItemLayout(props: ListingItemLayoutProps) { const { icon, label, value, subLabel, subValue, overrides, ...restProps } = props const [, theme] = useStyletron() return ( {icon && icon} {label && label} {subLabel && subLabel} {value && value} {subValue && subValue} ) } type ListingItemProps = { icon?: ReactNode label?: string subLabel?: string value?: number | string valueFormatter?: (value: number | string) => string subValue?: number | string subValueFormatter?: (value: number | string) => string overrides?: BlockProps["overrides"] isLoading?: boolean } const defaultValueFormatter = (value: number | string): string => { if (typeof value === "string") return value return formatUsd(value) } export default function ListingItem(props: ListingItemProps) { const { icon, label, subLabel, value, valueFormatter = defaultValueFormatter, subValue, subValueFormatter = defaultValueFormatter, overrides, isLoading = false, } = props const [, theme] = useStyletron() if (isLoading) { return ( } label={ } subLabel={ } value={ } subValue={ } overrides={overrides} /> ) } return ( {label}} subLabel={ {subLabel} } value={ value !== undefined && ( {typeof value === "number" ? ( {value} ) : ( valueFormatter(value) )} ) } subValue={ subValue !== undefined && ( {typeof subValue === "number" ? ( {subValue} ) : ( subValueFormatter(subValue) )} ) } overrides={overrides} /> ) }