diff --git a/src/components/Gradebook/index.jsx b/src/components/Gradebook/index.jsx
index 1f98c9d..0b4615d 100644
--- a/src/components/Gradebook/index.jsx
+++ b/src/components/Gradebook/index.jsx
@@ -1,5 +1,5 @@
import React from 'react';
-import { Button, Modal, SearchField, Table, InputSelect } from '@edx/paragon';
+import { Button, InputSelect, Modal, SearchField, StatusAlert, Table } from '@edx/paragon';
import queryString from 'query-string';
import { configuration } from '../../config';
@@ -62,7 +62,15 @@ export default class Gradebook extends React.Component {
},
},
]);
+
+ this.setState({
+ modalModel: [{}],
+ modalOpen: false,
+ updateModuleId: null,
+ updateUserId: null,
+ });
}
+
updateQueryParams = (queryKey, queryValue) => {
const parsed = queryString.parse(this.props.location.search);
parsed[queryKey] = queryValue;
@@ -292,6 +300,12 @@ export default class Gradebook extends React.Component {
+ this.props.updateBanner(false)}
+ open={this.props.showSuccess}
+ />
(
selectedTrack: state.grades.selectedTrack,
selectedCohort: state.grades.selectedCohort,
format: state.grades.gradeFormat,
+ showSuccess: state.grades.showSuccess,
}
);
@@ -46,6 +48,9 @@ const mapDispatchToProps = dispatch => (
filterColumns: (filterType, exampleUser) => {
dispatch(filterColumns(filterType, exampleUser));
},
+ updateBanner: (showSuccess) => {
+ dispatch(updateBanner(showSuccess));
+ },
}
);
diff --git a/src/data/actions/grades.js b/src/data/actions/grades.js
index 745aac1..a982c16 100644
--- a/src/data/actions/grades.js
+++ b/src/data/actions/grades.js
@@ -9,6 +9,7 @@ import {
TOGGLE_GRADE_FORMAT,
SORT_GRADES,
FILTER_COLUMNS,
+ UPDATE_BANNER,
} from '../constants/actionTypes/grades';
import LmsApiService from '../services/LmsApiService';
import { headingMapper } from './utils';
@@ -25,7 +26,7 @@ const gotGrades = (grades, cohort, track, headings) => ({
});
const gradeUpdateRequest = () => ({ type: GRADE_UPDATE_REQUEST });
-const gradeUpdateSuccess = responseData => ({
+const gradeUpdateSuccess = (responseData) => ({
type: GRADE_UPDATE_SUCCESS,
payload: { responseData },
});
@@ -43,7 +44,9 @@ const filterColumns = (filterType, exampleUser) => ({
headings: headingMapper[filterType](exampleUser)
});
-const fetchGrades = (courseId, cohort, track) => (
+const updateBanner = (showSuccess) => ({ type: UPDATE_BANNER, showSuccess });
+
+const fetchGrades = (courseId, cohort, track, showSuccess) => (
(dispatch) => {
dispatch(startedFetchingGrades());
return LmsApiService.fetchGradebookData(courseId, null, cohort, track)
@@ -51,6 +54,7 @@ const fetchGrades = (courseId, cohort, track) => (
.then((data) => {
dispatch(gotGrades(data.results, cohort, track, headingMapper.all(data.results[0])));
dispatch(finishedFetchingGrades());
+ dispatch(updateBanner(!!showSuccess));
})
.catch(() => {
dispatch(errorFetchingGrades());
@@ -79,7 +83,8 @@ const updateGrades = (courseId, updateData) => (
return LmsApiService.updateGradebookData(courseId, updateData)
.then(response => response.data)
.then((data) => {
- dispatch(gradeUpdateSuccess(data));
+ dispatch(gradeUpdateSuccess(data))
+ dispatch(fetchGrades(courseId, null, null, true))
})
.catch((error) => {
dispatch(gradeUpdateFailure(error));
@@ -101,4 +106,5 @@ export {
toggleGradeFormat,
sortGrades,
filterColumns,
+ updateBanner,
};
diff --git a/src/data/constants/actionTypes/grades.js b/src/data/constants/actionTypes/grades.js
index 31a65d6..25b19ee 100644
--- a/src/data/constants/actionTypes/grades.js
+++ b/src/data/constants/actionTypes/grades.js
@@ -10,6 +10,7 @@ const GRADE_UPDATE_FAILURE = 'GRADE_UPDATE_FAILURE';
const TOGGLE_GRADE_FORMAT = 'TOGGLE_GRADE_FORMAT';
const SORT_GRADES = 'SORT_GRADES';
const FILTER_COLUMNS = 'FILTER_COLUMNS';
+const UPDATE_BANNER = 'UPDATE_BANNER';
export {
STARTED_FETCHING_GRADES,
@@ -22,4 +23,5 @@ export {
TOGGLE_GRADE_FORMAT,
SORT_GRADES,
FILTER_COLUMNS,
+ UPDATE_BANNER,
};
diff --git a/src/data/reducers/grades.js b/src/data/reducers/grades.js
index a11f46e..25e75ac 100644
--- a/src/data/reducers/grades.js
+++ b/src/data/reducers/grades.js
@@ -4,6 +4,8 @@ import {
GOT_GRADES,
TOGGLE_GRADE_FORMAT,
FILTER_COLUMNS,
+ GRADE_UPDATE_SUCCESS,
+ UPDATE_BANNER,
} from '../constants/actionTypes/grades';
const initialState = {
@@ -13,6 +15,7 @@ const initialState = {
finishedFetching: false,
errorFetching: false,
gradeFormat: 'percent',
+ showSuccess: false,
};
const grades = (state = initialState, action) => {
@@ -49,6 +52,11 @@ const grades = (state = initialState, action) => {
...state,
headings: action.headings,
};
+ case UPDATE_BANNER:
+ return {
+ ...state,
+ showSuccess: action.showSuccess,
+ };
default:
return state;
}