import React, { PropsWithChildren, useState } from "react"; import classNames from "@lib/classNames"; type RadioAreaProps = React.InputHTMLAttributes & { onChange: (value: string) => void; defaultChecked: boolean; }; const RadioArea = (props: RadioAreaProps) => { return ( ); }; type RadioAreaGroupProps = { name?: string; onChange?: (value) => void; }; const RadioAreaGroup = ({ children, name, onChange, ...passThroughProps }: PropsWithChildren) => { const [checkedIdx, setCheckedIdx] = useState(null); const changeHandler = (value: string, idx: number) => { if (onChange) { onChange(value); } setCheckedIdx(idx); }; return (
{(Array.isArray(children) ? children : [children]).map( (child: React.ReactElement, idx: number) => { if (checkedIdx === null && child.props.defaultChecked) { setCheckedIdx(idx); } return ( changeHandler(value, idx)}> {child.props.children} ); } )}
); }; const Item = RadioArea; const Group = RadioAreaGroup; export { RadioArea, RadioAreaGroup, Item, Group };