Panel.tsx 1.1 KB

12345678910111213141516171819202122232425262728293031323334
  1. import React, { PureComponent } from 'react';
  2. interface Props {
  3. isOpen: boolean;
  4. label: string;
  5. loading?: boolean;
  6. onToggle: (isOpen: boolean) => void;
  7. }
  8. export default class Panel extends PureComponent<Props> {
  9. onClickToggle = () => this.props.onToggle(!this.props.isOpen);
  10. render() {
  11. const { isOpen, loading } = this.props;
  12. const iconClass = isOpen ? 'fa fa-caret-up' : 'fa fa-caret-down';
  13. const loaderClass = loading ? 'explore-panel__loader explore-panel__loader--active' : 'explore-panel__loader';
  14. return (
  15. <div className="explore-panel panel-container">
  16. <div className="explore-panel__header" onClick={this.onClickToggle}>
  17. <div className="explore-panel__header-buttons">
  18. <span className={iconClass} />
  19. </div>
  20. <div className="explore-panel__header-label">{this.props.label}</div>
  21. </div>
  22. {isOpen && (
  23. <div className="explore-panel__body">
  24. <div className={loaderClass} />
  25. {this.props.children}
  26. </div>
  27. )}
  28. </div>
  29. );
  30. }
  31. }