From 1b7175fd1e830aa210a4c5181c23da03216fcbdd Mon Sep 17 00:00:00 2001 From: Martin Krulis Date: Sat, 18 Nov 2017 22:39:00 +0100 Subject: [PATCH 1/2] Sidebar is now refreshing when new group is created from SIS course. --- .../SidebarContainer/SidebarContainer.js | 8 ++++++-- src/redux/middleware/loggerMiddleware.js | 4 ++-- src/redux/modules/groups.js | 12 ++++++++++++ src/redux/modules/users.js | 15 +++++++++++++++ src/redux/selectors/groups.js | 1 + 5 files changed, 36 insertions(+), 4 deletions(-) diff --git a/src/containers/SidebarContainer/SidebarContainer.js b/src/containers/SidebarContainer/SidebarContainer.js index 72528347b..363d0bda8 100644 --- a/src/containers/SidebarContainer/SidebarContainer.js +++ b/src/containers/SidebarContainer/SidebarContainer.js @@ -6,6 +6,10 @@ import { studentOfSelector, supervisorOfSelector } from '../../redux/selectors/groups'; +import { + loggedInStudentOfSelector, + loggedInSupervisorOfSelector +} from '../../redux/selectors/usersGroups'; import { notificationsSelector, isSupervisor, @@ -16,10 +20,10 @@ const mapStateToProps = state => { const userId = loggedInUserIdSelector(state); return { instances: memberOfInstances(userId)(state), - studentOf: studentOfSelector(userId)(state), + studentOf: loggedInStudentOfSelector(state), isAdmin: isLoggedAsSuperAdmin(state), isSupervisor: isSupervisor(userId)(state), - supervisorOf: supervisorOfSelector(userId)(state), + supervisorOf: loggedInSupervisorOfSelector(state), notifications: notificationsSelector(state) }; }; diff --git a/src/redux/middleware/loggerMiddleware.js b/src/redux/middleware/loggerMiddleware.js index fb9bba2e1..368b019dc 100644 --- a/src/redux/middleware/loggerMiddleware.js +++ b/src/redux/middleware/loggerMiddleware.js @@ -1,6 +1,6 @@ const middleware = isDev => store => next => action => { /* eslint no-console: ["error", { allow: ["log", "error"] }] */ - let verbose = false && isDev; + let verbose = false; var actionType = action.type; if (verbose) { console.log('Starting ' + actionType); @@ -13,7 +13,7 @@ const middleware = isDev => store => next => action => { var res = next(action); } catch (e) { console.error('Exception thrown when processing action ' + actionType); - if (isDev) console.error(e); + if (verbose) console.error(e); throw e; } if (verbose) { diff --git a/src/redux/modules/groups.js b/src/redux/modules/groups.js index 43993e9f4..74172ac54 100644 --- a/src/redux/modules/groups.js +++ b/src/redux/modules/groups.js @@ -5,7 +5,10 @@ import { addNotification } from './notifications'; import { createApiAction } from '../middleware/apiMiddleware'; import factory, { initialState } from '../helpers/resourceManager'; +import createRecord from '../helpers/resourceManager/recordFactory'; +import { resourceStatus } from '../helpers/resourceManager/status'; import { actionTypes as assignmentsActionTypes } from './assignments'; +import { actionTypes as sisSupervisedCoursesActionTypes } from './sisSupervisedCourses'; const resourceName = 'groups'; const { actions, actionTypes, reduceActions } = factory({ resourceName }); @@ -383,6 +386,15 @@ const reducer = handleActions( .update('public', ids => ids.filter(id => id !== assignmentId)) ) ) + ), + + [sisSupervisedCoursesActionTypes.CREATE_FULFILLED]: ( + state, + { payload: data } + ) => + state.setIn( + ['resources', data.id], + createRecord({ state: resourceStatus.FULFILLED, data }) ) }), initialState diff --git a/src/redux/modules/users.js b/src/redux/modules/users.js index 83a42690e..c629a2cc5 100644 --- a/src/redux/modules/users.js +++ b/src/redux/modules/users.js @@ -4,6 +4,7 @@ import factory, { initialState } from '../helpers/resourceManager'; import { createApiAction } from '../middleware/apiMiddleware'; import { additionalActionTypes as groupsActionTypes } from './groups'; +import { actionTypes as sisSupervisedCoursesActionTypes } from './sisSupervisedCourses'; import { actionTypes as emailVerificationActionTypes } from './emailVerification'; export const additionalActionTypes = { @@ -151,6 +152,20 @@ const reducer = handleActions( ); }, + [sisSupervisedCoursesActionTypes.CREATE_FULFILLED]: ( + state, + { meta: { userId }, payload } + ) => { + if (!state.getIn(['resources', userId])) { + return state; + } + + return state.updateIn( + ['resources', userId, 'data', 'groups', 'supervisorOf'], + list => list.push(payload.id) + ); + }, + [groupsActionTypes.MAKE_SUPERVISOR_REJECTED]: ( state, { meta: { groupId, userId } } diff --git a/src/redux/selectors/groups.js b/src/redux/selectors/groups.js index 50e39dfde..94b3ec04d 100644 --- a/src/redux/selectors/groups.js +++ b/src/redux/selectors/groups.js @@ -14,6 +14,7 @@ import { isReady, getId, getJsData } from '../helpers/resourceManager'; const EMPTY_MAP = Map(); export const groupsSelector = state => state.groups.get('resources'); + export const filterGroups = (ids, groups) => groups.filter(isReady).filter(group => ids.contains(getId(group))); From d4ccb7394e5e47c4f327bb0a1ac29fcf159444fb Mon Sep 17 00:00:00 2001 From: Martin Krulis Date: Sat, 18 Nov 2017 22:54:17 +0100 Subject: [PATCH 2/2] Fixing ESLint bug. --- src/containers/SidebarContainer/SidebarContainer.js | 4 ---- 1 file changed, 4 deletions(-) diff --git a/src/containers/SidebarContainer/SidebarContainer.js b/src/containers/SidebarContainer/SidebarContainer.js index 363d0bda8..ca29e00c0 100644 --- a/src/containers/SidebarContainer/SidebarContainer.js +++ b/src/containers/SidebarContainer/SidebarContainer.js @@ -2,10 +2,6 @@ import { connect } from 'react-redux'; import Sidebar from '../../components/layout/Sidebar/Sidebar'; import { loggedInUserIdSelector } from '../../redux/selectors/auth'; import { memberOfInstances } from '../../redux/selectors/instances'; -import { - studentOfSelector, - supervisorOfSelector -} from '../../redux/selectors/groups'; import { loggedInStudentOfSelector, loggedInSupervisorOfSelector