-
-
-
- {`There was a error retrieving the building | ${error.message}`}
-
+
+
+
{ mainContent }
@@ -49,9 +50,11 @@ class Building extends Component {
Building.propTypes = {
children: PropTypes.element,
- buildingDetail: buildingDetailPropTypes,
buildingId: PropTypes.string,
+ overview: completeOverviewPropTypes,
loadBuildingDetail: PropTypes.func,
+ projects: completeProjectPropTypes,
+ loadProjects: PropTypes.func,
documents: documentsPropType,
loadDocuments: PropTypes.func,
uploadDocument: PropTypes.func,
@@ -60,13 +63,19 @@ Building.propTypes = {
function mapDispatchToProps(dispatch) {
return bindActionCreators({
loadBuildingDetail,
+ loadProjects,
loadDocuments,
uploadDocument,
}, dispatch);
}
function mapStateToProps({ buildingDetail, documents }) {
- return { buildingDetail, documents };
+ const { overview, projects } = buildingDetail;
+ return {
+ overview,
+ projects,
+ documents,
+ };
}
export default connect(mapStateToProps, mapDispatchToProps)(Building);
diff --git a/src/containers/Building/propTypes.js b/src/containers/Building/propTypes.js
index 98e5b02bb340b77bfa4446082bfcfd91c51c2314..1ccfa3fd472510455cf2a3213d9785cad3685158 100644
--- a/src/containers/Building/propTypes.js
+++ b/src/containers/Building/propTypes.js
@@ -1,21 +1,49 @@
import { PropTypes } from 'react';
+const { string, number, bool, shape, arrayOf, oneOfType } = PropTypes;
+
+export const loadErrorPropTypes = {
+ loading: bool,
+ error: oneOfType([
+ bool,
+ string,
+ ]),
+};
+
+export const overviewPropTypes = {
+ address: string,
+ bbl: number,
+ bin_id: number,
+ building_id: number,
+ lot_id: number,
+ borough: string,
+ zipcode: number,
+};
+
+export const projectPropTypes = {
+ building_id: string,
+ client_id: number,
+ created: string,
+ id: number,
+ name: string,
+ program_type: string,
+ sales_force_id: string,
+ slug: string,
+ state: string,
+ updated: string,
+};
+
+export const completeOverviewPropTypes = shape({
+ ...overviewPropTypes,
+ ...loadErrorPropTypes,
+});
+
+export const completeProjectPropTypes = shape({
+ list: arrayOf(shape(projectPropTypes)),
+ ...loadErrorPropTypes,
+});
+
export default PropTypes.shape({
- overview: PropTypes.shape({
- address: PropTypes.string,
- bbl: PropTypes.number,
- bin_id: PropTypes.number,
- building_id: PropTypes.number,
- lot_id: PropTypes.number,
- borough: PropTypes.string,
- zipcode: PropTypes.number,
- loading: PropTypes.boolean,
- error: PropTypes.boolean,
- }),
- hit: PropTypes.shape({
- id: PropTypes.string,
- status: PropTypes.string,
- loading: PropTypes.boolean,
- error: PropTypes.boolean,
- }),
+ completeOverviewPropTypes,
+ completeProjectPropTypes,
});
diff --git a/src/containers/Building/reducer.js b/src/containers/Building/reducer.js
index 3b9ef359a1225266fa0ce1ff42f036baa880f6ca..b9c73ebe071fabbb6a5cfddb8297da91b5f1f555 100644
--- a/src/containers/Building/reducer.js
+++ b/src/containers/Building/reducer.js
@@ -2,6 +2,9 @@ import {
LOAD_BUILDING_DETAIL,
LOAD_BUILDING_DETAIL_SUCCEES,
LOAD_BUILDING_DETAIL_ERROR,
+ LOAD_PROJECTS,
+ LOAD_PROJECTS_SUCCESS,
+ LOAD_PROJECTS_ERROR,
} from './constants';
const initState = {
@@ -9,6 +12,11 @@ const initState = {
loading: false,
error: false,
},
+ projects: {
+ projects: [],
+ loading: false,
+ error: false,
+ },
};
export default function (state = initState, action) {
@@ -43,6 +51,34 @@ export default function (state = initState, action) {
},
};
+ case LOAD_PROJECTS:
+ return {
+ ...state,
+ projects: {
+ loading: true,
+ error: false,
+ },
+ };
+
+ case LOAD_PROJECTS_SUCCESS:
+ return {
+ ...state,
+ projects: {
+ list: action.payload,
+ loading: false,
+ error: false,
+ },
+ };
+
+ case LOAD_PROJECTS_ERROR:
+ return {
+ ...state,
+ projects: {
+ loading: false,
+ error: false,
+ },
+ };
+
default:
return state;
}
diff --git a/src/containers/Building/sagas.js b/src/containers/Building/sagas.js
index edab0fc02fa8c9d4169659616fe16511f5c29f6b..5e5852a98ba517b76a6ca10593afeb2cdcf7aed8 100644
--- a/src/containers/Building/sagas.js
+++ b/src/containers/Building/sagas.js
@@ -1,14 +1,16 @@
-import { call, put, takeEvery } from 'redux-saga/effects';
+import { call, put, takeEvery, takeLatest } from 'redux-saga/effects';
import request from '../../utils/request';
import { getHeaders, buildingsURL } from '../../utils/restServices';
import {
LOAD_BUILDING_DETAIL,
+ LOAD_PROJECTS,
} from './constants';
import {
buildingDetailLoaded,
buildingDetailLoadingError,
+ projectsLoaded,
} from './actions';
/**
@@ -18,7 +20,7 @@ import {
*/
function* getBuildingDetail(action) {
const buildingId = action.payload;
- const data = yield call(
+ const res = yield call(
request,
`${buildingsURL}${buildingId}`, {
method: 'GET',
@@ -26,19 +28,30 @@ function* getBuildingDetail(action) {
}
);
- if (!data.err) {
- yield put(buildingDetailLoaded(data));
+ if (!res.err) {
+ yield put(buildingDetailLoaded(res));
} else {
- yield put(buildingDetailLoadingError(data.err));
+ yield put(buildingDetailLoadingError(res.err));
}
}
+function* getProjects(action) {
+ const buildingId = action.buildingId;
+ const res = {
+ buildingId,
+ data: [],
+ };
+
+ yield put(projectsLoaded(res));
+}
+
/**
- * Watches for LOAD_BUILDING_DETAIL & CREATE_HIT actions and calls
+ * Watches for LOAD_BUILDING_DETAIL & LOAD_PROJECTS actions and calls
* the appropriate handler function.
*/
-function* buildingDetailWatcher() {
+function* buildingWatcher() {
yield takeEvery(LOAD_BUILDING_DETAIL, getBuildingDetail);
+ yield takeLatest(LOAD_PROJECTS, getProjects);
}
-export default buildingDetailWatcher;
+export default buildingWatcher;
diff --git a/src/containers/Documents/reducer.js b/src/containers/Documents/reducer.js
index 0829c6a5d6915a611e0de237813b6956c1f43ba2..6768abd4ba126be67231deecf2a25fa74fbc3eb8 100644
--- a/src/containers/Documents/reducer.js
+++ b/src/containers/Documents/reducer.js
@@ -14,6 +14,7 @@ const initState = {
uploadError: false,
files: {
building: [], // Root Directory
+ project: [],
utilityBills: [], // Utility_Bills
buildingDimensions: [], // Building_Dimensions
},
diff --git a/src/routes.js b/src/routes.js
index 4211ce3fed569331714c79b38e7e33e6e5f2903f..6313f7d4f00e4ab3448f762c5c1bbf8334260f68 100644
--- a/src/routes.js
+++ b/src/routes.js
@@ -8,6 +8,7 @@ import NotFound from './screens/NotFound';
import HomePage from './screens/HomePage';
import DetailPage from './screens/DetailPage';
import BuildingOverview from './components/BuildingOverview';
+import Project from './components/Project';
import Dimensions from './containers/Dimensions';
import Utilities from './components/Utilities';
@@ -18,8 +19,8 @@ export default (
-
-
+
+
diff --git a/src/sagas.js b/src/sagas.js
index 79cf9f7399e11c0abf645af3a5aecb49c8228c8e..dd26ab9070b37ff8de309b9aa54d1600064d243f 100644
--- a/src/sagas.js
+++ b/src/sagas.js
@@ -1,6 +1,6 @@
-import buildingsSearchSaga from './containers/SearchBar/sagas';
import buildingSaga from './containers/Building/sagas';
import dimensionsSaga from './containers/Dimensions/sagas';
+import buildingsSearchSaga from './containers/SearchBar/sagas';
import documentsSaga from './containers/Documents/sagas';
export default function* rootSaga() {