OptionGroup.tsx 1.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253
  1. import React, { PureComponent } from 'react';
  2. import { GroupProps } from 'react-select/lib/components/Group';
  3. interface ExtendedGroupProps extends GroupProps<any> {
  4. data: any;
  5. }
  6. interface State {
  7. expanded: boolean;
  8. }
  9. export default class OptionGroup extends PureComponent<ExtendedGroupProps, State> {
  10. state = {
  11. expanded: false,
  12. };
  13. componentDidMount() {
  14. if (this.props.selectProps) {
  15. const value = this.props.selectProps.value[this.props.selectProps.value.length - 1];
  16. if (value && this.props.options.some(option => option.value === value)) {
  17. this.setState({ expanded: true });
  18. }
  19. }
  20. }
  21. componentDidUpdate(nextProps) {
  22. if (nextProps.selectProps.inputValue !== '') {
  23. this.setState({ expanded: true });
  24. }
  25. }
  26. onToggleChildren = () => {
  27. this.setState(prevState => ({
  28. expanded: !prevState.expanded,
  29. }));
  30. };
  31. render() {
  32. const { children, label } = this.props;
  33. const { expanded } = this.state;
  34. return (
  35. <div className="gf-form-select-box__option-group">
  36. <div className="gf-form-select-box__option-group__header" onClick={this.onToggleChildren}>
  37. <span className="flex-grow">{label}</span>
  38. <i className={`fa ${expanded ? 'fa-caret-left' : 'fa-caret-down'}`} />{' '}
  39. </div>
  40. {expanded && children}
  41. </div>
  42. );
  43. }
  44. }