diff --git a/.gitignore b/.gitignore
index 6c96c5cff124271309d717aa6a74c99fa3cdd455..d09ce83155cf7e9ccf70b1a5878f97730480fda2 100644
--- a/.gitignore
+++ b/.gitignore
@@ -13,3 +13,4 @@ build
.DS_Store
.env
npm-debug.log
+.idea
diff --git a/src/components/BuildingOverviewTop/index.js b/src/components/BuildingOverview/index.js
similarity index 100%
rename from src/components/BuildingOverviewTop/index.js
rename to src/components/BuildingOverview/index.js
diff --git a/src/components/BuildingOverviewTop/styles.css b/src/components/BuildingOverview/styles.css
similarity index 100%
rename from src/components/BuildingOverviewTop/styles.css
rename to src/components/BuildingOverview/styles.css
diff --git a/src/components/SideBarDetail/index.js b/src/components/SideBarDetail/index.js
index 3206e3cbb1bf896b87f33ad8cc5e7b415231de45..b3c1706c959c6d6d09cc9acc4f409a2b3e43a7e9 100644
--- a/src/components/SideBarDetail/index.js
+++ b/src/components/SideBarDetail/index.js
@@ -1,12 +1,25 @@
import React, { PropTypes } from 'react';
import { Link } from 'react-router';
import './styles.css';
+import buildingDetailPropType from '../../containers/Building/propTypes';
-export default function SideBarDetail({ buildingId }) {
- const rootURL = `/buildings/${buildingId}`;
+export default function SideBarDetail({ building, children }) {
+ const rootURL = `/buildings/${building.building_id}`;
return (
- Building ID: {buildingId}
+
+
+ {building.address}
+
+
{building.zipcode}
+
+ - BBL: {building.bbl}
+ - Building ID: {building.building_id}
+ - Lot ID: {building.lot_id}
+ - Borough: {building.borough}
+
+
+ { children }
Overview
@@ -18,5 +31,6 @@ export default function SideBarDetail({ buildingId }) {
}
SideBarDetail.propTypes = {
- buildingId: PropTypes.string,
+ children: PropTypes.element,
+ building: buildingDetailPropType,
};
diff --git a/src/components/Utilities/index.js b/src/components/Utilities/index.js
index 4969a8e566bf0688c7e468fa9a6c66e1538f44ce..e2e895e446527f8b8ac75952460c2ca499b14a73 100644
--- a/src/components/Utilities/index.js
+++ b/src/components/Utilities/index.js
@@ -1,12 +1,9 @@
import React, { Component, PropTypes } from 'react';
-import { bindActionCreators } from 'redux';
-import { connect } from 'react-redux';
-import buildingDetailPropTypes from '../../containers/BuildingOverview/buildingDetailPropType';
+import buildingDetailPropTypes from '../../containers/Building/propTypes';
import request from '../../utils/request';
import { getHeaders, utilityURL } from '../../utils/rest_services';
-import { loadBuildingDetail } from '../../containers/BuildingOverview/actions';
import UtilityAccount from '../UtilityAccount';
class Utilities extends Component {
@@ -21,23 +18,8 @@ class Utilities extends Component {
}
componentDidMount() {
- const { address, building_id } = this.props.buildingDetail.overview;
-
- // TODO remove getting adress, should be done in backend
- /* eslint-disable camelcase */
- if (!address || this.props.buildingId !== building_id) {
- this.props.loadBuildingDetail(this.props.buildingId);
- } else if (address && this.props.buildingId === building_id) {
- this.getUtilityAccounts(address);
- }
- }
-
- componentDidUpdate(prevProps) {
- const { address, building_id } = this.props.buildingDetail.overview;
- const prevAddress = prevProps.buildingDetail.overview.address;
- if (parseInt(this.props.buildingId, 10) === building_id && prevAddress !== address) {
- this.getUtilityAccounts(address);
- }
+ const { address } = this.props.building;
+ this.getUtilityAccounts(address);
}
getUtilityAccounts = (address) => {
@@ -76,7 +58,7 @@ class Utilities extends Component {
body: JSON.stringify({
...form,
building_id: this.props.buildingId,
- building_address: this.props.buildingDetail.overview.address,
+ building_address: this.props.building.address,
}),
}).then((res) => {
if (res.err) {
@@ -96,7 +78,7 @@ class Utilities extends Component {
body: JSON.stringify({
...form,
building_id: parseInt(this.props.buildingId, 10),
- building_address: this.props.buildingDetail.overview.address,
+ building_address: this.props.building.address,
}),
}).then((res) => {
if (res.err) {
@@ -185,16 +167,7 @@ class Utilities extends Component {
Utilities.propTypes = {
buildingId: PropTypes.string,
- buildingDetail: buildingDetailPropTypes,
- loadBuildingDetail: PropTypes.func,
+ building: buildingDetailPropTypes,
};
-function mapDispatchToProps(dispatch) {
- return bindActionCreators({ loadBuildingDetail }, dispatch);
-}
-
-function mapStateToProps({ buildingDetail }) {
- return { buildingDetail };
-}
-
-export default connect(mapStateToProps, mapDispatchToProps)(Utilities);
+export default Utilities;
diff --git a/src/containers/BuildingOverview/actions.js b/src/containers/Building/actions.js
similarity index 100%
rename from src/containers/BuildingOverview/actions.js
rename to src/containers/Building/actions.js
diff --git a/src/containers/BuildingOverview/constants.js b/src/containers/Building/constants.js
similarity index 100%
rename from src/containers/BuildingOverview/constants.js
rename to src/containers/Building/constants.js
diff --git a/src/containers/Building/index.js b/src/containers/Building/index.js
new file mode 100644
index 0000000000000000000000000000000000000000..43d300ae15a2263c3b28b4b544853dbcf2d31e10
--- /dev/null
+++ b/src/containers/Building/index.js
@@ -0,0 +1,63 @@
+import React, { Component, PropTypes } from 'react';
+import { connect } from 'react-redux';
+import { bindActionCreators } from 'redux';
+import buildingDetailPropTypes from './propTypes';
+
+import { loadBuildingDetail } from './actions';
+
+import './styles.css';
+import SideBarDetail from '../../components/SideBarDetail';
+
+
+class BuildingOverview extends Component {
+ componentDidMount() {
+ this.props.loadBuildingDetail(this.props.buildingId);
+ }
+
+ render() {
+ const { error, loading, address } = this.props.buildingDetail.overview;
+ let mainContent =
;
+ if (this.props.children && !error && !loading && address !== undefined) {
+ mainContent = React.cloneElement(this.props.children, {
+ buildingId: this.props.buildingId,
+ building: this.props.buildingDetail.overview,
+ });
+ }
+
+ return (
+
+
+
+
+
+
+ {`There was a error retrieving the building | ${error.message}`}
+
+ { mainContent }
+
+
+ );
+ }
+}
+
+BuildingOverview.propTypes = {
+ children: PropTypes.element,
+ buildingDetail: buildingDetailPropTypes,
+ buildingId: PropTypes.string,
+ loadBuildingDetail: PropTypes.func,
+};
+
+function mapDispatchToProps(dispatch) {
+ return bindActionCreators({
+ loadBuildingDetail,
+ }, dispatch);
+}
+
+function mapStateToProps({ buildingDetail }) {
+ return { buildingDetail };
+}
+
+export default connect(mapStateToProps, mapDispatchToProps)(BuildingOverview);
diff --git a/src/containers/BuildingOverview/buildingDetailPropType.js b/src/containers/Building/propTypes.js
similarity index 100%
rename from src/containers/BuildingOverview/buildingDetailPropType.js
rename to src/containers/Building/propTypes.js
diff --git a/src/containers/BuildingOverview/reducer.js b/src/containers/Building/reducer.js
similarity index 100%
rename from src/containers/BuildingOverview/reducer.js
rename to src/containers/Building/reducer.js
diff --git a/src/containers/BuildingOverview/sagas.js b/src/containers/Building/sagas.js
similarity index 100%
rename from src/containers/BuildingOverview/sagas.js
rename to src/containers/Building/sagas.js
diff --git a/src/containers/BuildingOverview/styles.css b/src/containers/Building/styles.css
similarity index 100%
rename from src/containers/BuildingOverview/styles.css
rename to src/containers/Building/styles.css
diff --git a/src/containers/BuildingOverview/index.js b/src/containers/BuildingOverview/index.js
deleted file mode 100644
index 56666f902cf217d311e3159e43c349d694ba8c63..0000000000000000000000000000000000000000
--- a/src/containers/BuildingOverview/index.js
+++ /dev/null
@@ -1,58 +0,0 @@
-import React, { Component, PropTypes } from 'react';
-import { connect } from 'react-redux';
-import { bindActionCreators } from 'redux';
-import buildingDetailPropTypes from './buildingDetailPropType';
-
-import { loadBuildingDetail } from './actions';
-
-import './styles.css';
-import BuildingOverviewTop from '../../components/BuildingOverviewTop';
-
-
-class BuildingOverview extends Component {
- componentDidMount() {
- this.props.loadBuildingDetail(this.props.params.buildingID);
- }
-
- render() {
- let mainContent =
;
-
- if (this.props.buildingDetail.overview.error) {
- mainContent = (
-
- {this.props.buildingDetail.overview.error.message}
-
- );
- } else {
- mainContent = (
-
- );
- }
-
- return (
-
- {mainContent}
-
- );
- }
-}
-
-BuildingOverview.propTypes = {
- buildingDetail: buildingDetailPropTypes,
- params: PropTypes.objectOf(PropTypes.string),
- loadBuildingDetail: PropTypes.func,
-};
-
-function mapDispatchToProps(dispatch) {
- return bindActionCreators({
- loadBuildingDetail,
- }, dispatch);
-}
-
-function mapStateToProps({ buildingDetail }) {
- return { buildingDetail };
-}
-
-export default connect(mapStateToProps, mapDispatchToProps)(BuildingOverview);
diff --git a/src/containers/Dimensions/index.js b/src/containers/Dimensions/index.js
index 7ca16d493ffcf603c8b25ace8c665534286c1b89..137e56ebef6766f08f654d92caa02e9ba108e3a1 100644
--- a/src/containers/Dimensions/index.js
+++ b/src/containers/Dimensions/index.js
@@ -8,11 +8,7 @@ import {
hitDecision,
} from './actions';
-import {
- loadBuildingDetail,
-} from '../BuildingOverview/actions';
-
-import buildingDetailPropTypes from '../BuildingOverview/buildingDetailPropType';
+import buildingDetailPropTypes from '../Building/propTypes';
import turkHitPropTypes from './propTypes';
import './styles.css';
@@ -21,13 +17,7 @@ import TurkHit from '../../components/TurkHit';
class Dimensions extends Component {
componentDidMount() {
- /* eslint-disable camelcase */
- const { address, building_id } = this.props.buildingDetail.overview;
-
this.props.loadHit(this.props.buildingId);
- if (!address || this.props.buildingId !== building_id) {
- this.props.loadBuildingDetail(this.props.buildingId);
- }
}
createHitConfirmation = (form) => {
@@ -62,7 +52,6 @@ Dimensions.propTypes = {
loadHit: PropTypes.func,
createHit: PropTypes.func,
hitDecision: PropTypes.func,
- loadBuildingDetail: PropTypes.func,
};
function mapDispatchToProps(dispatch) {
@@ -70,7 +59,6 @@ function mapDispatchToProps(dispatch) {
loadHit,
createHit,
hitDecision,
- loadBuildingDetail,
}, dispatch);
}
diff --git a/src/reducers.js b/src/reducers.js
index 6870601e215350285ac1fffc1c76a57a40dedfab..bf22b798707bf26ff0fe8a971879d17a5c4eb729 100644
--- a/src/reducers.js
+++ b/src/reducers.js
@@ -2,14 +2,14 @@ import { combineReducers } from 'redux';
import { routerReducer } from 'react-router-redux';
import SearchBarReducer from './containers/SearchBar/reducer';
-import BuildingOverviewReducer from './containers/BuildingOverview/reducer';
+import BuildingReducer from './containers/Building/reducer';
import GoogleLoginReducer from './containers/GoogleLogin/reducer';
import DimensionsReducer from './containers/Dimensions/reducer';
export default combineReducers({
routing: routerReducer,
buildingList: SearchBarReducer,
- buildingDetail: BuildingOverviewReducer,
+ buildingDetail: BuildingReducer,
googleLogin: GoogleLoginReducer,
dimensions: DimensionsReducer,
});
diff --git a/src/routes.js b/src/routes.js
index e6a4400298c16d755876d0d6391d703e06078c9f..4211ce3fed569331714c79b38e7e33e6e5f2903f 100644
--- a/src/routes.js
+++ b/src/routes.js
@@ -6,8 +6,8 @@ import { requireAuth, redirectIfLoggedIn } from './utils/auth';
import Login from './screens/Login';
import NotFound from './screens/NotFound';
import HomePage from './screens/HomePage';
-import BuildingDetail from './screens/BuildingDetail';
-import BuildingOverview from './containers/BuildingOverview';
+import DetailPage from './screens/DetailPage';
+import BuildingOverview from './components/BuildingOverview';
import Dimensions from './containers/Dimensions';
import Utilities from './components/Utilities';
@@ -17,7 +17,7 @@ export default (
-
+
diff --git a/src/sagas.js b/src/sagas.js
index 1d1af9dc85fcac78fecee30ee66d645ac770ec81..bd7d214ac1d3888e08e6c226689228c9b2af0e66 100644
--- a/src/sagas.js
+++ b/src/sagas.js
@@ -1,10 +1,10 @@
import buildingsSearchSaga from './containers/SearchBar/sagas';
-import buildingOverviewSaga from './containers/BuildingOverview/sagas';
+import buildingSaga from './containers/Building/sagas';
import dimensionsSaga from './containers/Dimensions/sagas';
export default function* rootSaga() {
yield [
- buildingOverviewSaga(),
+ buildingSaga(),
dimensionsSaga(),
buildingsSearchSaga(),
];
diff --git a/src/screens/BuildingDetail/index.js b/src/screens/BuildingDetail/index.js
deleted file mode 100644
index 85cfdc0daef6938caade0bc24aa1dc0eb9a67516..0000000000000000000000000000000000000000
--- a/src/screens/BuildingDetail/index.js
+++ /dev/null
@@ -1,28 +0,0 @@
-import React, { PropTypes } from 'react';
-import SideBarDetail from '../../components/SideBarDetail';
-
-import NavBar from '../../components/NavBar';
-
-
-export default function BuildingDetail(props) {
- return (
-
-
-
-
-
-
- {props.children && React.cloneElement(props.children, {
- buildingId: props.params.buildingID,
- })}
-
-
- );
-}
-
-BuildingDetail.propTypes = {
- children: PropTypes.element,
- params: PropTypes.shape({
- buildingID: PropTypes.string,
- }),
-};
diff --git a/src/screens/DetailPage/index.js b/src/screens/DetailPage/index.js
new file mode 100644
index 0000000000000000000000000000000000000000..721e57fd64176b0baa595034d2c0ed63ba02bcd2
--- /dev/null
+++ b/src/screens/DetailPage/index.js
@@ -0,0 +1,22 @@
+import React, { PropTypes } from 'react';
+import NavBar from '../../components/NavBar';
+import Building from '../../containers/Building';
+
+
+export default function BuildingDetail(props) {
+ return (
+
+
+
+ { props.children }
+
+
+ );
+}
+
+BuildingDetail.propTypes = {
+ children: PropTypes.element,
+ params: PropTypes.shape({
+ buildingId: PropTypes.string,
+ }),
+};
diff --git a/src/screens/BuildingDetail/styles.css b/src/screens/DetailPage/styles.css
similarity index 100%
rename from src/screens/BuildingDetail/styles.css
rename to src/screens/DetailPage/styles.css