@shopify/polaris
Version:
Shopify’s product component library
35 lines (34 loc) • 1.71 kB
JavaScript
import React from 'react';
import { useUniqueId } from '../../utilities/unique-id';
import { useFeatures } from '../../utilities/features';
import { classNames } from '../../utilities/css';
import { Choice, helpTextID } from '../Choice';
import styles from './RadioButton.scss';
export function RadioButton({ ariaDescribedBy: ariaDescribedByProp, label, labelHidden, helpText, checked, disabled, onChange, onFocus, onBlur, id: idProp, name: nameProp, value, }) {
const id = useUniqueId('RadioButton', idProp);
const name = nameProp || id;
const { unstableGlobalTheming = false } = useFeatures();
function handleChange({ currentTarget }) {
onChange && onChange(currentTarget.checked, id);
}
const describedBy = [];
if (helpText) {
describedBy.push(helpTextID(id));
}
if (ariaDescribedByProp) {
describedBy.push(ariaDescribedByProp);
}
const ariaDescribedBy = describedBy.length
? describedBy.join(' ')
: undefined;
const inputClassName = classNames(styles.Input);
const backdropClassName = classNames(styles.Backdrop);
const wrapperClassName = classNames(styles.RadioButton, unstableGlobalTheming && styles.globalTheming);
return (<Choice label={label} labelHidden={labelHidden} disabled={disabled} id={id} helpText={helpText}>
<span className={wrapperClassName}>
<input id={id} name={name} value={value} type="radio" checked={checked} disabled={disabled} className={inputClassName} onChange={handleChange} onFocus={onFocus} onBlur={onBlur} aria-describedby={ariaDescribedBy}/>
<span className={backdropClassName}/>
<span className={styles.Icon}/>
</span>
</Choice>);
}