import { useState, useId, FC } from "react"; type Props = { options: string[]; values: (string | number)[]; defaultValue?: string | number; onChange?: (param: any) => void; value: number | string; }; const VALUE_NOT_SET = ""; const VALUES_NOT_SET: string[] = []; const Radio: FC = ({ options, values = VALUES_NOT_SET, value = VALUE_NOT_SET, defaultValue = "", onChange = undefined }) => { const id = useId(); const [fallbackValue, setFallbackValue] = useState(defaultValue); const _value = value !== VALUE_NOT_SET ? value : fallbackValue; return (
{options.map((item, index) => (
{ const valueToSet = values === VALUES_NOT_SET ? index : values[index]; // Set fallback value if not in controlled mode if (value === VALUE_NOT_SET) { setFallbackValue(valueToSet); } // Invoke `onChange` handler if defined if (onChange) { onChange(valueToSet); } }} id={`${id}-${index}`} />
))}
); }; export default Radio;