TelegramPWA/src/components/ui/RadioGroup.tsx

58 lines
1.3 KiB
TypeScript

import type { ChangeEvent } from 'react';
import type { FC, TeactNode } from '../../lib/teact/teact';
import React, { useCallback, memo } from '../../lib/teact/teact';
import Radio from './Radio';
export type IRadioOption = {
label: TeactNode;
subLabel?: string;
value: string;
hidden?: boolean;
};
type OwnProps = {
id?: string;
name: string;
options: IRadioOption[];
selected?: string;
disabled?: boolean;
loadingOption?: string;
onChange: (value: string, event: ChangeEvent<HTMLInputElement>) => void;
};
const RadioGroup: FC<OwnProps> = ({
id,
name,
options,
selected,
disabled,
loadingOption,
onChange,
}) => {
const handleChange = useCallback((event: ChangeEvent<HTMLInputElement>) => {
const { value } = event.currentTarget;
onChange(value, event);
}, [onChange]);
return (
<div id={id} className="radio-group">
{options.map((option) => (
<Radio
name={name}
label={option.label}
subLabel={option.subLabel}
value={option.value}
checked={option.value === selected}
hidden={option.hidden}
disabled={disabled}
isLoading={loadingOption ? loadingOption === option.value : undefined}
onChange={handleChange}
/>
))}
</div>
);
};
export default memo(RadioGroup);