From ab0d2aa6f6f0da9a967b6b7e2b2bec0c5e8bf181 Mon Sep 17 00:00:00 2001 From: Martin Krulis Date: Sat, 18 Nov 2017 01:08:11 +0100 Subject: [PATCH 1/2] Fixed problems in selectors in reductors created by latest API changes. --- src/redux/middleware/loggerMiddleware.js | 25 ++++++++------ src/redux/modules/stats.js | 34 +++++++------------- src/redux/selectors/submissionEvaluations.js | 2 ++ src/redux/selectors/users.js | 7 ++-- src/redux/store.js | 10 +++--- 5 files changed, 40 insertions(+), 38 deletions(-) diff --git a/src/redux/middleware/loggerMiddleware.js b/src/redux/middleware/loggerMiddleware.js index bf03e66a7..fb9bba2e1 100644 --- a/src/redux/middleware/loggerMiddleware.js +++ b/src/redux/middleware/loggerMiddleware.js @@ -1,18 +1,25 @@ -const middleware = store => next => action => { - /* eslint no-console: ["error", { allow: ["log"] }] */ - let verbose = false; +const middleware = isDev => store => next => action => { + /* eslint no-console: ["error", { allow: ["log", "error"] }] */ + let verbose = false && isDev; + var actionType = action.type; if (verbose) { + console.log('Starting ' + actionType); console.log(action); - } else { - console.log(action.type); + } else if (isDev) { + console.log(actionType); } - let res = next(action); - + try { + var res = next(action); + } catch (e) { + console.error('Exception thrown when processing action ' + actionType); + if (isDev) console.error(e); + throw e; + } if (verbose) { - console.log('State After Actions:'); + console.log('State After Action ' + actionType); + console.log(store.getState().groups); console.log('--------------------'); - console.log(store.getState().assignments); } return res; diff --git a/src/redux/modules/stats.js b/src/redux/modules/stats.js index b7ac72b7b..521ea7af0 100644 --- a/src/redux/modules/stats.js +++ b/src/redux/modules/stats.js @@ -1,11 +1,6 @@ import { handleActions } from 'redux-actions'; import { fromJS, List } from 'immutable'; -import factory, { - initialState, - createRecord, - resourceStatus -} from '../helpers/resourceManager'; -import { additionalActionTypes as additionalGroupActionTypes } from './groups'; +import factory, { initialState } from '../helpers/resourceManager'; import { additionalActionTypes as additionalSubmissionActionTypes } from './submissions'; /** @@ -23,24 +18,19 @@ export const fetchGroupsStatsIfNeeded = actions.fetchOneIfNeeded; const reducer = handleActions( Object.assign({}, reduceActions, { - [additionalGroupActionTypes.LOAD_USERS_GROUPS_FULFILLED]: ( + [additionalSubmissionActionTypes.ACCEPT_FULFILLED]: (state, { payload }) => + state.updateIn(['resources', payload.groupId, 'data'], stats => { + if (!stats) { + stats = List(); + } + return stats + .filter(userStats => userStats.get('userId') !== payload.userId) + .push(fromJS(payload)); + }), + [additionalSubmissionActionTypes.UNACCEPT_FULFILLED]: ( state, { payload } - ) => { - payload.stats.map(item => { - state.setIn( - 'resources', - item.id, - createRecord({ - data: item, - status: resourceStatus.FULFILLED - }) - ); - }); - - return state; - }, - [additionalSubmissionActionTypes.ACCEPT_FULFILLED]: (state, { payload }) => + ) => state.updateIn(['resources', payload.groupId, 'data'], stats => { if (!stats) { stats = List(); diff --git a/src/redux/selectors/submissionEvaluations.js b/src/redux/selectors/submissionEvaluations.js index 7dee2e0a3..cbde6a72e 100644 --- a/src/redux/selectors/submissionEvaluations.js +++ b/src/redux/selectors/submissionEvaluations.js @@ -25,6 +25,8 @@ export const evaluationsForSubmissionSelector = submissionId => .filter(isReady) .filter( evaluation => + submission && + submission.getIn(['data', 'submissions']) && submission .get('data') .get('submissions') diff --git a/src/redux/selectors/users.js b/src/redux/selectors/users.js index 5ebfe323b..613d83e38 100644 --- a/src/redux/selectors/users.js +++ b/src/redux/selectors/users.js @@ -71,8 +71,11 @@ export const loggedInUserSelector = createSelector( ); export const isLoggedAsSuperAdmin = createSelector( - [usersSelector, loggedInUserIdSelector], - (users, id) => users.get(id).getIn(['data', 'role']) === 'superadmin' + [loggedInUserSelector], + loggedInUser => + loggedInUser && isReady(loggedInUser) + ? loggedInUser.getIn(['data', 'role']) === 'superadmin' + : false ); export const memberOfInstancesIdsSelector = userId => diff --git a/src/redux/store.js b/src/redux/store.js index 21a9e5cb8..a6eef23a1 100644 --- a/src/redux/store.js +++ b/src/redux/store.js @@ -35,11 +35,11 @@ const getMiddleware = history => [ const dev = history => compose( - applyMiddleware(...getMiddleware(history)), - canUseDOM && window.devToolsExtension ? window.devToolsExtension() : f => f, // use the DEVtools if the extension is installed - !canUseDOM || !window.devToolsExtension // dev tools not available, or we are at server -> manual logging - ? applyMiddleware(loggerMiddleware) - : f => f + applyMiddleware( + ...getMiddleware(history), + loggerMiddleware(!canUseDOM || !window.devToolsExtension || true) + ), + canUseDOM && window.devToolsExtension ? window.devToolsExtension() : f => f // use the DEVtools if the extension is installed ); const prod = history => compose(applyMiddleware(...getMiddleware(history))); From bc9ede6e589b3f07f3db74860246c427a003d1d3 Mon Sep 17 00:00:00 2001 From: Martin Krulis Date: Sat, 18 Nov 2017 01:11:11 +0100 Subject: [PATCH 2/2] Logging disabled when Redux Dev Tools are on the scene. --- src/redux/store.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/redux/store.js b/src/redux/store.js index a6eef23a1..5500a6beb 100644 --- a/src/redux/store.js +++ b/src/redux/store.js @@ -37,7 +37,7 @@ const dev = history => compose( applyMiddleware( ...getMiddleware(history), - loggerMiddleware(!canUseDOM || !window.devToolsExtension || true) + loggerMiddleware(!canUseDOM || !window.devToolsExtension) ), canUseDOM && window.devToolsExtension ? window.devToolsExtension() : f => f // use the DEVtools if the extension is installed );