index.tsx 1.3 KB
import { FormItem, Radio } from '@formily/antd-v5';
import { Field } from '@formily/react';
import cx from 'classnames';
import './index.less';
import { FieldProps } from '../../typings';

/**
 * An interface that defines an option in the RadioGroup component.
 */
interface Option {
  value: string | number;
  label: string;
  disabled?: boolean;
}

/**
 * An interface that defines the properties of the RadioGroup component.
 */
export interface RadioGroupProps extends FieldProps {
  options: Option[];
}

/**
 * The RadioGroup component.
 *
 * This is a wrapper around the Radio.Group component that makes it easier to use in a Formily form.
 */
const RadioGroup: React.FC<RadioGroupProps> = (props) => {
  const { name, title, options = [], validator = [], decoratorProps, componentProps } = props;

  return (
    <div className={cx('global_radio')}>
      <Field
        {...props}
        name={name}
        title={title}
        dataSource={options}
        decorator={[
          FormItem,
          {
            ...decoratorProps,
          },
        ]}
        component={[
          Radio.Group,
          {
            ...componentProps,
            componenttypename: 'Radio.Group',
          },
        ]}
        validator={validator}
      />
    </div>
  );
};

export default RadioGroup;