2021-03-09 12:39:13 +00:00
|
|
|
/**
|
|
|
|
* Copyright (c) 2021 lingdocs.com
|
|
|
|
*
|
|
|
|
* This source code is licensed under the MIT license found in the
|
|
|
|
* LICENSE file in the root directory of this source tree.
|
|
|
|
*
|
|
|
|
*/
|
|
|
|
|
|
|
|
import classNames from "classnames";
|
|
|
|
|
2021-11-03 21:57:13 +00:00
|
|
|
type PickerProps<T extends string> = {
|
|
|
|
options: { label: any, value: T, color?: string }[],
|
|
|
|
value: T,
|
|
|
|
handleChange: (payload: T) => void,
|
2021-03-09 12:39:13 +00:00
|
|
|
small?: boolean,
|
|
|
|
xSmall?: boolean,
|
|
|
|
}
|
|
|
|
|
2021-11-03 21:57:13 +00:00
|
|
|
function ButtonSelect<L extends string>(props: PickerProps<L>) {
|
2021-03-09 12:39:13 +00:00
|
|
|
return (
|
|
|
|
<div className="d-inline-flex flex-row justify-content-center">
|
|
|
|
<div className="btn-group">
|
|
|
|
{props.options.map((option) => (
|
|
|
|
<button
|
|
|
|
key={option.value}
|
|
|
|
type="button"
|
|
|
|
className={classNames(
|
|
|
|
"btn",
|
|
|
|
"btn-outline-secondary",
|
|
|
|
{ active: props.value === option.value },
|
|
|
|
{ "btn-sm": props.small || props.xSmall }
|
|
|
|
)}
|
|
|
|
onClick={() => props.handleChange(option.value)}
|
2021-11-03 22:04:42 +00:00
|
|
|
style={{
|
|
|
|
...props.xSmall ?
|
|
|
|
{ fontSize: "small" }: {},
|
2021-11-03 22:18:38 +00:00
|
|
|
...(option.color && (props.value === option.value)) ?
|
2021-11-03 22:13:30 +00:00
|
|
|
{ backgroundColor: option.color } : {},
|
2021-11-03 22:04:42 +00:00
|
|
|
}}
|
2021-03-09 12:39:13 +00:00
|
|
|
>
|
|
|
|
{option.label}
|
|
|
|
</button>
|
|
|
|
))}
|
|
|
|
</div>
|
|
|
|
</div>
|
|
|
|
);
|
|
|
|
}
|
|
|
|
|
|
|
|
export default ButtonSelect;
|