import { useState } from "react"; interface GiftSelectorProps { value: number; onChange: (cents: number) => void; id?: string; disabled?: boolean; } const PRESET_AMOUNTS = [ { label: "€5", cents: 500 }, { label: "€10", cents: 1000 }, { label: "€25", cents: 2500 }, { label: "€50", cents: 5000 }, ]; export function GiftSelector({ value, onChange, id, disabled, }: GiftSelectorProps) { const [customInput, setCustomInput] = useState(""); const [isCustom, setIsCustom] = useState(false); // Check if current value matches a preset const isPresetSelected = PRESET_AMOUNTS.some((p) => p.cents === value); const showCustomInput = isCustom || (!isPresetSelected && value > 0); const handlePresetClick = (cents: number) => { onChange(cents); setIsCustom(false); setCustomInput(""); }; const handleCustomInputChange = (e: React.ChangeEvent) => { const input = e.target.value.replace(/[^0-9,]/g, ""); setCustomInput(input); // Parse euros to cents if (input) { const normalized = input.replace(",", "."); const euros = Number.parseFloat(normalized); if (!Number.isNaN(euros) && euros >= 0) { onChange(Math.round(euros * 100)); } } else { onChange(0); } }; const handleCustomClick = () => { setIsCustom(true); if (value > 0 && !isPresetSelected) { // Keep existing custom value setCustomInput((value / 100).toFixed(2).replace(".", ",")); } else { setCustomInput(""); onChange(0); } }; const handleSkip = () => { onChange(0); setIsCustom(false); setCustomInput(""); }; // When disabled, show read-only view if (disabled) { return (

Deelname is gratis, maar een vrijwillige gift wordt zeer gewaardeerd.

{value > 0 ? (

€{(value / 100).toFixed(2).replace(".", ",")}

Gift is verwerkt en kan niet meer worden aangepast

) : (

Geen gift toegevoegd

)}
); } return (

Deelname is gratis, maar een vrijwillige gift wordt zeer gewaardeerd.

{/* Preset amounts */}
{PRESET_AMOUNTS.map((preset) => ( ))}
{/* Custom amount input */} {showCustomInput && (
)} {/* Skip option */} {value > 0 && ( )} {/* Selected amount display */} {value > 0 && (

Geselecteerd:{" "} €{(value / 100).toFixed(2).replace(".", ",")}

)}
); }