diff --git a/src/courseware/CourseContainer.jsx b/src/courseware/CourseContainer.jsx index cd726f50..b30ec0a7 100644 --- a/src/courseware/CourseContainer.jsx +++ b/src/courseware/CourseContainer.jsx @@ -51,25 +51,39 @@ function CourseContainer(props) { return (
- {ready ? ( - - ) : ( - - )} + {(() => { + if (ready) { + return ( + + ); + } + + if (metadata.fetchState === 'failed' || models.fetchState === 'failed') { + return ( +

+ {intl.formatMessage(messages['learn.course.load.failure'])} +

+ ); + } + + return ( + + ); + })()}
); } diff --git a/src/courseware/messages.js b/src/courseware/messages.js index 65564d18..2e778eea 100644 --- a/src/courseware/messages.js +++ b/src/courseware/messages.js @@ -11,6 +11,11 @@ const messages = defineMessages({ defaultMessage: 'Error: {error}', description: 'Message when learning sequence fails to load', }, + 'learn.course.load.failure': { + id: 'learn.course.load.failure', + defaultMessage: 'There was an error loading this course.', + description: 'Message when a course fails to load', + }, }); export default messages; diff --git a/src/data/course-blocks/thunks.js b/src/data/course-blocks/thunks.js index 57c85389..3616ce2c 100644 --- a/src/data/course-blocks/thunks.js +++ b/src/data/course-blocks/thunks.js @@ -1,3 +1,4 @@ +import { logError } from '@edx/frontend-platform/logging'; import { fetchCourseBlocksRequest, fetchCourseBlocksSuccess, @@ -25,7 +26,8 @@ export function fetchCourseBlocks(courseUsageKey) { const courseBlocks = await getCourseBlocks(courseUsageKey); dispatch(fetchCourseBlocksSuccess(courseBlocks)); } catch (error) { - dispatch(fetchCourseBlocksFailure(error)); + logError(error); + dispatch(fetchCourseBlocksFailure(courseUsageKey)); } }; } @@ -41,7 +43,8 @@ export function fetchSequenceMetadata(sequenceBlockId) { relatedBlocksMetadata: sequenceMetadata.items, })); } catch (error) { - dispatch(fetchBlockMetadataFailure({ blockId: sequenceBlockId }, error)); + logError(error); + dispatch(fetchBlockMetadataFailure({ blockId: sequenceBlockId })); } }; } @@ -63,7 +66,8 @@ export function checkBlockCompletion(courseUsageKey, sequenceId, unitId) { }, })); } catch (error) { - dispatch(fetchBlockMetadataFailure(commonPayload, error)); + logError(error); + dispatch(fetchBlockMetadataFailure(commonPayload)); } }; } @@ -82,6 +86,7 @@ export function saveSequencePosition(courseUsageKey, sequenceId, position) { await updateSequencePosition(courseUsageKey, sequenceId, position); dispatch(updateBlockSuccess(actionPayload)); } catch (error) { + logError(error); dispatch(updateBlockFailure(actionPayload)); } }; @@ -100,6 +105,7 @@ export function addBookmark(unitId) { await createBookmark(unitId); dispatch(updateBlockSuccess(actionPayload)); } catch (error) { + logError(error); dispatch(updateBlockFailure(actionPayload)); } }; @@ -118,6 +124,7 @@ export function removeBookmark(unitId) { await deleteBookmark(unitId); dispatch(updateBlockSuccess(actionPayload)); } catch (error) { + logError(error); dispatch(updateBlockFailure(actionPayload)); } }; diff --git a/src/data/course-meta/thunks.js b/src/data/course-meta/thunks.js index 6301e4e8..0259ab68 100644 --- a/src/data/course-meta/thunks.js +++ b/src/data/course-meta/thunks.js @@ -1,4 +1,5 @@ /* eslint-disable import/prefer-default-export */ +import { logError } from '@edx/frontend-platform/logging'; import { fetchCourseMetadataRequest, fetchCourseMetadataSuccess, @@ -15,7 +16,8 @@ export function fetchCourseMetadata(courseUsageKey) { const courseMetadata = await getCourseMetadata(courseUsageKey); dispatch(fetchCourseMetadataSuccess(courseMetadata)); } catch (error) { - dispatch(fetchCourseMetadataFailure(error)); + logError(error); + dispatch(fetchCourseMetadataFailure({ courseUsageKey })); } }; }