summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/api/sagas/objects.js6
-rw-r--r--src/containers/auth/Logout.js6
-rw-r--r--src/containers/simulations/VisibleSimulationAuthList.js10
-rw-r--r--src/reducers/objects.js12
-rw-r--r--src/store/denormalizer.js16
5 files changed, 30 insertions, 20 deletions
diff --git a/src/api/sagas/objects.js b/src/api/sagas/objects.js
index 9bc98e6f..fd7830b3 100644
--- a/src/api/sagas/objects.js
+++ b/src/api/sagas/objects.js
@@ -4,9 +4,9 @@ import {getSimulation} from "../routes/simulations";
import {getUser} from "../routes/users";
const selectors = {
- simulation: state => state.objects.simulations,
- user: state => state.objects.users,
- authorization: state => state.objects.authorizations,
+ simulation: state => state.objects.simulation,
+ user: state => state.objects.user,
+ authorization: state => state.objects.authorization,
};
function* fetchAndStoreObject(objectType, id, apiCall, addToStore) {
diff --git a/src/containers/auth/Logout.js b/src/containers/auth/Logout.js
index 8d329c1f..ec2b8842 100644
--- a/src/containers/auth/Logout.js
+++ b/src/containers/auth/Logout.js
@@ -2,10 +2,6 @@ import {connect} from "react-redux";
import {logOut} from "../../actions/auth";
import LogoutButton from "../../components/navigation/LogoutButton";
-const mapStateToProps = state => {
- return {};
-};
-
const mapDispatchToProps = dispatch => {
return {
onLogout: () => dispatch(logOut()),
@@ -13,7 +9,7 @@ const mapDispatchToProps = dispatch => {
};
const Logout = connect(
- mapStateToProps,
+ undefined,
mapDispatchToProps
)(LogoutButton);
diff --git a/src/containers/simulations/VisibleSimulationAuthList.js b/src/containers/simulations/VisibleSimulationAuthList.js
index 07740435..2a676e73 100644
--- a/src/containers/simulations/VisibleSimulationAuthList.js
+++ b/src/containers/simulations/VisibleSimulationAuthList.js
@@ -1,5 +1,6 @@
import {connect} from "react-redux";
import SimulationList from "../../components/simulations/SimulationAuthList";
+import {denormalize} from "../../store/denormalizer";
const getVisibleSimulationAuths = (simulationAuths, filter) => {
switch (filter) {
@@ -15,12 +16,9 @@ const getVisibleSimulationAuths = (simulationAuths, filter) => {
};
const mapStateToProps = state => {
- const denormalizedAuthorizations = state.authorizationsOfCurrentUser.map(authorizationIds => {
- const authorization = Object.assign({}, state.objects.authorizations[authorizationIds]);
- authorization.simulation = state.objects.simulations[authorization.simulationId];
- authorization.user = state.objects.users[authorization.userId];
- return authorization;
- });
+ const denormalizedAuthorizations = state.authorizationsOfCurrentUser.map(authorizationIds =>
+ denormalize(state, "authorization", authorizationIds)
+ );
return {
authorizations: getVisibleSimulationAuths(denormalizedAuthorizations, state.authVisibilityFilter)
diff --git a/src/reducers/objects.js b/src/reducers/objects.js
index 40bd3524..6381c8d9 100644
--- a/src/reducers/objects.js
+++ b/src/reducers/objects.js
@@ -2,12 +2,12 @@ import {combineReducers} from "redux";
import {ADD_TO_AUTHORIZATION_STORE, ADD_TO_SIMULATION_STORE, ADD_TO_USER_STORE} from "../actions/objects";
export const objects = combineReducers({
- simulations,
- authorizations,
- users,
+ simulation,
+ authorization,
+ user,
});
-function simulations(state = {}, action) {
+function simulation(state = {}, action) {
switch (action.type) {
case ADD_TO_SIMULATION_STORE:
return Object.assign(
@@ -19,7 +19,7 @@ function simulations(state = {}, action) {
}
}
-function authorizations(state = {}, action) {
+function authorization(state = {}, action) {
switch (action.type) {
case ADD_TO_AUTHORIZATION_STORE:
return Object.assign(
@@ -31,7 +31,7 @@ function authorizations(state = {}, action) {
}
}
-function users(state = {}, action) {
+function user(state = {}, action) {
switch (action.type) {
case ADD_TO_USER_STORE:
return Object.assign(
diff --git a/src/store/denormalizer.js b/src/store/denormalizer.js
new file mode 100644
index 00000000..fbf15430
--- /dev/null
+++ b/src/store/denormalizer.js
@@ -0,0 +1,16 @@
+export function denormalize(state, objectType, id) {
+ const object = Object.assign({}, state.objects[objectType][id]);
+
+ for (let prop in object) {
+ if (!object.hasOwnProperty(prop)) {
+ continue;
+ }
+
+ if (prop.endsWith("Id")) {
+ const propType = prop.replace("Id", "");
+ object[propType] = state.objects[propType][object[prop]];
+ }
+ }
+
+ return object;
+}