2021-12-14 19:14:53 +00:00
|
|
|
import clsx from 'clsx';
|
|
|
|
|
|
|
|
import './BoxSelector.css';
|
|
|
|
import styles from './BoxSelector.module.css';
|
|
|
|
import { BoxSelectorItem } from './BoxSelectorItem';
|
|
|
|
import { BoxSelectorOption } from './types';
|
|
|
|
|
|
|
|
export interface Props<T extends number | string> {
|
|
|
|
radioName: string;
|
|
|
|
value: T;
|
|
|
|
onChange(value: T, limitedToBE: boolean): void;
|
|
|
|
options: BoxSelectorOption<T>[];
|
|
|
|
}
|
|
|
|
|
|
|
|
export function BoxSelector<T extends number | string>({
|
|
|
|
radioName,
|
|
|
|
value,
|
|
|
|
options,
|
|
|
|
onChange,
|
|
|
|
}: Props<T>) {
|
|
|
|
return (
|
2022-01-05 16:28:56 +00:00
|
|
|
<div className={clsx('boxselector_wrapper', styles.root)} role="radiogroup">
|
2022-07-01 05:22:40 +00:00
|
|
|
{options.map((option) =>
|
|
|
|
option.hide ? null : (
|
|
|
|
<BoxSelectorItem
|
|
|
|
key={option.id}
|
|
|
|
radioName={radioName}
|
|
|
|
option={option}
|
|
|
|
onChange={onChange}
|
|
|
|
selectedValue={value}
|
|
|
|
disabled={option.disabled && option.disabled()}
|
|
|
|
tooltip={option.tooltip && option.tooltip()}
|
|
|
|
/>
|
|
|
|
)
|
|
|
|
)}
|
2021-12-14 19:14:53 +00:00
|
|
|
</div>
|
|
|
|
);
|
|
|
|
}
|