ToggleButtonGroup.tsx 1.2 KB

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