Skip to content

Commit 8a0df39

Browse files
committed
PROD-2534 - extract urls, add ResourceProvider provider
1 parent f22fe76 commit 8a0df39

File tree

10 files changed

+90
-22
lines changed

10 files changed

+90
-22
lines changed

src-ts/tools/learn/course-details/CourseDetailsPage.tsx

Lines changed: 17 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -14,8 +14,11 @@ import {
1414
CoursesProviderData,
1515
CourseTitle,
1616
MyCertificationProgressProviderData,
17+
MyCertificationProgressStatus,
18+
ResourceProviderData,
1719
useCoursesProvider,
18-
useMyCertificationProgress
20+
useMyCertificationProgress,
21+
useResourceProvider
1922
} from '../learn-lib'
2023

2124
import { CourseCurriculum } from './course-curriculum'
@@ -27,6 +30,10 @@ const CourseDetailsPage: FC<{}> = () => {
2730
const routeParams: Params<string> = useParams()
2831
const { profile, initialized: profileReady }: ProfileContextData = useContext(profileContext)
2932

33+
const {
34+
provider: resourceProvider,
35+
}: ResourceProviderData = useResourceProvider(routeParams.provider)
36+
3037
const {
3138
course,
3239
ready: courseReady,
@@ -52,7 +59,7 @@ const CourseDetailsPage: FC<{}> = () => {
5259
return
5360
}
5461

55-
return progress?.status === 'completed' ? (
62+
return progress?.status === MyCertificationProgressStatus.completed ? (
5663
<>
5764
<h3 className='details'>Suggested next steps</h3>
5865

@@ -78,21 +85,6 @@ const CourseDetailsPage: FC<{}> = () => {
7885
)
7986
}
8087

81-
function getProviderCredits(): ReactNode {
82-
if (!course) {
83-
return
84-
}
85-
86-
return course.provider === 'freeCodeCamp' && (
87-
<div className={styles['credits-link']}>
88-
<a href='https://freecodecamp.org/' target='_blank' referrerPolicy='no-referrer' rel='noreferrer'>
89-
This course was created by the freeCodeCamp.org community.
90-
<IconOutline.ExternalLinkIcon />
91-
</a>
92-
</div>
93-
)
94-
}
95-
9688
return (
9789
<ContentLayout>
9890
{!ready && (
@@ -129,7 +121,14 @@ const CourseDetailsPage: FC<{}> = () => {
129121
/>
130122
</div>
131123
</div>
132-
{getProviderCredits()}
124+
{resourceProvider && (
125+
<div className={styles['credits-link']}>
126+
<a href={`//${resourceProvider.url}`} target='_blank' referrerPolicy='no-referrer' rel='noreferrer'>
127+
This course was created by the {resourceProvider.url} community.
128+
<IconOutline.ExternalLinkIcon />
129+
</a>
130+
</div>
131+
)}
133132
</>
134133
)}
135134
</ContentLayout>

src-ts/tools/learn/course-details/course-curriculum/CourseCurriculum.tsx

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ import classNames from 'classnames'
22
import { Dispatch, FC, SetStateAction, useCallback, useEffect, useState } from 'react'
33
import { NavigateFunction, useNavigate, useSearchParams } from 'react-router-dom'
44

5-
import { authUrlLogin, Button, UserProfile } from '../../../../lib'
5+
import { Button, UserProfile } from '../../../../lib'
66
import {
77
CourseOutline,
88
LearnCourse,
@@ -15,7 +15,7 @@ import {
1515
UpdateMyCertificateProgressActions,
1616
updateMyCertificationsProgressAsync
1717
} from '../../learn-lib'
18-
import { getFccLessonPath, LEARN_PATHS } from '../../learn.routes'
18+
import { authenticateAndStartCourseRoute, getFccLessonPath, LEARN_PATHS } from '../../learn.routes'
1919

2020
import styles from './CourseCurriculum.module.scss'
2121
import { CurriculumSummary } from './curriculum-summary'
@@ -68,7 +68,7 @@ const CourseCurriculum: FC<CourseCurriculumProps> = (props: CourseCurriculumProp
6868
if (!isLoggedIn) {
6969
// add a flag to the return url to show the academic policy modal
7070
// or resume the course when they're back
71-
window.location.href = `${authUrlLogin}${encodeURIComponent('?start-course')}`
71+
window.location.href = authenticateAndStartCourseRoute
7272
return
7373
}
7474

src-ts/tools/learn/learn-lib/index.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
export * from './certifications-provider'
2+
export * from './resource-provider-provider'
23
export * from './collapsible-pane'
34
export * from './courses-provider'
45
export * from './curriculum-summary'
Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
export * from './resource-provider-functions'
2+
export * from './resource-provider-data.model'
3+
export * from './resource-provider.provider'
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
import { ResourceProvider } from './resource-provider-functions'
2+
3+
export interface ResourceProviderData {
4+
provider?: ResourceProvider
5+
loading: boolean
6+
ready: boolean
7+
}
Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
export * from './resource-provider.model'
2+
export * from './resource-provider.store'
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
export interface ResourceProvider {
2+
attributionStatement: string
3+
id: string
4+
url: string
5+
name: string
6+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
import { xhrGetAsync } from '../../../../../lib/functions'
2+
import { getPath } from '../../learn-url.config'
3+
import { ResourceProvider } from './resource-provider.model'
4+
5+
6+
export function getResourceProvidersAsync(): Promise<Array<ResourceProvider>|undefined> {
7+
return xhrGetAsync<Array<ResourceProvider>>(getPath(
8+
'providers'
9+
))
10+
}
Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
import { Dispatch, SetStateAction, useEffect, useState } from 'react'
2+
import { ResourceProviderData } from './resource-provider-data.model'
3+
import { getResourceProvidersAsync } from './resource-provider-functions/resource-provider.store'
4+
5+
export function useResourceProvider(providerName?: string): ResourceProviderData {
6+
const [state, setState]: [ResourceProviderData, Dispatch<SetStateAction<ResourceProviderData>>] = useState<ResourceProviderData>({
7+
loading: false,
8+
ready: false,
9+
})
10+
11+
useEffect(() => {
12+
if (!providerName) {
13+
setState((prevState) => ({
14+
...prevState,
15+
provider: undefined,
16+
loading: false,
17+
ready: false,
18+
}))
19+
return
20+
}
21+
22+
setState((prevState) => ({
23+
...prevState,
24+
loading: true,
25+
}))
26+
27+
getResourceProvidersAsync().then((providers) => {
28+
setState((prevState) => ({
29+
...prevState,
30+
provider: providers?.find(p => p.name === providerName),
31+
loading: false,
32+
ready: true,
33+
}))
34+
})
35+
}, [providerName])
36+
37+
return state
38+
}

src-ts/tools/learn/learn.routes.tsx

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import { PlatformRoute } from '../../lib'
1+
import { authUrlLogin, PlatformRoute } from '../../lib'
22

33
import { CourseCompletedPage } from './course-completed'
44
import { CourseDetailsPage } from './course-details'
@@ -32,6 +32,8 @@ export enum LEARN_PATHS {
3232
root = '/learn',
3333
}
3434

35+
export const authenticateAndStartCourseRoute: string = `${authUrlLogin}${encodeURIComponent('?start-course')}`
36+
3537
export const rootRoute: string = LEARN_PATHS.root
3638

3739
export const learnRoutes: Array<PlatformRoute> = [

0 commit comments

Comments
 (0)