ToggleButtonGroup.tsx 1.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859
  1. import React, { SFC, ReactNode, PureComponent } from 'react';
  2. import Tooltip from 'app/core/components/Tooltip/Tooltip';
  3. interface ToggleButtonGroupProps {
  4. label?: string;
  5. children: JSX.Element[];
  6. transparent?: boolean;
  7. }
  8. export default class ToggleButtonGroup extends PureComponent<ToggleButtonGroupProps> {
  9. render() {
  10. const { children, label, transparent } = this.props;
  11. return (
  12. <div className="gf-form">
  13. {label && <label className={`gf-form-label ${transparent ? 'gf-form-label--transparent' : ''}`}>{label}</label>}
  14. <div className={`toggle-button-group ${transparent ? 'toggle-button-group--transparent' : ''}`}>{children}</div>
  15. </div>
  16. );
  17. }
  18. }
  19. interface ToggleButtonProps {
  20. onChange?: (value) => void;
  21. selected?: boolean;
  22. value: any;
  23. className?: string;
  24. children: ReactNode;
  25. tooltip?: string;
  26. }
  27. export const ToggleButton: SFC<ToggleButtonProps> = ({
  28. children,
  29. selected,
  30. className = '',
  31. value = null,
  32. tooltip,
  33. onChange,
  34. }) => {
  35. const handleChange = event => {
  36. event.stopPropagation();
  37. if (onChange) {
  38. onChange(value);
  39. }
  40. };
  41. const btnClassName = `btn ${className} ${selected ? 'active' : ''}`;
  42. const button = (
  43. <button className={btnClassName} onClick={handleChange}>
  44. <span>{children}</span>
  45. </button>
  46. );
  47. if (tooltip) {
  48. return <Tooltip content={tooltip}>{button}</Tooltip>;
  49. } else {
  50. return button;
  51. }
  52. };