diff --git a/src/components/forms/MultiAssignForm/MultiAssignForm.js b/src/components/forms/MultiAssignForm/MultiAssignForm.js index d6110ad59..b0ccd5f93 100644 --- a/src/components/forms/MultiAssignForm/MultiAssignForm.js +++ b/src/components/forms/MultiAssignForm/MultiAssignForm.js @@ -39,9 +39,9 @@ const MultiAssignForm = ({ locale ) ) - .map(group => + .map((group, i) => res.value) - .then( - data => - data.privateData.role === 'superadmin' - ? dispatch(fetchInstanceGroups(data.privateData.instanceId)) - : Promise.resolve() - ) + dispatch(fetchUser(userId)).then(({ value: data }) => + dispatch(fetchInstanceGroups(data.privateData.instanceId)) + ) ]); componentWillMount() { @@ -493,7 +487,6 @@ Exercise.propTypes = { editAssignment: PropTypes.func.isRequired, push: PropTypes.func.isRequired, exercise: ImmutablePropTypes.map, - supervisedGroups: PropTypes.object, canEditExercise: PropTypes.bool.isRequired, referenceSolutions: ImmutablePropTypes.map, intl: intlShape.isRequired, @@ -522,11 +515,10 @@ export default withLinks( userId, exercise: exerciseSelector(exerciseId)(state), submitting: isSubmitting(state), - supervisedGroups: supervisorOfSelector(userId)(state), canEditExercise: canLoggedUserEditExercise(exerciseId)(state), referenceSolutions: referenceSolutionsSelector(exerciseId)(state), exercisePipelines: exercisePipelinesSelector(exerciseId)(state), - groups: groupsSelector(state), + groups: groupsUserCanEditSelector(state), groupsAccessor: groupDataAccessorSelector(state), isSuperAdmin: isLoggedAsSuperAdmin(state), firstDeadline: editMultiAssignFormSelector(state, 'firstDeadline'), diff --git a/src/redux/selectors/groups.js b/src/redux/selectors/groups.js index 92ac3f150..c4b34bf82 100644 --- a/src/redux/selectors/groups.js +++ b/src/redux/selectors/groups.js @@ -3,10 +3,12 @@ import { EMPTY_LIST, EMPTY_MAP, EMPTY_ARRAY } from '../../helpers/common'; import { studentOfGroupsIdsSelector, - supervisorOfGroupsIdsSelector + supervisorOfGroupsIdsSelector, + isLoggedAsSuperAdmin } from './users'; import { getAssignments } from './assignments'; import { isReady, getId, getJsData } from '../helpers/resourceManager'; +import { loggedInUserIdSelector } from './auth'; /** * Select groups part of the state @@ -73,6 +75,26 @@ export const adminOfSelector = userId => ) ); +export const groupsUserCanEditSelector = createSelector( + [ + loggedInUserIdSelector, + groupsSelector, + state => isLoggedAsSuperAdmin(state) + ], + (userId, groups, isSuperAdmin) => + groups.filter(isReady).filter(group => { + if (isSuperAdmin) { + return true; + } + const groupData = getJsData(group); + return ( + groupData.privateData && + (groupData.privateData.supervisors.indexOf(userId) >= 0 || + groupData.privateData.admins.indexOf(userId) >= 0) + ); + }) +); + const usersOfGroup = (type, groupId) => createSelector( groupSelector(groupId),