pashto-inflector/src/components/ButtonSelect.tsx

50 lines
1.6 KiB
TypeScript
Raw Normal View History

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;