Compare commits

...

6 Commits

Author SHA1 Message Date
Kyle McCormick
08e11b6f27 Fix logout URL 2020-04-09 12:32:43 -04:00
Kyle McCormick
a6522f5983 Prefix a bunch of routes with /learning 2020-04-09 12:32:32 -04:00
Kyle McCormick
a21be5d83c Update .env.development for devstack 2020-04-08 16:43:46 -04:00
Kyle McCormick
521483b836 Temporary: Prefix React routes with /learning 2020-04-08 15:53:44 -04:00
Kyle McCormick
6a5e906cbe Switch to kdmccormick/devstack-frontends branch of frontend-build
Required doing some reformatting in InsturctorToolbar.jsx
to make the linter happy.

Also, add dev-build command.
2020-04-07 12:01:13 -04:00
Kyle McCormick
9b76cc4d97 Make React routes relative 2020-04-07 11:32:44 -04:00
8 changed files with 5703 additions and 2251 deletions

View File

@@ -1,16 +1,16 @@
NODE_ENV='development' NODE_ENV='development'
PORT=2000 PORT=2000
ACCESS_TOKEN_COOKIE_NAME='edx-jwt-cookie-header-payload' ACCESS_TOKEN_COOKIE_NAME='edx-jwt-cookie-header-payload'
BASE_URL='localhost:2000' BASE_URL='localhost:19000/learning'
CREDENTIALS_BASE_URL='http://localhost:18150' CREDENTIALS_BASE_URL='http://localhost:18150'
CSRF_TOKEN_API_PATH='/csrf/api/v1/token' CSRF_TOKEN_API_PATH='/csrf/api/v1/token'
ECOMMERCE_BASE_URL='http://localhost:18130' ECOMMERCE_BASE_URL='http://localhost:18130'
LANGUAGE_PREFERENCE_COOKIE_NAME='openedx-language-preference' LANGUAGE_PREFERENCE_COOKIE_NAME='openedx-language-preference'
LMS_BASE_URL='http://localhost:18000' LMS_BASE_URL='http://localhost:18000'
LOGIN_URL='http://localhost:18000/login' LOGIN_URL='http://localhost:18000/login'
LOGOUT_URL='http://localhost:18000/login' LOGOUT_URL='http://localhost:18000/logout'
MARKETING_SITE_BASE_URL='http://localhost:18000' MARKETING_SITE_BASE_URL='http://localhost:18000'
ORDER_HISTORY_URL='localhost:1996/orders' ORDER_HISTORY_URL='localhost:19000/orders'
REFRESH_ACCESS_TOKEN_ENDPOINT='http://localhost:18000/login_refresh' REFRESH_ACCESS_TOKEN_ENDPOINT='http://localhost:18000/login_refresh'
SEGMENT_KEY=null SEGMENT_KEY=null
SITE_NAME='edX' SITE_NAME='edX'

7915
package-lock.json generated

File diff suppressed because it is too large Load Diff

View File

