diff --git a/src-ts/lib/profile-provider/profile-functions/profile-factory/user-role.enum.ts b/src-ts/lib/profile-provider/profile-functions/profile-factory/user-role.enum.ts index f56a29f43..a77ec1fef 100644 --- a/src-ts/lib/profile-provider/profile-functions/profile-factory/user-role.enum.ts +++ b/src-ts/lib/profile-provider/profile-functions/profile-factory/user-role.enum.ts @@ -2,4 +2,5 @@ export enum UserRole { gamificationAdmin = 'Gamification Admin', customer = 'Self-Service Customer', member = 'Topcoder User', + tcaAdmin = 'TCA Admin', } diff --git a/src-ts/tools/learn/free-code-camp/FreeCodeCamp.module.scss b/src-ts/tools/learn/free-code-camp/FreeCodeCamp.module.scss index 9aac4faaf..a857134e6 100644 --- a/src-ts/tools/learn/free-code-camp/FreeCodeCamp.module.scss +++ b/src-ts/tools/learn/free-code-camp/FreeCodeCamp.module.scss @@ -47,3 +47,23 @@ } } } + +.wrapBreadcrumb { + position: relative; + + .completeCourseBtn { + position: absolute; + right: $space-xxxxl; + bottom: $space-xl; + + @include ltesm { + right: $space-sm; + bottom: $space-md; + } + + @include md { + right: $space-sm; + bottom: $space-lg; + } + } +} \ No newline at end of file diff --git a/src-ts/tools/learn/free-code-camp/FreeCodeCamp.tsx b/src-ts/tools/learn/free-code-camp/FreeCodeCamp.tsx index e20942c9b..b00ed44f3 100644 --- a/src-ts/tools/learn/free-code-camp/FreeCodeCamp.tsx +++ b/src-ts/tools/learn/free-code-camp/FreeCodeCamp.tsx @@ -11,15 +11,19 @@ import { useState, } from 'react' import { NavigateFunction, Params, useNavigate, useParams } from 'react-router-dom' +import { toast, ToastContent } from 'react-toastify' import { Breadcrumb, BreadcrumbItemModel, + Button, LoadingSpinner, + logError, profileContext, ProfileContextData, surveyTriggerForUser, textFormatGetSafeString, + UserRole, } from '../../../lib' import { CoursesProviderData, @@ -33,6 +37,7 @@ import { useGetLesson, useGetUserCertificationProgress, useLearnBreadcrumb, + userCertificationProgressAutocompleteCourse, userCertificationProgressCompleteCourseAsync, UserCertificationProgressProviderData, userCertificationProgressStartAsync, @@ -465,10 +470,44 @@ const FreeCodeCamp: FC<{}> = () => { certificationParam, ]); + /** + * Complete course shortcut for admins + */ + function adminCompleteCourse(): void { + const confirmed = confirm('Hey, you\'re about to auto-complete this entire course. Are you sure?'); + + if (!certificateProgress?.id || !confirmed) { + return + } + + userCertificationProgressAutocompleteCourse(certificateProgress.id) + .then(setCertificateProgress) + .then(() => { + toast.info(

Yay, success! You completed the course.

) + }) + .catch(error => { + logError(error) + toast.error('Oops! We couldn\'t complete your request as some error happened. See console for more...') + }) + } + return ( <> - +
+ + { + lesson && profile?.roles?.includes(UserRole.tcaAdmin) && ( +
{lesson && (
diff --git a/src-ts/tools/learn/learn-lib/data-providers/user-certifications-provider/user-certifications-functions/index.ts b/src-ts/tools/learn/learn-lib/data-providers/user-certifications-provider/user-certifications-functions/index.ts index 6f670cd43..5f85c5c71 100644 --- a/src-ts/tools/learn/learn-lib/data-providers/user-certifications-provider/user-certifications-functions/index.ts +++ b/src-ts/tools/learn/learn-lib/data-providers/user-certifications-provider/user-certifications-functions/index.ts @@ -4,6 +4,7 @@ export * from './learn-module-status.enum' export * from './user-certification-progress-status.enum' export * from './user-certification-update-progress-actions.enum' export { + adminCompleteCourse as userCertificationProgressAutocompleteCourse, completeCourse as userCertificationProgressCompleteCourseAsync, startAsync as userCertificationProgressStartAsync, updateAsync as userCertificationProgressUpdateAsync, diff --git a/src-ts/tools/learn/learn-lib/data-providers/user-certifications-provider/user-certifications-functions/user-certification-progress.store.ts b/src-ts/tools/learn/learn-lib/data-providers/user-certifications-provider/user-certifications-functions/user-certification-progress.store.ts index e8481dde9..92c6754cb 100644 --- a/src-ts/tools/learn/learn-lib/data-providers/user-certifications-provider/user-certifications-functions/user-certification-progress.store.ts +++ b/src-ts/tools/learn/learn-lib/data-providers/user-certifications-provider/user-certifications-functions/user-certification-progress.store.ts @@ -7,6 +7,7 @@ import { LearnUserCertificationProgress } from './learn-user-certification-progr import { UserCertificationUpdateProgressActions } from './user-certification-update-progress-actions.enum' const certProgressPath: string = 'certification-progresses' +const certProgressShortcutPath = 'shortcut-fcc-course-completion' export function completeCourse( certificationProgressId: string, @@ -53,3 +54,12 @@ export function updateAsync( return learnXhrPutAsync<{}, LearnUserCertificationProgress>(url, {}, { params: data }) } + +export function adminCompleteCourse( + certificationProgressId: string, +): Promise { + + const url: string = learnUrlGet(certProgressShortcutPath, certificationProgressId) + + return learnXhrPutAsync<{}, any>(url, {}) +}