index.tsx 1.3 KB
import React from 'react';
import { Button, Space, ButtonProps } from 'antd';
import type { SpaceProps } from 'antd';
export interface ButtonRadioProps extends SpaceProps {
  className?: string;
  prefixCls?: string;
  buttonProps?: ButtonProps;
  onChange?: (value: any) => void;
  value?: any;
  [props: string]: any;
}

const ButtonRadio: React.FC<ButtonRadioProps> = (props) => {
  const { options = [], buttonProps = {}, value, onChange } = props;

  return (
    <Space {...props}>
      {options.map(
        (
          option: {
            value: any;
            label:
              | string
              | number
              | boolean
              | React.ReactElement<any, string | React.JSXElementConstructor<any>>
              | React.ReactFragment
              | React.ReactPortal
              | null
              | undefined;
          },
          i: React.Key | null | undefined,
        ) => {
          const type = option.value === value ? 'primary' : 'default';
          return (
            <Button
              key={i}
              {...buttonProps}
              type={type}
              onClick={() => {
                onChange && onChange(option.value);
              }}
            >
              {option.label}
            </Button>
          );
        },
      )}
    </Space>
  );
};

export default ButtonRadio;