From d057497105a217729b0c01bfee72e967bb366617 Mon Sep 17 00:00:00 2001 From: jkantor Date: Thu, 29 Nov 2018 13:11:11 -0500 Subject: [PATCH] feat(pagination) added next and previous buttons to grades page --- src/components/Gradebook/index.jsx | 17 +++++++++++++ src/containers/GradebookPage/index.jsx | 6 +++++ src/data/actions/grades.js | 33 +++++++++++++++++++++++++- src/data/reducers/grades.js | 4 ++++ 4 files changed, 59 insertions(+), 1 deletion(-) diff --git a/src/components/Gradebook/index.jsx b/src/components/Gradebook/index.jsx index 68895ff..f3f3b92 100644 --- a/src/components/Gradebook/index.jsx +++ b/src/components/Gradebook/index.jsx @@ -294,6 +294,23 @@ export default class Gradebook extends React.Component { onClear={() => this.props.getUserGrades(this.props.match.params.courseId, this.props.selectedCohort, this.props.selectedTrack)} value={this.state.filterValue} /> +
+ +
+ +

diff --git a/src/containers/GradebookPage/index.jsx b/src/containers/GradebookPage/index.jsx index c4a18f0..466b50c 100644 --- a/src/containers/GradebookPage/index.jsx +++ b/src/containers/GradebookPage/index.jsx @@ -4,6 +4,7 @@ import Gradebook from '../../components/Gradebook'; import { fetchGrades, fetchMatchingUserGrades, + fetchPrevNextGrades, updateGrades, toggleGradeFormat, filterColumns, @@ -22,6 +23,8 @@ const mapStateToProps = state => ( selectedCohort: state.grades.selectedCohort, format: state.grades.gradeFormat, showSuccess: state.grades.showSuccess, + prevPage: state.grades.prevPage, + nextPage: state.grades.nextPage, } ); @@ -33,6 +36,9 @@ const mapDispatchToProps = dispatch => ( searchForUser: (courseId, searchText, cohort, track) => { dispatch(fetchMatchingUserGrades(courseId, searchText, cohort, track)); }, + getPrevNextGrades : (endpoint, cohort, track) => { + dispatch(fetchPrevNextGrades(endpoint, cohort, track)); + }, getCohorts: (courseId) => { dispatch(fetchCohorts(courseId)); }, diff --git a/src/data/actions/grades.js b/src/data/actions/grades.js index a593337..4477ae7 100644 --- a/src/data/actions/grades.js +++ b/src/data/actions/grades.js @@ -14,6 +14,7 @@ import { import LmsApiService from '../services/LmsApiService'; import store from '../store'; import { headingMapper, gradeSortMap, sortAlphaAsc } from './utils'; +import apiClient from "../apiClient"; const sortGrades = (columnName, direction) => { @@ -30,12 +31,14 @@ const sortGrades = (columnName, direction) => { const startedFetchingGrades = () => ({ type: STARTED_FETCHING_GRADES }); const finishedFetchingGrades = () => ({ type: FINISHED_FETCHING_GRADES }); const errorFetchingGrades = () => ({ type: ERROR_FETCHING_GRADES }); -const gotGrades = (grades, cohort, track, headings) => ({ +const gotGrades = (grades, cohort, track, headings, prev, next) => ({ type: GOT_GRADES, grades, cohort, track, headings, + prev, + next, }); const gradeUpdateRequest = () => ({ type: GRADE_UPDATE_REQUEST }); @@ -70,6 +73,8 @@ const fetchGrades = (courseId, cohort, track, showSuccess) => ( cohort, track, headingMapper.all(dispatch, data.results[0]), + data.previous, + data.next, )); dispatch(finishedFetchingGrades()); dispatch(updateBanner(!!showSuccess)); @@ -91,6 +96,8 @@ const fetchMatchingUserGrades = (courseId, searchText, cohort, track) => ( cohort, track, headingMapper.all(dispatch, data.results[0]), + data.previous, + data.next, )); dispatch(finishedFetchingGrades()); }) @@ -100,6 +107,29 @@ const fetchMatchingUserGrades = (courseId, searchText, cohort, track) => ( } ); +const fetchPrevNextGrades = (endpoint, cohort, track) => ( + (dispatch) => { + dispatch(startedFetchingGrades()); + return apiClient.get(endpoint) + .then(response => response.data) + .then((data) => { + dispatch(gotGrades( + data.results.sort(sortAlphaAsc), + cohort, + track, + headingMapper.all(dispatch, data.results[0]), + data.previous, + data.next, + )); + dispatch(finishedFetchingGrades()); + }) + .catch(() => { + dispatch(errorFetchingGrades()); + }); + } +); + + const updateGrades = (courseId, updateData) => ( (dispatch) => { dispatch(gradeUpdateRequest()); @@ -122,6 +152,7 @@ export { gotGrades, fetchGrades, fetchMatchingUserGrades, + fetchPrevNextGrades, gradeUpdateRequest, gradeUpdateSuccess, gradeUpdateFailure, diff --git a/src/data/reducers/grades.js b/src/data/reducers/grades.js index cba9e71..e91232c 100644 --- a/src/data/reducers/grades.js +++ b/src/data/reducers/grades.js @@ -17,6 +17,8 @@ const initialState = { errorFetching: false, gradeFormat: 'percent', showSuccess: false, + prevPage: null, + nextPage: null, }; const grades = (state = initialState, action) => { @@ -30,6 +32,8 @@ const grades = (state = initialState, action) => { errorFetching: false, selectedTrack: action.track, selectedCohort: action.cohort, + prevPage: action.prev, + nextPage: action.next, }; case STARTED_FETCHING_GRADES: return {