import React, { ReactNode, useState } from "react"; import classNames from "@lib/classNames"; type RadioAreaProps = Omit, "onChange"> & { onChange?: (value: string) => void; defaultChecked?: boolean; }; const RadioArea = (props: RadioAreaProps) => { return ( ); }; type ChildrenProps = { props: RadioAreaProps; children?: ReactNode; }; interface RadioAreaGroupProps extends Omit, "onChange" | "children"> { children: ChildrenProps | ChildrenProps[]; name?: string; onChange?: (value: string) => void; } const RadioAreaGroup = ({ children, name, onChange, ...passThroughProps }: RadioAreaGroupProps) => { 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, 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 };