@@ -12,6 +12,7 @@
], ],
"scripts": { "scripts": {
"build": "fedx-scripts webpack", "build": "fedx-scripts webpack",
"dev-build": "fedx-scripts webpack-dev",
"i18n_extract": "BABEL_ENV=i18n fedx-scripts babel src --quiet > /dev/null", "i18n_extract": "BABEL_ENV=i18n fedx-scripts babel src --quiet > /dev/null",
"is-es5": "es-check es5 ./dist/*.js", "is-es5": "es-check es5 ./dist/*.js",
"lint": "fedx-scripts eslint --ext .js --ext .jsx .", "lint": "fedx-scripts eslint --ext .js --ext .jsx .",
@@ -56,7 +57,7 @@
"regenerator-runtime": "^0.13.3" "regenerator-runtime": "^0.13.3"
}, },
"devDependencies": { "devDependencies": {
"@edx/frontend-build": "^3.0.0", "@edx/frontend-build": "github:edx/frontend-build#kdmccormick/devstack-frontends",
"codecov": "^3.6.1", "codecov": "^3.6.1",
"es-check": "^5.1.0", "es-check": "^5.1.0",
"glob": "^7.1.6", "glob": "^7.1.6",

View File

@@ -7,7 +7,7 @@ export default function SequenceLink({ id, courseId }) {
const sequence = useModel('sequences', id); const sequence = useModel('sequences', id);
return ( return (
<div className="ml-4"> <div className="ml-4">
<Link to={`/course/${courseId}/${id}`}>{sequence.title}</Link> <Link to={`/learning/course/${courseId}/${id}`}>{sequence.title}</Link>
</div> </div>
); );
} }

View File

@@ -22,7 +22,7 @@ function useUnitNavigationHandler(courseId, sequenceId, unitId) {
const dispatch = useDispatch(); const dispatch = useDispatch();
return useCallback((nextUnitId) => { return useCallback((nextUnitId) => {
dispatch(checkBlockCompletion(courseId, sequenceId, unitId)); dispatch(checkBlockCompletion(courseId, sequenceId, unitId));
history.push(`/course/${courseId}/${sequenceId}/${nextUnitId}`); history.push(`/learning/course/${courseId}/${sequenceId}/${nextUnitId}`);
}, [courseId, sequenceId]); }, [courseId, sequenceId]);
} }
@@ -56,7 +56,7 @@ function useNextSequenceHandler(courseId, sequenceId) {
return useCallback(() => { return useCallback(() => {
if (nextSequence !== null) { if (nextSequence !== null) {
const nextUnitId = nextSequence.unitIds[0]; const nextUnitId = nextSequence.unitIds[0];
history.push(`/course/${courseId}/${nextSequence.id}/${nextUnitId}`); history.push(`/learning/course/${courseId}/${nextSequence.id}/${nextUnitId}`);
} }
}, [courseStatus, sequenceStatus, sequenceId]); }, [courseStatus, sequenceStatus, sequenceId]);
} }
@@ -68,7 +68,7 @@ function usePreviousSequenceHandler(courseId, sequenceId) {
return useCallback(() => { return useCallback(() => {
if (previousSequence !== null) { if (previousSequence !== null) {
const previousUnitId = previousSequence.unitIds[previousSequence.unitIds.length - 1]; const previousUnitId = previousSequence.unitIds[previousSequence.unitIds.length - 1];
history.push(`/course/${courseId}/${previousSequence.id}/${previousUnitId}`); history.push(`/learning/course/${courseId}/${previousSequence.id}/${previousUnitId}`);
} }
}, [courseStatus, sequenceStatus, sequenceId]); }, [courseStatus, sequenceStatus, sequenceId]);
} }
@@ -91,7 +91,7 @@ function useContentRedirect(courseStatus, sequenceStatus) {
useEffect(() => { useEffect(() => {
if (courseStatus === 'loaded' && !sequenceId) { if (courseStatus === 'loaded' && !sequenceId) {
// This is a replace because we don't want this change saved in the browser's history. // This is a replace because we don't want this change saved in the browser's history.
history.replace(`/course/${courseId}/${firstSequenceId}`); history.replace(`/learning/course/${courseId}/${firstSequenceId}`);
} }
}, [courseStatus, sequenceId]); }, [courseStatus, sequenceId]);
@@ -102,7 +102,7 @@ function useContentRedirect(courseStatus, sequenceStatus) {
const unitIndex = sequence.position || 0; const unitIndex = sequence.position || 0;
const nextUnitId = sequence.unitIds[unitIndex]; const nextUnitId = sequence.unitIds[unitIndex];
// This is a replace because we don't want this change saved in the browser's history. // This is a replace because we don't want this change saved in the browser's history.
history.replace(`/course/${courseId}/${sequence.id}/${nextUnitId}`); history.replace(`/learning/course/${courseId}/${sequence.id}/${nextUnitId}`);
} }
} }
}, [sequenceStatus, sequenceId, unitId]); }, [sequenceStatus, sequenceId, unitId]);
@@ -163,7 +163,7 @@ export default function CoursewareContainer() {
useSavedSequencePosition(courseId, sequenceId, routeUnitId); useSavedSequencePosition(courseId, sequenceId, routeUnitId);
if (courseStatus === 'denied') { if (courseStatus === 'denied') {
return <Redirect to={`/redirect/course-home/${courseId}`} />; return <Redirect to={`/learning/redirect/course-home/${courseId}`} />;
} }
return ( return (

View File

@@ -14,14 +14,14 @@ function InstructorToolbar(props) {
<div className="container-fluid py-3 d-md-flex justify-content-end align-items-center"> <div className="container-fluid py-3 d-md-flex justify-content-end align-items-center">
<div className="flex-grow-1"> <div className="flex-grow-1">
<Collapsible.Advanced className="mr-5 mb-md-0"> <Collapsible.Advanced className="mr-5 mb-md-0">
You are currently previewing the new learning sequence experience. You are currently previewing the new learning sequence experience.
<Collapsible.Trigger className="d-inline-block ml-2" style={{ cursor: 'pointer' }}> <Collapsible.Trigger className="d-inline-block ml-2" style={{ cursor: 'pointer' }}>
<Collapsible.Visible whenClosed> <Collapsible.Visible whenClosed>
<span style={{ borderBottom: 'solid 1px white' }}>More info</span> &rarr; <span style={{ borderBottom: 'solid 1px white' }}>More info</span> &rarr;
</Collapsible.Visible> </Collapsible.Visible>
</Collapsible.Trigger> </Collapsible.Trigger>
<Collapsible.Body> <Collapsible.Body>
This preview is to allow for early content testing, especially for custom content blocks, with the goal of ensuring it renders as expected in the next experience. You can learn more through the following <a className="text-white" style={{ textDecoration: 'underline' }} href="https://partners.edx.org/announcements/author-preview-learning-sequence-experience-update" target="blank" rel="noopener">Partner Portal post</a>. Please report any issues or provide <a className="text-white" style={{ textDecoration: 'underline' }} target="blank" rel="noopener" href="https://forms.gle/R6jMYJNTCj1vgC1D6">feedback using the linked form</a>. This preview is to allow for early content testing, especially for custom content blocks, with the goal of ensuring it renders as expected in the next experience. You can learn more through the following <a className="text-white" style={{ textDecoration: 'underline' }} href="https://partners.edx.org/announcements/author-preview-learning-sequence-experience-update" target="blank" rel="noopener">Partner Portal post</a>. Please report any issues or provide <a className="text-white" style={{ textDecoration: 'underline' }} target="blank" rel="noopener" href="https://forms.gle/R6jMYJNTCj1vgC1D6">feedback using the linked form</a>.
<Collapsible.Trigger className="d-inline-block ml-2" style={{ cursor: 'pointer' }}> <Collapsible.Trigger className="d-inline-block ml-2" style={{ cursor: 'pointer' }}>
<Collapsible.Visible whenOpen> <Collapsible.Visible whenOpen>
<span style={{ borderBottom: 'solid 1px white' }}>Close</span> &times; <span style={{ borderBottom: 'solid 1px white' }}>Close</span> &times;

View File

@@ -12,7 +12,7 @@ function ContentLock({
intl, courseId, prereqSectionName, prereqId, sequenceTitle, intl, courseId, prereqSectionName, prereqId, sequenceTitle,
}) { }) {
const handleClick = useCallback(() => { const handleClick = useCallback(() => {
history.push(`/course/${courseId}/${prereqId}`); history.push(`/learning/course/${courseId}/${prereqId}`);
}); });
return ( return (

View File

@@ -28,13 +28,13 @@ subscribe(APP_READY, () => {
<AppProvider store={store}> <AppProvider store={store}>
<UserMessagesProvider> <UserMessagesProvider>
<Switch> <Switch>
<Route path="/redirect" component={CoursewareRedirect} /> <Route path="/learning/redirect" component={CoursewareRedirect} />
<Route path="/course/:courseId/home" component={CourseHomeContainer} /> <Route path="/learning/course/:courseId/home" component={CourseHomeContainer} />
<Route <Route
path={[ path={[
'/course/:courseId/:sequenceId/:unitId', '/learning/course/:courseId/:sequenceId/:unitId',
'/course/:courseId/:sequenceId', '/learning/course/:courseId/:sequenceId',
'/course/:courseId', '/learning/course/:courseId',
]} ]}
component={CoursewareContainer} component={CoursewareContainer}
/> />