@utahdts/utah-design-system
Version:
Utah Design System React Library
50 lines (48 loc) • 1.51 kB
JSX
import { joinClassNames } from '../../../util/joinClassNames';
import { ErrorMessage } from '../ErrorMessage';
import { RequiredStar } from '../RequiredStar';
import { RadioButtonGroupContextProvider } from './context/RadioButtonGroupContextProvider';
/**
* @param {object} props
* @param {import('react').ReactNode} props.children
* @param {string} [props.className]
* @param {string} [props.defaultValue] starting value if not controlled
* @param {string} [props.errorMessage]
* @param {string} props.id
* @param {boolean} [props.isRequired]
* @param {string} props.label
* @param {(newValue: string) => void} [props.onChange] respond to changes of current value if controlled
* @param {string} [props.value] value of the currently selected Radio Button if controlled
* @returns {import('react').JSX.Element}
*/
export function RadioButtonGroup({
children,
className,
defaultValue,
errorMessage,
id,
isRequired,
label,
onChange,
value,
}) {
return (
<>
<fieldset id={id} className={joinClassNames('fieldset fieldset--radio-wrapper', className)}>
<legend>
{label}
{isRequired ? <RequiredStar /> : null}
</legend>
<RadioButtonGroupContextProvider
defaultValue={defaultValue}
name={id}
onChange={onChange}
value={value}
>
{children}
</RadioButtonGroupContextProvider>
</fieldset>
<ErrorMessage errorMessage={errorMessage} id={id} />
</>
);
}