Resume from last completed unit (#66)
This commit is contained in:
@@ -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]);
|
||||
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
@@ -3,4 +3,5 @@ export {
|
||||
fetchSequence,
|
||||
} from './thunks';
|
||||
|
||||
export { getResumeBlock } from './api';
|
||||
export { reducer } from './slice';
|
||||
|
||||
Reference in New Issue
Block a user