| import { classNames } from '@/shared/lib/classNames/classNames'; | |
| import cls from './RadioButtons.module.scss'; | |
| export enum RadioButtonsTheme { | |
| PARAM = 'param', | |
| } | |
| export interface IRadioButtons { | |
| labelName: string; | |
| value: string | number; | |
| } | |
| interface RadioButtonsProps { | |
| className?: string; | |
| name: string; | |
| title?: string; | |
| data: IRadioButtons[]; | |
| theme?: string; | |
| currentValue?: string | number; | |
| onChange?: (value: string) => void; | |
| } | |
| export const RadioButtons = (props: RadioButtonsProps) => { | |
| const { className, name, title, data, theme = '', currentValue, onChange } = props; | |
| return ( | |
| <div className={classNames(cls.RadioButtons, {}, [className, cls[theme]])}> | |
| {title && <p className={cls.listTitle}>{title}</p>} | |
| <div className={cls.list}> | |
| {data.map((radioButton, index) => ( | |
| <div key={`${name + (index + 1)}`} className={cls.item}> | |
| <input | |
| id={`${name + (index + 1)}`} | |
| type="radio" | |
| name={name} | |
| value={radioButton.value} | |
| className={`${cls.input} visually-hidden`} | |
| checked={radioButton.value === currentValue} | |
| onChange={(e) => onChange?.(e.target.value)} | |
| /> | |
| <label className={cls.name} htmlFor={`${name + (index + 1)}`}> | |
| <span className={cls.window}> | |
| <span className={cls.circle} /> | |
| </span> | |
| <span className={cls.text}>{radioButton.labelName}</span> | |
| </label> | |
| </div> | |
| ))} | |
| </div> | |
| </div> | |
| ); | |
| }; | |