import Decimal from "decimal.js"; import { InfoIcon } from "lucide-react"; import { useMemo, useState } from "react"; import { type RowHeight } from "@/src/components/table/data-table-row-height-switch"; import { Tooltip, TooltipContent, TooltipProvider, TooltipTrigger, } from "@/src/components/ui/tooltip"; import { usePriceUnitMultiplier } from "@/src/features/models/hooks/usePriceUnitMultiplier"; import { getMaxDecimals } from "@/src/features/models/utils"; import { type PriceUnit } from "@/src/features/models/validation"; export const PriceBreakdownTooltip = ({ modelName, prices, priceUnit, rowHeight, }: { modelName: string; prices?: Record; priceUnit: PriceUnit; rowHeight: RowHeight; }) => { const [isOpen, setIsOpen] = useState(false); const { priceUnitMultiplier } = usePriceUnitMultiplier(); const maxDecimals = useMemo( () => Math.max( ...Object.values(prices ?? {}).map((price) => { return getMaxDecimals(price, priceUnitMultiplier); }), ), [prices, priceUnitMultiplier], ); if (!prices) return null; return ( <> {Object.keys(prices).length === 0 ? (

No prices

) : Object.keys(prices).length <= (rowHeight === "m" ? 4 : 2) ? (
{Object.entries(prices).map(([type, price]) => ( {type} $ {new Decimal(price) .mul(priceUnitMultiplier) .toFixed(maxDecimals)} ))}
) : ( setIsOpen(!isOpen)} > {Object.keys(prices).length} prices set
Price breakdown {modelName}
Usage Type Price {priceUnit}
{Object.entries(prices).map(([usageType, price]) => (
{usageType} {"$" + new Decimal(price) .mul(priceUnitMultiplier) .toFixed(maxDecimals)}
))}
)} ); };