diff --git a/src/components/Gradebook/index.jsx b/src/components/Gradebook/index.jsx index c931aa5..050f333 100644 --- a/src/components/Gradebook/index.jsx +++ b/src/components/Gradebook/index.jsx @@ -683,7 +683,7 @@ export default class Gradebook extends React.Component { options={[{ label: 'Percent', value: 'percent' }, { label: 'Absolute', value: 'absolute' }]} onChange={this.props.toggleFormat} /> - {this.props.showDownloadButtons && ( + {this.props.showBulkManagement && (
( '', uploadSuccess: !!(state.grades.bulkManagement && state.grades.bulkManagement.uploadSuccess), - showBulkManagement: stateHasMastersTrack(state), - showDownloadButtons: stateHasMastersTrack(state), + showBulkManagement: stateHasMastersTrack(state) && state.config.bulkManagementAvailable, bulkManagementHistory: getBulkManagementHistory(state), totalUsersCount: state.grades.totalUsersCount, filteredUsersCount: state.grades.filteredUsersCount, diff --git a/src/data/actions/assignmentTypes.js b/src/data/actions/assignmentTypes.js index d6638b6..e09714c 100644 --- a/src/data/actions/assignmentTypes.js +++ b/src/data/actions/assignmentTypes.js @@ -4,12 +4,17 @@ import { ERROR_FETCHING_ASSIGNMENT_TYPES, GOT_ARE_GRADES_FROZEN, } from '../constants/actionTypes/assignmentTypes'; +import GOT_BULK_MANAGEMENT_CONFIG from '../constants/actionTypes/config'; import LmsApiService from '../services/LmsApiService'; const startedFetchingAssignmentTypes = () => ({ type: STARTED_FETCHING_ASSIGNMENT_TYPES }); const errorFetchingAssignmentTypes = () => ({ type: ERROR_FETCHING_ASSIGNMENT_TYPES }); const gotAssignmentTypes = assignmentTypes => ({ type: GOT_ASSIGNMENT_TYPES, assignmentTypes }); const gotGradesFrozen = areGradesFrozen => ({ type: GOT_ARE_GRADES_FROZEN, areGradesFrozen }); +const gotBulkManagementConfig = bulkManagementEnabled => ({ + type: GOT_BULK_MANAGEMENT_CONFIG, + data: bulkManagementEnabled, +}); const fetchAssignmentTypes = courseId => ( (dispatch) => { @@ -19,6 +24,7 @@ const fetchAssignmentTypes = courseId => ( .then((data) => { dispatch(gotAssignmentTypes(Object.keys(data.assignment_types))); dispatch(gotGradesFrozen(data.grades_frozen)); + dispatch(gotBulkManagementConfig(data.can_see_bulk_management)); }) .catch(() => { dispatch(errorFetchingAssignmentTypes()); diff --git a/src/data/actions/assignmentTypes.test.js b/src/data/actions/assignmentTypes.test.js index ca172d1..613f7ce 100644 --- a/src/data/actions/assignmentTypes.test.js +++ b/src/data/actions/assignmentTypes.test.js @@ -11,6 +11,7 @@ import { ERROR_FETCHING_ASSIGNMENT_TYPES, GOT_ARE_GRADES_FROZEN, } from '../constants/actionTypes/assignmentTypes'; +import GOT_BULK_MANAGEMENT_CONFIG from '../constants/actionTypes/config'; const mockStore = configureMockStore([thunk]); const axiosMock = new MockAdapter(apiClient); @@ -42,12 +43,14 @@ describe('actions', () => { }, }, grades_frozen: false, + can_see_bulk_management: true, }; it('dispatches success action after fetching fetchAssignmentTypes', () => { const expectedActions = [ { type: STARTED_FETCHING_ASSIGNMENT_TYPES }, { type: GOT_ASSIGNMENT_TYPES, assignmentTypes: Object.keys(responseData.assignment_types) }, { type: GOT_ARE_GRADES_FROZEN, areGradesFrozen: responseData.grades_frozen }, + { type: GOT_BULK_MANAGEMENT_CONFIG, data: true }, ]; const store = mockStore(); @@ -79,6 +82,7 @@ describe('actions', () => { { type: STARTED_FETCHING_ASSIGNMENT_TYPES }, { type: GOT_ASSIGNMENT_TYPES, assignmentTypes: Object.keys(responseData.assignment_types) }, { type: GOT_ARE_GRADES_FROZEN, areGradesFrozen: true }, + { type: GOT_BULK_MANAGEMENT_CONFIG, data: true }, ]; const store = mockStore(); responseData.grades_frozen = true; diff --git a/src/data/constants/actionTypes/config.js b/src/data/constants/actionTypes/config.js new file mode 100644 index 0000000..af5c684 --- /dev/null +++ b/src/data/constants/actionTypes/config.js @@ -0,0 +1,3 @@ +const GOT_BULK_MANAGEMENT_CONFIG = 'GOT_BULK_MANAGEMENT_CONFIG'; + +export default GOT_BULK_MANAGEMENT_CONFIG; diff --git a/src/data/reducers/config.js b/src/data/reducers/config.js new file mode 100644 index 0000000..e98685a --- /dev/null +++ b/src/data/reducers/config.js @@ -0,0 +1,15 @@ +import GOT_BULK_MANAGEMENT_CONFIG from '../constants/actionTypes/config'; + +const reducer = (state = {}, action) => { + switch (action.type) { + case GOT_BULK_MANAGEMENT_CONFIG: + return { + ...state, + bulkManagementAvailable: action.data, + }; + default: + return state; + } +}; + +export default reducer; diff --git a/src/data/reducers/index.js b/src/data/reducers/index.js index e5330ec..b910077 100755 --- a/src/data/reducers/index.js +++ b/src/data/reducers/index.js @@ -6,6 +6,7 @@ import tracks from './tracks'; import assignmentTypes from './assignmentTypes'; import roles from './roles'; import filters from './filters'; +import config from './config'; const rootReducer = combineReducers({ grades, @@ -14,6 +15,7 @@ const rootReducer = combineReducers({ assignmentTypes, roles, filters, + config, }); export default rootReducer;