Rename courseUsageKey to courseId

This commit is contained in:
David Joy
2020-03-23 17:26:33 -04:00
parent c8be4c401f
commit 8f4ff79351
15 changed files with 80 additions and 80 deletions

View File

@@ -18,12 +18,12 @@ import Course from './course';
import { sequenceIdsSelector, firstSequenceIdSelector } from './data/selectors';
function useUnitNavigationHandler(courseUsageKey, sequenceId, unitId) {
function useUnitNavigationHandler(courseId, sequenceId, unitId) {
const dispatch = useDispatch();
return useCallback((nextUnitId) => {
dispatch(checkBlockCompletion(courseUsageKey, sequenceId, unitId));
history.replace(`/course/${courseUsageKey}/${sequenceId}/${nextUnitId}`);
}, [courseUsageKey, sequenceId]);
dispatch(checkBlockCompletion(courseId, sequenceId, unitId));
history.replace(`/course/${courseId}/${sequenceId}/${nextUnitId}`);
}, [courseId, sequenceId]);
}
function usePreviousSequence(sequenceId) {
@@ -49,26 +49,26 @@ function useNextSequence(sequenceId) {
}
function useNextSequenceHandler(courseUsageKey, sequenceId) {
function useNextSequenceHandler(courseId, sequenceId) {
const nextSequence = useNextSequence(sequenceId);
const courseStatus = useSelector(state => state.courseware.courseStatus);
const sequenceStatus = useSelector(state => state.courseware.sequenceStatus);
return useCallback(() => {
if (nextSequence !== null) {
const nextUnitId = nextSequence.unitIds[0];
history.replace(`/course/${courseUsageKey}/${nextSequence.id}/${nextUnitId}`);
history.replace(`/course/${courseId}/${nextSequence.id}/${nextUnitId}`);
}
}, [courseStatus, sequenceStatus, sequenceId]);
}
function usePreviousSequenceHandler(courseUsageKey, sequenceId) {
function usePreviousSequenceHandler(courseId, sequenceId) {
const previousSequence = usePreviousSequence(sequenceId);
const courseStatus = useSelector(state => state.courseware.courseStatus);
const sequenceStatus = useSelector(state => state.courseware.sequenceStatus);
return useCallback(() => {
if (previousSequence !== null) {
const previousUnitId = previousSequence.unitIds[previousSequence.unitIds.length - 1];
history.replace(`/course/${courseUsageKey}/${previousSequence.id}/${previousUnitId}`);
history.replace(`/course/${courseId}/${previousSequence.id}/${previousUnitId}`);
}
}, [courseStatus, sequenceStatus, sequenceId]);
}
@@ -85,12 +85,12 @@ function useExamRedirect(sequenceId) {
function useContentRedirect(courseStatus, sequenceStatus) {
const match = useRouteMatch();
const { courseUsageKey, sequenceId, unitId } = match.params;
const { courseId, sequenceId, unitId } = match.params;
const sequence = useModel('sequences', sequenceId);
const firstSequenceId = useSelector(firstSequenceIdSelector);
useEffect(() => {
if (courseStatus === 'loaded' && !sequenceId) {
history.replace(`/course/${courseUsageKey}/${firstSequenceId}`);
history.replace(`/course/${courseId}/${firstSequenceId}`);
}
}, [courseStatus, sequenceId]);
@@ -100,20 +100,20 @@ function useContentRedirect(courseStatus, sequenceStatus) {
if (sequence.unitIds !== undefined && sequence.unitIds.length > 0) {
const unitIndex = sequence.position || 0;
const nextUnitId = sequence.unitIds[unitIndex];
history.replace(`/course/${courseUsageKey}/${sequence.id}/${nextUnitId}`);
history.replace(`/course/${courseId}/${sequence.id}/${nextUnitId}`);
}
}
}, [sequenceStatus, sequenceId, unitId]);
}
function useSavedSequencePosition(courseUsageKey, sequenceId, unitId) {
function useSavedSequencePosition(courseId, sequenceId, unitId) {
const dispatch = useDispatch();
const sequence = useModel('sequences', sequenceId);
const sequenceStatus = useSelector(state => state.courseware.sequenceStatus);
useEffect(() => {
if (sequenceStatus === 'loaded' && sequence.savePosition) {
const activeUnitIndex = sequence.unitIds.indexOf(unitId);
dispatch(saveSequencePosition(courseUsageKey, sequenceId, activeUnitIndex));
dispatch(saveSequencePosition(courseId, sequenceId, activeUnitIndex));
}
}, [unitId]);
}
@@ -136,7 +136,7 @@ function useAccessDeniedRedirect(courseStatus, courseId) {
export default function CoursewareContainer() {
const { params } = useRouteMatch();
const {
courseUsageKey: routeCourseUsageKey,
courseId: routeCourseUsageKey,
sequenceId: routeSequenceId,
unitId: routeUnitId,
} = params;
@@ -152,7 +152,7 @@ export default function CoursewareContainer() {
}
}, [routeSequenceId]);
// The courseUsageKey and sequenceId in the store are the entities we currently have loaded.
// The courseId and sequenceId in the store are the entities we currently have loaded.
// We get these two IDs from the store because until fetchCourse and fetchSequence below have
// finished their work, the IDs in the URL are not representative of what we should actually show.
// This is important particularly when switching sequences. Until a new sequence is fully loaded,
@@ -161,25 +161,25 @@ export default function CoursewareContainer() {
// the sequenceStatus flag has even switched back to "loading", which will put our app into an
// invalid state.
const {
courseUsageKey,
courseId,
sequenceId,
courseStatus,
sequenceStatus,
} = useSelector(state => state.courseware);
const nextSequenceHandler = useNextSequenceHandler(courseUsageKey, sequenceId);
const previousSequenceHandler = usePreviousSequenceHandler(courseUsageKey, sequenceId);
const unitNavigationHandler = useUnitNavigationHandler(courseUsageKey, sequenceId, routeUnitId);
const nextSequenceHandler = useNextSequenceHandler(courseId, sequenceId);
const previousSequenceHandler = usePreviousSequenceHandler(courseId, sequenceId);
const unitNavigationHandler = useUnitNavigationHandler(courseId, sequenceId, routeUnitId);
useAccessDeniedRedirect(courseStatus, courseUsageKey);
useAccessDeniedRedirect(courseStatus, courseId);
useContentRedirect(courseStatus, sequenceStatus);
useExamRedirect(sequenceId);
useSavedSequencePosition(courseUsageKey, sequenceId, routeUnitId);
useSavedSequencePosition(courseId, sequenceId, routeUnitId);
return (
<main className="flex-grow-1 d-flex flex-column">
<Course
courseId={courseUsageKey}
courseId={courseId}
sequenceId={sequenceId}
unitId={routeUnitId}
nextSequenceHandler={nextSequenceHandler}
@@ -193,7 +193,7 @@ export default function CoursewareContainer() {
CoursewareContainer.propTypes = {
match: PropTypes.shape({
params: PropTypes.shape({
courseUsageKey: PropTypes.string.isRequired,
courseId: PropTypes.string.isRequired,
sequenceId: PropTypes.string,
unitId: PropTypes.string,
}).isRequired,

View File

@@ -83,7 +83,7 @@ function Course({
<Sequence
unitId={unitId}
sequenceId={sequenceId}
courseUsageKey={courseId}
courseId={courseId}
unitNavigationHandler={unitNavigationHandler}
nextSequenceHandler={nextSequenceHandler}
previousSequenceHandler={previousSequenceHandler}

View File

@@ -19,7 +19,7 @@ const ContentLock = React.lazy(() => import('./content-lock'));
function Sequence({
unitId,
sequenceId,
courseUsageKey,
courseId,
unitNavigationHandler,
nextSequenceHandler,
previousSequenceHandler,
@@ -140,7 +140,7 @@ function Sequence({
)}
>
<ContentLock
courseUsageKey={courseUsageKey}
courseId={courseId}
sequenceTitle={sequence.title}
prereqSectionName={sequence.gatedContent.gatedSectionName}
prereqId={sequence.gatedContent.prereqId}
@@ -184,7 +184,7 @@ function Sequence({
Sequence.propTypes = {
unitId: PropTypes.string,
sequenceId: PropTypes.string,
courseUsageKey: PropTypes.string.isRequired,
courseId: PropTypes.string.isRequired,
unitNavigationHandler: PropTypes.func.isRequired,
nextSequenceHandler: PropTypes.func.isRequired,
previousSequenceHandler: PropTypes.func.isRequired,

View File

@@ -9,10 +9,10 @@ import { Button } from '@edx/paragon';
import messages from './messages';
function ContentLock({
intl, courseUsageKey, prereqSectionName, prereqId, sequenceTitle,
intl, courseId, prereqSectionName, prereqId, sequenceTitle,
}) {
const handleClick = useCallback(() => {
history.replace(`/course/${courseUsageKey}/${prereqId}`);
history.replace(`/course/${courseId}/${prereqId}`);
});
return (
@@ -36,7 +36,7 @@ function ContentLock({
}
ContentLock.propTypes = {
intl: intlShape.isRequired,
courseUsageKey: PropTypes.string.isRequired,
courseId: PropTypes.string.isRequired,
prereqSectionName: PropTypes.string.isRequired,
prereqId: PropTypes.string.isRequired,
sequenceTitle: PropTypes.string.isRequired,

View File

@@ -1,9 +1,9 @@
import { getConfig } from '@edx/frontend-platform';
import { getAuthenticatedHttpClient } from '@edx/frontend-platform/auth';
const getSequenceXModuleHandlerUrl = (courseUsageKey, sequenceId) => `${getConfig().LMS_BASE_URL}/courses/${courseUsageKey}/xblock/${sequenceId}/handler/xmodule_handler`;
const getSequenceXModuleHandlerUrl = (courseId, sequenceId) => `${getConfig().LMS_BASE_URL}/courses/${courseId}/xblock/${sequenceId}/handler/xmodule_handler`;
export async function getBlockCompletion(courseUsageKey, sequenceId, usageKey) {
export async function getBlockCompletion(courseId, sequenceId, usageKey) {
// Post data sent to this endpoint must be url encoded
// TODO: Remove the need for this to be the case.
// TODO: Ensure this usage of URLSearchParams is working in Internet Explorer
@@ -14,7 +14,7 @@ export async function getBlockCompletion(courseUsageKey, sequenceId, usageKey) {
};
const { data } = await getAuthenticatedHttpClient().post(
`${getSequenceXModuleHandlerUrl(courseUsageKey, sequenceId)}/get_completion`,
`${getSequenceXModuleHandlerUrl(courseId, sequenceId)}/get_completion`,
urlEncoded.toString(),
requestConfig,
);
@@ -26,7 +26,7 @@ export async function getBlockCompletion(courseUsageKey, sequenceId, usageKey) {
return false;
}
export async function updateSequencePosition(courseUsageKey, sequenceId, position) {
export async function updateSequencePosition(courseId, sequenceId, position) {
// Post data sent to this endpoint must be url encoded
// TODO: Remove the need for this to be the case.
// TODO: Ensure this usage of URLSearchParams is working in Internet Explorer
@@ -38,7 +38,7 @@ export async function updateSequencePosition(courseUsageKey, sequenceId, positio
};
const { data } = await getAuthenticatedHttpClient().post(
`${getSequenceXModuleHandlerUrl(courseUsageKey, sequenceId)}/goto_position`,
`${getSequenceXModuleHandlerUrl(courseId, sequenceId)}/goto_position`,
urlEncoded.toString(),
requestConfig,
);

View File

@@ -3,7 +3,7 @@ export function sequenceIdsSelector(state) {
if (state.courseware.courseStatus !== 'loaded') {
return [];
}
const { sectionIds } = state.models.courses[state.courseware.courseUsageKey];
const { sectionIds } = state.models.courses[state.courseware.courseId];
let sequenceIds = [];
sectionIds.forEach(sectionId => {
sequenceIds = [...sequenceIds, ...state.models.sections[sectionId].sequenceIds];
@@ -15,6 +15,6 @@ export function firstSequenceIdSelector(state) {
if (state.courseware.courseStatus !== 'loaded') {
return null;
}
const sectionId = state.models.courses[state.courseware.courseUsageKey].sectionIds[0];
const sectionId = state.models.courses[state.courseware.courseId].sectionIds[0];
return state.models.sections[sectionId].sequenceIds[0];
}

View File

@@ -7,7 +7,7 @@ import {
updateModel,
} from '../../model-store';
export function checkBlockCompletion(courseUsageKey, sequenceId, unitId) {
export function checkBlockCompletion(courseId, sequenceId, unitId) {
return async (dispatch, getState) => {
const { models } = getState();
if (models.units[unitId].complete) {
@@ -15,7 +15,7 @@ export function checkBlockCompletion(courseUsageKey, sequenceId, unitId) {
}
try {
const isComplete = await getBlockCompletion(courseUsageKey, sequenceId, unitId);
const isComplete = await getBlockCompletion(courseId, sequenceId, unitId);
dispatch(updateModel({
modelType: 'units',
model: {
@@ -29,7 +29,7 @@ export function checkBlockCompletion(courseUsageKey, sequenceId, unitId) {
};
}
export function saveSequencePosition(courseUsageKey, sequenceId, position) {
export function saveSequencePosition(courseId, sequenceId, position) {
return async (dispatch, getState) => {
const { models } = getState();
const initialPosition = models.sequences[sequenceId].position;
@@ -42,7 +42,7 @@ export function saveSequencePosition(courseUsageKey, sequenceId, position) {
},
}));
try {
await updateSequencePosition(courseUsageKey, sequenceId, position);
await updateSequencePosition(courseId, sequenceId, position);
// Update again under the assumption that the above call succeeded, since it doesn't return a
// meaningful response.
dispatch(updateModel({