"use client"; import { Button } from "@/components/ui/button"; import { Input } from "@/components/ui/input"; import { Trash, PlusCircle } from "lucide-react"; interface PricingTiersProps { pricing: any[]; handleTierChange: ( e: React.ChangeEvent, index: number ) => void; handleRemoveTier: (index: number) => void; handleAddTier: () => void; } export const PricingTiers = ({ pricing, handleTierChange, handleRemoveTier, handleAddTier, }: PricingTiersProps) => { const formatNumber = (num: number) => { // Only format to 2 decimal places if the number has decimal places // This prevents cursor jumping when user types whole numbers return num % 1 === 0 ? num.toString() : num.toFixed(2); }; const formatTotal = (num: number) => { return num.toFixed(2); }; const calculateTotal = (quantity: number, pricePerUnit: number) => { return formatTotal(quantity * pricePerUnit); }; const handleTotalChange = ( e: React.ChangeEvent, index: number, minQuantity: number ) => { const totalPrice = Number(e.target.value); const pricePerUnit = minQuantity > 0 ? totalPrice / minQuantity : 0; const syntheticEvent = { target: { name: 'pricePerUnit', value: formatNumber(pricePerUnit) } } as React.ChangeEvent; handleTierChange(syntheticEvent, index); }; return (

Tiered Pricing

{pricing?.length > 0 ? ( <>
Quantity
Price Per Unit
Total Price
{[...pricing] .sort((a, b) => a.minQuantity - b.minQuantity) .map((tier, sortedIndex) => { // Find the original index for proper event handling const originalIndex = pricing.findIndex(p => p === tier || (p.minQuantity === tier.minQuantity && p.pricePerUnit === tier.pricePerUnit) ); return (
handleTierChange(e, originalIndex)} className="h-8 text-sm px-2" /> handleTierChange(e, originalIndex)} className="h-8 text-sm px-2" /> handleTotalChange(e, originalIndex, tier.minQuantity)} className="h-8 text-sm px-2" />
); })} ) : (

No pricing tiers added.

)}
); };