lineContainerComponent.tsx 1.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859
  1. import * as React from "react";
  2. import { FontAwesomeIcon } from '@fortawesome/react-fontawesome';
  3. import { faChevronDown } from '@fortawesome/free-solid-svg-icons';
  4. interface ILineContainerComponentProps {
  5. title: string,
  6. children: any[] | any,
  7. closed?: boolean
  8. }
  9. export class LineContainerComponent extends React.Component<ILineContainerComponentProps, { isExpanded: boolean }> {
  10. constructor(props: ILineContainerComponentProps) {
  11. super(props);
  12. this.state = { isExpanded: !this.props.closed };
  13. }
  14. switchExpandedState(): void {
  15. this.setState({ isExpanded: !this.state.isExpanded });
  16. }
  17. renderHeader() {
  18. const className = this.state.isExpanded ? "collapse" : "collapse closed";
  19. return (
  20. <div className="header">
  21. <div className="title">
  22. {this.props.title}
  23. </div>
  24. <div className={className} onClick={() => this.switchExpandedState()}>
  25. <FontAwesomeIcon icon={faChevronDown} />
  26. </div>
  27. </div>
  28. )
  29. }
  30. render() {
  31. if (!this.state.isExpanded) {
  32. return (
  33. <div className="paneContainer">
  34. {
  35. this.renderHeader()
  36. }
  37. </div>
  38. )
  39. }
  40. return (
  41. <div className="paneContainer">
  42. {
  43. this.renderHeader()
  44. }
  45. <div>
  46. {this.props.children}
  47. </div >
  48. </div>
  49. );
  50. }
  51. }