grafana/public/app/core/components/ToggleButtonGroup/ToggleButtonGroup.tsx

64 lines
1.5 KiB
TypeScript
Raw Normal View History

import React, { FC, ReactNode, PureComponent } from 'react';
2019-01-08 13:51:00 -06:00
import { Tooltip } from '@grafana/ui';
interface ToggleButtonGroupProps {
label?: string;
children: JSX.Element[];
transparent?: boolean;
}
export default class ToggleButtonGroup extends PureComponent<ToggleButtonGroupProps> {
render() {
const { children, label, transparent } = this.props;
return (
<div className="gf-form">
{label && <label className={`gf-form-label ${transparent ? 'gf-form-label--transparent' : ''}`}>{label}</label>}
<div className={`toggle-button-group ${transparent ? 'toggle-button-group--transparent' : ''}`}>{children}</div>
</div>
);
}
}
interface ToggleButtonProps {
2019-05-13 02:38:19 -05:00
onChange?: (value: any) => void;
selected?: boolean;
value: any;
className?: string;
children: ReactNode;
2018-12-11 03:00:29 -06:00
tooltip?: string;
}
export const ToggleButton: FC<ToggleButtonProps> = ({
children,
selected,
className = '',
2018-12-11 03:00:29 -06:00
value = null,
tooltip,
onChange,
}) => {
2019-05-13 02:38:19 -05:00
const onClick = (event: React.SyntheticEvent) => {
event.stopPropagation();
if (!selected && onChange) {
onChange(value);
}
};
const btnClassName = `btn ${className} ${selected ? 'active' : ''}`;
2018-12-11 03:00:29 -06:00
const button = (
2019-03-11 11:03:10 -05:00
<button className={btnClassName} onClick={onClick}>
<span>{children}</span>
</button>
);
2018-12-11 03:00:29 -06:00
if (tooltip) {
return (
<Tooltip content={tooltip} placement="bottom">
{button}
</Tooltip>
);
2018-12-11 03:00:29 -06:00
} else {
return button;
}
};