From 2b27f0774dd0ed90bb7a23c144be3d328a39ed12 Mon Sep 17 00:00:00 2001 From: "Dave St.Germain" Date: Thu, 14 May 2020 11:17:35 -0400 Subject: [PATCH] Resume from last completed unit (#66) --- src/courseware/CoursewareContainer.jsx | 11 +++++++++-- src/data/api.js | 7 +++++++ src/data/index.js | 1 + 3 files changed, 17 insertions(+), 2 deletions(-) diff --git a/src/courseware/CoursewareContainer.jsx b/src/courseware/CoursewareContainer.jsx index 86e560a3..3ed72d86 100644 --- a/src/courseware/CoursewareContainer.jsx +++ b/src/courseware/CoursewareContainer.jsx @@ -7,6 +7,7 @@ import { useRouteMatch, Redirect } from 'react-router'; import { fetchCourse, fetchSequence, + getResumeBlock, } from '../data'; import { checkBlockCompletion, @@ -100,8 +101,14 @@ function useContentRedirect(courseStatus, sequenceStatus) { const firstSequenceId = useSelector(firstSequenceIdSelector); useEffect(() => { if (courseStatus === 'loaded' && !sequenceId) { - // This is a replace because we don't want this change saved in the browser's history. - history.replace(`/course/${courseId}/${firstSequenceId}`); + getResumeBlock(courseId).then((data) => { + // This is a replace because we don't want this change saved in the browser's history. + if (data.sectionId && data.unitId) { + history.replace(`/course/${courseId}/${data.sectionId}/${data.unitId}`); + } else { + history.replace(`/course/${courseId}/${firstSequenceId}`); + } + }); } }, [courseStatus, sequenceId]); diff --git a/src/data/api.js b/src/data/api.js index f8f3545d..75c970b4 100644 --- a/src/data/api.js +++ b/src/data/api.js @@ -121,6 +121,7 @@ export async function getCourseBlocks(courseId) { return normalizeBlocks(courseId, data.blocks); } + function normalizeSequenceMetadata(sequence) { return { sequence: { @@ -152,3 +153,9 @@ export async function getSequenceMetadata(sequenceId) { return normalizeSequenceMetadata(data); } + +export async function getResumeBlock(courseId) { + const url = new URL(`${getConfig().LMS_BASE_URL}/api/courseware/resume/${courseId}`); + const { data } = await getAuthenticatedHttpClient().get(url.href, {}); + return camelCaseObject(data); +} diff --git a/src/data/index.js b/src/data/index.js index a3e1dd34..94799e4f 100644 --- a/src/data/index.js +++ b/src/data/index.js @@ -3,4 +3,5 @@ export { fetchSequence, } from './thunks'; +export { getResumeBlock } from './api'; export { reducer } from './slice';