/v1.0

RadioField

RadioField envuelve el componente Radio dentro de un FieldContainer. Renderiza una lista de opciones y llama a onChange con el valor de la opción seleccionada. Una función renderOption personalizada puede reemplazar completamente la apariencia predeterminada del radio button.

Props

| Prop | Tipo | Requerido | Por defecto | Descripción | |------|------|-----------|-------------|-------------| | options | any[] | Sí | — | Array de objetos de opción. Cada objeto debe tener al menos las claves value y label. | | value | string | Sí | — | Valor de la opción seleccionada actualmente. | | onChange | (optionName: string) => void | Sí | — | Llamado con el valor de la opción seleccionada cuando el usuario elige una diferente. | | label | string | No | — | Etiqueta mostrada en el encabezado del campo. | | description | string | No | — | Texto de ayuda mostrado debajo del campo. | | useCustomRender | boolean | No | false | Cuando es true, renderOption se pasa al componente Radio para reemplazar el layout predeterminado. | | renderOption | (option: any, isClickable?: boolean, index?: number, isActive?: boolean) => React.ReactNode | No | — | Función de renderizado personalizada para cada opción (solo se usa cuando useCustomRender es true). | | containerStyle | React.CSSProperties | No | — | Estilos del FieldContainer exterior. | | headerStyle | React.CSSProperties | No | — | Estilos del área de encabezado del campo. | | bodyStyle | React.CSSProperties | No | — | Estilos del cuerpo de opciones (pasado como containerStyle a Radio). | | labelStyle | React.CSSProperties | No | — | Estilos del elemento de etiqueta. | | descriptionStyle | React.CSSProperties | No | — | Estilos del párrafo de descripción. | | className | string | No | — | Clase CSS del contenedor exterior. |

Uso

Básico

import React, { useState } from 'react';
import RadioField from '@/components/fields/RadioField';

const options = [
  { label: 'Interno', value: 'internal' },
  { label: 'Externo', value: 'external' },
];

export default function Example() {
  const [userType, setUserType] = useState('internal');

  return (
    <RadioField
      label="Tipo de usuario"
      options={options}
      value={userType}
      onChange={setUserType}
    />
  );
}

Con renderizado personalizado de opciones

<RadioField
  label="Prioridad"
  options={[
    { label: 'Baja', value: 'low', color: '#4CC2B6' },
    { label: 'Media', value: 'medium', color: '#FFD567' },
    { label: 'Alta', value: 'high', color: '#F59A8E' },
  ]}
  value={priority}
  onChange={setPriority}
  useCustomRender={true}
  renderOption={(option, _clickable, _index, isActive) => (
    <div style={{
      padding: '8px 16px',
      borderRadius: 8,
      backgroundColor: isActive ? option.color : '#f0f0f0',
      fontWeight: isActive ? 'bold' : 'normal',
    }}>
      {option.label}
    </div>
  )}
/>