18F/cg-dashboard

View on GitHub
static_src/components/main_container.jsx

Summary

Maintainability
A
0 mins
Test Coverage
import React from "react";
import PropTypes from "prop-types";
import userProvider from "./user_provider.jsx";
import Disclaimer from "./header/disclaimer";
import Footer from "./footer.jsx";
import GlobalErrorContainer from "./global_error_container.jsx";
import Header from "./header";
import LoginStore from "../stores/login_store.js";
import OrgStore from "../stores/org_store.js";
import SpaceStore from "../stores/space_store.js";

const propTypes = {
  children: PropTypes.any
};

function stateSetter() {
  return {
    currentOrgGuid: OrgStore.currentOrgGuid,
    currentSpaceGuid: SpaceStore.currentSpaceGuid,
    isLoggedIn: LoginStore.isLoggedIn()
  };
}

class App extends React.Component {
  constructor(props) {
    super(props);

    this.state = stateSetter();
    this.handleChange = this.handleChange.bind(this);
  }

  componentDidMount() {
    LoginStore.addChangeListener(this.handleChange);
  }

  componentWillUnmount() {
    LoginStore.removeChangeListener(this.handleChange);
  }

  handleChange() {
    this.setState(stateSetter());
  }

  render() {
    return (
      <div>
        <Disclaimer />
        <Header />
        <div className="main_content content-no_sidebar">
          <GlobalErrorContainer />
          <main className="usa-content">
            <div className="content grid">{this.props.children}</div>
          </main>
        </div>
        <Footer />
      </div>
    );
  }
}

App.propTypes = propTypes;

App.defaultProps = {
  children: []
};

export default userProvider(App);