From 40b86157740fa46b2011a2a49b7e4fb24788c567 Mon Sep 17 00:00:00 2001 From: Vasilica Olariu Date: Tue, 25 Oct 2022 14:49:12 +0300 Subject: [PATCH 1/9] Config SWR for learn --- src-ts/tools/learn/Learn.tsx | 5 ++-- src-ts/tools/learn/learn-lib/index.ts | 1 + .../learn/learn-lib/learn-swr/LearnSwr.tsx | 23 +++++++++++++++++++ .../tools/learn/learn-lib/learn-swr/index.ts | 1 + 4 files changed, 28 insertions(+), 2 deletions(-) create mode 100644 src-ts/tools/learn/learn-lib/learn-swr/LearnSwr.tsx create mode 100644 src-ts/tools/learn/learn-lib/learn-swr/index.ts diff --git a/src-ts/tools/learn/Learn.tsx b/src-ts/tools/learn/Learn.tsx index 6a7b52d31..a134539e9 100644 --- a/src-ts/tools/learn/Learn.tsx +++ b/src-ts/tools/learn/Learn.tsx @@ -6,6 +6,7 @@ import { routeContext, RouteContextData, } from '../../lib' +import { LearnSwr } from './learn-lib' export const toolTitle: string = ToolTitle.learn @@ -14,12 +15,12 @@ const Learn: FC<{}> = () => { const { getChildRoutes }: RouteContextData = useContext(routeContext) return ( - <> + {getChildRoutes(toolTitle)} - + ) } diff --git a/src-ts/tools/learn/learn-lib/index.ts b/src-ts/tools/learn/learn-lib/index.ts index ccec7d560..ec7692e7e 100755 --- a/src-ts/tools/learn/learn-lib/index.ts +++ b/src-ts/tools/learn/learn-lib/index.ts @@ -6,6 +6,7 @@ export * from './course-title' export * from './courses-provider' export * from './curriculum-summary' export * from './learn-breadcrumb-provider' +export * from './learn-swr' export * from './lesson-provider' export * from './my-course-card' export * from './resource-provider-provider' diff --git a/src-ts/tools/learn/learn-lib/learn-swr/LearnSwr.tsx b/src-ts/tools/learn/learn-lib/learn-swr/LearnSwr.tsx new file mode 100644 index 000000000..5710acecf --- /dev/null +++ b/src-ts/tools/learn/learn-lib/learn-swr/LearnSwr.tsx @@ -0,0 +1,23 @@ +import { FC, ReactNode } from 'react' +import { SWRConfig } from 'swr' + +import { learnXhrGetAsync } from '../functions' + +interface LearnSwrProps { + children: ReactNode +} + +const LearnSwr: FC = (props: LearnSwrProps) => { + + return ( + learnXhrGetAsync(resource), + }} + > + {props.children} + + ) +} + +export default LearnSwr diff --git a/src-ts/tools/learn/learn-lib/learn-swr/index.ts b/src-ts/tools/learn/learn-lib/learn-swr/index.ts new file mode 100644 index 000000000..710f62330 --- /dev/null +++ b/src-ts/tools/learn/learn-lib/learn-swr/index.ts @@ -0,0 +1 @@ +export { default as LearnSwr } from './LearnSwr' From 6eee21f0d298809adc4f8e0441c13790158545fb Mon Sep 17 00:00:00 2001 From: Vasilica Olariu Date: Tue, 25 Oct 2022 14:57:16 +0300 Subject: [PATCH 2/9] TCA-590 - update all-certifications-provider to use SWR --- .../certificate-view/CertificateView.tsx | 6 +- .../course-completed/CourseCompletedPage.tsx | 6 +- .../course-details/CourseDetailsPage.tsx | 6 +- .../all-certifications.store.ts | 16 ---- .../all-certifications-functions/index.ts | 5 -- .../all-certifications-provider-data.model.ts | 3 +- .../all-certifications.provider.tsx | 80 ++++++++++--------- .../all-certifications-provider/index.ts | 3 +- .../learn-certificate-track-type.ts | 0 .../learn-certification.model.ts | 0 src-ts/tools/learn/my-learning/MyLearning.tsx | 4 +- src-ts/tools/learn/welcome/WelcomePage.tsx | 4 +- 12 files changed, 61 insertions(+), 72 deletions(-) delete mode 100755 src-ts/tools/learn/learn-lib/all-certifications-provider/all-certifications-functions/all-certifications.store.ts delete mode 100755 src-ts/tools/learn/learn-lib/all-certifications-provider/all-certifications-functions/index.ts rename src-ts/tools/learn/learn-lib/all-certifications-provider/{all-certifications-functions => }/learn-certificate-track-type.ts (100%) rename src-ts/tools/learn/learn-lib/all-certifications-provider/{all-certifications-functions => }/learn-certification.model.ts (100%) diff --git a/src-ts/tools/learn/course-certificate/certificate-view/CertificateView.tsx b/src-ts/tools/learn/course-certificate/certificate-view/CertificateView.tsx index 3fb376920..161c80c84 100644 --- a/src-ts/tools/learn/course-certificate/certificate-view/CertificateView.tsx +++ b/src-ts/tools/learn/course-certificate/certificate-view/CertificateView.tsx @@ -15,7 +15,7 @@ import { import { AllCertificationsProviderData, CoursesProviderData, - useAllCertifications, + useGetCertification, useCourses, UserCompletedCertificationsProviderData, useUserCompletedCertifications, @@ -82,9 +82,9 @@ const CertificateView: FC = (props: CertificateViewProps) const { certification: certificate, ready: certificateReady, - }: AllCertificationsProviderData = useAllCertifications( + }: AllCertificationsProviderData = useGetCertification( props.provider, - course?.certificationId, + course?.certificationId ?? '', { enabled: !!course?.certificationId } ) diff --git a/src-ts/tools/learn/course-completed/CourseCompletedPage.tsx b/src-ts/tools/learn/course-completed/CourseCompletedPage.tsx index cfb81ec4d..b45299573 100755 --- a/src-ts/tools/learn/course-completed/CourseCompletedPage.tsx +++ b/src-ts/tools/learn/course-completed/CourseCompletedPage.tsx @@ -14,7 +14,7 @@ import { AllCertificationsProviderData, CoursesProviderData, CourseTitle, - useAllCertifications, + useGetCertification, useCourses, useLearnBreadcrumb, UserCertificationProgressProviderData, @@ -52,8 +52,8 @@ const CourseCompletedPage: FC<{}> = () => { const { certification, ready: certifReady, - }: AllCertificationsProviderData = useAllCertifications(providerParam, progress?.certificationId, { - enabled: progressReady && !!progress, + }: AllCertificationsProviderData = useGetCertification(providerParam, progress?.certificationId ?? '', { + enabled: progressReady && !!progress?.certificationId, }) /* tslint:disable:cyclomatic-complexity */ diff --git a/src-ts/tools/learn/course-details/CourseDetailsPage.tsx b/src-ts/tools/learn/course-details/CourseDetailsPage.tsx index 1795fecfd..8cc7d70d9 100644 --- a/src-ts/tools/learn/course-details/CourseDetailsPage.tsx +++ b/src-ts/tools/learn/course-details/CourseDetailsPage.tsx @@ -15,7 +15,7 @@ import { CoursesProviderData, CourseTitle, ResourceProviderData, - useAllCertifications, + useGetCertification, useCourses, useLearnBreadcrumb, UserCertificationProgressProviderData, @@ -55,8 +55,8 @@ const CourseDetailsPage: FC<{}> = () => { const { certification: certificate, ready: certificateReady, - }: AllCertificationsProviderData = useAllCertifications(routeParams.provider, course?.certificationId, { - enabled: courseReady, + }: AllCertificationsProviderData = useGetCertification(routeParams.provider, course?.certificationId ?? '', { + enabled: courseReady && !!course?.certificationId, }) // this looks better than finding workarounds for cyclomatic-complexity diff --git a/src-ts/tools/learn/learn-lib/all-certifications-provider/all-certifications-functions/all-certifications.store.ts b/src-ts/tools/learn/learn-lib/all-certifications-provider/all-certifications-functions/all-certifications.store.ts deleted file mode 100755 index c10906b3b..000000000 --- a/src-ts/tools/learn/learn-lib/all-certifications-provider/all-certifications-functions/all-certifications.store.ts +++ /dev/null @@ -1,16 +0,0 @@ -import { learnUrlGet, learnXhrGetAsync } from '../../functions' - -import { LearnCertification } from './learn-certification.model' - -export function getAsync( - providerName: string = 'freeCodeCamp', - certificationId?: string -): Promise> { - - const url: string = learnUrlGet( - 'certifications', - ...(certificationId ? [certificationId] : []), - `?providerName=${providerName}` - ) - return learnXhrGetAsync>(url) -} diff --git a/src-ts/tools/learn/learn-lib/all-certifications-provider/all-certifications-functions/index.ts b/src-ts/tools/learn/learn-lib/all-certifications-provider/all-certifications-functions/index.ts deleted file mode 100755 index a6d1bb07a..000000000 --- a/src-ts/tools/learn/learn-lib/all-certifications-provider/all-certifications-functions/index.ts +++ /dev/null @@ -1,5 +0,0 @@ -export { - getAsync as allCertificationsGetAsync, -} from './all-certifications.store' -export * from './learn-certification.model' -export * from './learn-certificate-track-type' diff --git a/src-ts/tools/learn/learn-lib/all-certifications-provider/all-certifications-provider-data.model.ts b/src-ts/tools/learn/learn-lib/all-certifications-provider/all-certifications-provider-data.model.ts index 6c5dcb1b1..072f5d306 100755 --- a/src-ts/tools/learn/learn-lib/all-certifications-provider/all-certifications-provider-data.model.ts +++ b/src-ts/tools/learn/learn-lib/all-certifications-provider/all-certifications-provider-data.model.ts @@ -1,8 +1,9 @@ -import { LearnCertification } from './all-certifications-functions' +import { LearnCertification } from "./learn-certification.model" export interface AllCertificationsProviderData { certification?: LearnCertification certifications: Array loading: boolean ready: boolean + error: boolean } diff --git a/src-ts/tools/learn/learn-lib/all-certifications-provider/all-certifications.provider.tsx b/src-ts/tools/learn/learn-lib/all-certifications-provider/all-certifications.provider.tsx index ed27651e5..d055ca0ca 100644 --- a/src-ts/tools/learn/learn-lib/all-certifications-provider/all-certifications.provider.tsx +++ b/src-ts/tools/learn/learn-lib/all-certifications-provider/all-certifications.provider.tsx @@ -1,46 +1,54 @@ -import { Dispatch, SetStateAction, useEffect, useState } from 'react' +import useSWR, { SWRResponse } from 'swr' +import { learnUrlGet } from '../functions' -import { allCertificationsGetAsync, LearnCertification } from './all-certifications-functions' import { AllCertificationsProviderData } from './all-certifications-provider-data.model' interface CertificationsAllProviderOptions { enabled?: boolean } -export function useAllCertifications( - provider?: string, - certificationId?: string, +export function useGetAllCertifications( + providerName: string = 'freeCodeCamp', options?: CertificationsAllProviderOptions ): AllCertificationsProviderData { - const [state, setState]: - [AllCertificationsProviderData, Dispatch>] - = useState({ - certifications: [], - loading: false, - ready: false, - }) - - useEffect(() => { - setState((prevState) => ({ - ...prevState, - loading: true, - })) - - if (options?.enabled === false) { - return - } - - allCertificationsGetAsync(provider, certificationId) - .then((certifications) => { - setState((prevState) => ({ - ...prevState, - certification: !certificationId ? undefined : certifications as unknown as LearnCertification, - certifications: certificationId ? [] : [...certifications], - loading: false, - ready: true, - })) - }) - }, [provider, certificationId, options?.enabled]) - - return state + + const url: string = learnUrlGet( + 'certifications', + `?providerName=${providerName}&test=true` + ) + + const {data, error}: SWRResponse = useSWR(url, { + isPaused: () => options?.enabled === false + }) + + return { + certifications: data ?? [], + loading: !data, + ready: !!data, + error: !!error, + } +} + +export function useGetCertification( + providerName: string = 'freeCodeCamp', + certificationId: string, + options?: CertificationsAllProviderOptions +): AllCertificationsProviderData { + + const url: string = learnUrlGet( + 'certifications', + certificationId, + `?providerName=${providerName}` + ) + + const {data, error}: SWRResponse = useSWR(url, { + isPaused: () => options?.enabled === false + }) + return { + certifications: [], + certification: data ?? undefined, + loading: !data, + ready: !!data, + error: !!error, + } } diff --git a/src-ts/tools/learn/learn-lib/all-certifications-provider/index.ts b/src-ts/tools/learn/learn-lib/all-certifications-provider/index.ts index f8e61f839..02ae1d59d 100755 --- a/src-ts/tools/learn/learn-lib/all-certifications-provider/index.ts +++ b/src-ts/tools/learn/learn-lib/all-certifications-provider/index.ts @@ -1,3 +1,4 @@ -export * from './all-certifications-functions' export * from './all-certifications-provider-data.model' export * from './all-certifications.provider' +export * from './learn-certificate-track-type' +export * from './learn-certification.model' diff --git a/src-ts/tools/learn/learn-lib/all-certifications-provider/all-certifications-functions/learn-certificate-track-type.ts b/src-ts/tools/learn/learn-lib/all-certifications-provider/learn-certificate-track-type.ts similarity index 100% rename from src-ts/tools/learn/learn-lib/all-certifications-provider/all-certifications-functions/learn-certificate-track-type.ts rename to src-ts/tools/learn/learn-lib/all-certifications-provider/learn-certificate-track-type.ts diff --git a/src-ts/tools/learn/learn-lib/all-certifications-provider/all-certifications-functions/learn-certification.model.ts b/src-ts/tools/learn/learn-lib/all-certifications-provider/learn-certification.model.ts similarity index 100% rename from src-ts/tools/learn/learn-lib/all-certifications-provider/all-certifications-functions/learn-certification.model.ts rename to src-ts/tools/learn/learn-lib/all-certifications-provider/learn-certification.model.ts diff --git a/src-ts/tools/learn/my-learning/MyLearning.tsx b/src-ts/tools/learn/my-learning/MyLearning.tsx index b97350f30..3d24802e6 100755 --- a/src-ts/tools/learn/my-learning/MyLearning.tsx +++ b/src-ts/tools/learn/my-learning/MyLearning.tsx @@ -4,7 +4,7 @@ import { Breadcrumb, BreadcrumbItemModel, ContentLayout, LoadingSpinner, Portal, import { AllCertificationsProviderData, LearnCertification, - useAllCertifications, + useGetAllCertifications, useLearnBreadcrumb, UserCertificationsProviderData, useUserCertifications, @@ -26,7 +26,7 @@ const MyLearning: FC<{}> = () => { const { profile, initialized: profileReady }: ProfileContextData = useContext(profileContext) const { completed, inProgress, ready: coursesReady }: UserCertificationsProviderData = useUserCertifications() - const { certifications, ready: certificatesReady }: AllCertificationsProviderData = useAllCertifications() + const { certifications, ready: certificatesReady }: AllCertificationsProviderData = useGetAllCertifications() const [activeTab, setActiveTab]: [MyTabsViews|undefined, Dispatch>] = useState() const ready: boolean = profileReady && coursesReady && certificatesReady diff --git a/src-ts/tools/learn/welcome/WelcomePage.tsx b/src-ts/tools/learn/welcome/WelcomePage.tsx index ac36d3356..75c75a4d4 100644 --- a/src-ts/tools/learn/welcome/WelcomePage.tsx +++ b/src-ts/tools/learn/welcome/WelcomePage.tsx @@ -5,7 +5,7 @@ import { ContentLayout, LoadingSpinner, Portal } from '../../../lib' import '../../../lib/styles/index.scss' import { AllCertificationsProviderData, - useAllCertifications, + useGetAllCertifications, UserCertificationsProviderData, useUserCertifications, WaveHero, @@ -18,7 +18,7 @@ import styles from './WelcomePage.module.scss' const WelcomePage: FC<{}> = () => { - const allCertsData: AllCertificationsProviderData = useAllCertifications() + const allCertsData: AllCertificationsProviderData = useGetAllCertifications() const userCertsData: UserCertificationsProviderData = useUserCertifications() const coursesReady: boolean = allCertsData.ready && userCertsData.ready From 8219a3aed8a1ae28a2f9f467ba7def9d0f018877 Mon Sep 17 00:00:00 2001 From: Vasilica Olariu Date: Tue, 25 Oct 2022 15:06:10 +0300 Subject: [PATCH 3/9] TCA-590 - move all learn data providers to separate folder --- .../all-certifications-provider-data.model.ts | 0 .../all-certifications.provider.tsx | 2 +- .../all-certifications-provider/index.ts | 0 .../learn-certificate-track-type.ts | 0 .../learn-certification.model.ts | 0 .../courses-provider/courses-functions/course.store.ts | 2 +- .../courses-provider/courses-functions/index.ts | 0 .../courses-functions/learn-course.model.ts | 2 +- .../courses-provider/courses-provider-data.model.ts | 0 .../courses-provider/courses.provider.tsx | 0 .../{ => data-providers}/courses-provider/index.ts | 0 src-ts/tools/learn/learn-lib/data-providers/index.ts | 6 ++++++ .../{ => data-providers}/lesson-provider/index.ts | 0 .../lesson-provider/learn-lesson-meta.model.ts | 0 .../lesson-provider/learn-lesson.model.ts | 0 .../lesson-provider/learn-module-meta.model.ts | 0 .../lesson-provider/learn-module.model.ts | 0 .../lesson-provider/lesson-provider-data.model.ts | 0 .../lesson-provider/lesson.provider.tsx | 0 .../resource-provider-provider/index.ts | 0 .../resource-provider-data.model.ts | 0 .../resource-provider-functions/index.ts | 0 .../resource-provider-functions/resource-provider.model.ts | 2 +- .../resource-provider-functions/resource-provider.store.ts | 2 +- .../resource-provider.provider.tsx | 0 .../user-certifications-provider/index.ts | 0 .../user-certification-completed.model.ts | 0 .../user-certification-in-progress.model.ts | 0 .../user-certification-progress-provider-data.model.ts | 0 .../user-certification-progress.provider.tsx | 0 .../user-certifications-functions/index.ts | 0 .../learn-module-progress.model.ts | 0 .../learn-user-certification-progress.model.ts | 2 +- .../user-certification-progress-status.enum.ts | 0 .../user-certification-progress.store.ts | 6 +++--- .../user-certification-update-progress-actions.enum.ts | 0 .../user-certifications-provider-data.model.ts | 0 .../user-certifications.provider.tsx | 2 +- .../user-completed-certifications-provider/index.ts | 0 .../user-completed-certifications-functions/index.ts | 0 .../user-completed-certification.model.ts | 2 +- .../user-completed-certification.store.ts | 2 +- .../user-completed-certifications-provider-data.model.ts | 0 .../user-completed-certifications.provider.tsx | 0 src-ts/tools/learn/learn-lib/index.ts | 7 +------ 45 files changed, 19 insertions(+), 18 deletions(-) rename src-ts/tools/learn/learn-lib/{ => data-providers}/all-certifications-provider/all-certifications-provider-data.model.ts (100%) mode change 100755 => 100644 rename src-ts/tools/learn/learn-lib/{ => data-providers}/all-certifications-provider/all-certifications.provider.tsx (96%) rename src-ts/tools/learn/learn-lib/{ => data-providers}/all-certifications-provider/index.ts (100%) mode change 100755 => 100644 rename src-ts/tools/learn/learn-lib/{ => data-providers}/all-certifications-provider/learn-certificate-track-type.ts (100%) rename src-ts/tools/learn/learn-lib/{ => data-providers}/all-certifications-provider/learn-certification.model.ts (100%) rename src-ts/tools/learn/learn-lib/{ => data-providers}/courses-provider/courses-functions/course.store.ts (84%) mode change 100755 => 100644 rename src-ts/tools/learn/learn-lib/{ => data-providers}/courses-provider/courses-functions/index.ts (100%) mode change 100755 => 100644 rename src-ts/tools/learn/learn-lib/{ => data-providers}/courses-provider/courses-functions/learn-course.model.ts (90%) rename src-ts/tools/learn/learn-lib/{ => data-providers}/courses-provider/courses-provider-data.model.ts (100%) mode change 100755 => 100644 rename src-ts/tools/learn/learn-lib/{ => data-providers}/courses-provider/courses.provider.tsx (100%) rename src-ts/tools/learn/learn-lib/{ => data-providers}/courses-provider/index.ts (100%) mode change 100755 => 100644 create mode 100644 src-ts/tools/learn/learn-lib/data-providers/index.ts rename src-ts/tools/learn/learn-lib/{ => data-providers}/lesson-provider/index.ts (100%) mode change 100755 => 100644 rename src-ts/tools/learn/learn-lib/{ => data-providers}/lesson-provider/learn-lesson-meta.model.ts (100%) rename src-ts/tools/learn/learn-lib/{ => data-providers}/lesson-provider/learn-lesson.model.ts (100%) rename src-ts/tools/learn/learn-lib/{ => data-providers}/lesson-provider/learn-module-meta.model.ts (100%) rename src-ts/tools/learn/learn-lib/{ => data-providers}/lesson-provider/learn-module.model.ts (100%) rename src-ts/tools/learn/learn-lib/{ => data-providers}/lesson-provider/lesson-provider-data.model.ts (100%) mode change 100755 => 100644 rename src-ts/tools/learn/learn-lib/{ => data-providers}/lesson-provider/lesson.provider.tsx (100%) rename src-ts/tools/learn/learn-lib/{ => data-providers}/resource-provider-provider/index.ts (100%) mode change 100755 => 100644 rename src-ts/tools/learn/learn-lib/{ => data-providers}/resource-provider-provider/resource-provider-data.model.ts (100%) mode change 100755 => 100644 rename src-ts/tools/learn/learn-lib/{ => data-providers}/resource-provider-provider/resource-provider-functions/index.ts (100%) mode change 100755 => 100644 rename src-ts/tools/learn/learn-lib/{ => data-providers}/resource-provider-provider/resource-provider-functions/resource-provider.model.ts (73%) mode change 100755 => 100644 rename src-ts/tools/learn/learn-lib/{ => data-providers}/resource-provider-provider/resource-provider-functions/resource-provider.store.ts (79%) mode change 100755 => 100644 rename src-ts/tools/learn/learn-lib/{ => data-providers}/resource-provider-provider/resource-provider.provider.tsx (100%) mode change 100755 => 100644 rename src-ts/tools/learn/learn-lib/{ => data-providers}/user-certifications-provider/index.ts (100%) mode change 100755 => 100644 rename src-ts/tools/learn/learn-lib/{ => data-providers}/user-certifications-provider/user-certification-completed.model.ts (100%) rename src-ts/tools/learn/learn-lib/{ => data-providers}/user-certifications-provider/user-certification-in-progress.model.ts (100%) rename src-ts/tools/learn/learn-lib/{ => data-providers}/user-certifications-provider/user-certification-progress-provider-data.model.ts (100%) mode change 100755 => 100644 rename src-ts/tools/learn/learn-lib/{ => data-providers}/user-certifications-provider/user-certification-progress.provider.tsx (100%) rename src-ts/tools/learn/learn-lib/{ => data-providers}/user-certifications-provider/user-certifications-functions/index.ts (100%) mode change 100755 => 100644 rename src-ts/tools/learn/learn-lib/{ => data-providers}/user-certifications-provider/user-certifications-functions/learn-module-progress.model.ts (100%) rename src-ts/tools/learn/learn-lib/{ => data-providers}/user-certifications-provider/user-certifications-functions/learn-user-certification-progress.model.ts (92%) rename src-ts/tools/learn/learn-lib/{ => data-providers}/user-certifications-provider/user-certifications-functions/user-certification-progress-status.enum.ts (100%) mode change 100755 => 100644 rename src-ts/tools/learn/learn-lib/{ => data-providers}/user-certifications-provider/user-certifications-functions/user-certification-progress.store.ts (93%) mode change 100755 => 100644 rename src-ts/tools/learn/learn-lib/{ => data-providers}/user-certifications-provider/user-certifications-functions/user-certification-update-progress-actions.enum.ts (100%) rename src-ts/tools/learn/learn-lib/{ => data-providers}/user-certifications-provider/user-certifications-provider-data.model.ts (100%) mode change 100755 => 100644 rename src-ts/tools/learn/learn-lib/{ => data-providers}/user-certifications-provider/user-certifications.provider.tsx (99%) rename src-ts/tools/learn/learn-lib/{ => data-providers}/user-completed-certifications-provider/index.ts (100%) rename src-ts/tools/learn/learn-lib/{ => data-providers}/user-completed-certifications-provider/user-completed-certifications-functions/index.ts (100%) rename src-ts/tools/learn/learn-lib/{ => data-providers}/user-completed-certifications-provider/user-completed-certifications-functions/user-completed-certification.model.ts (91%) rename src-ts/tools/learn/learn-lib/{ => data-providers}/user-completed-certifications-provider/user-completed-certifications-functions/user-completed-certification.store.ts (83%) rename src-ts/tools/learn/learn-lib/{ => data-providers}/user-completed-certifications-provider/user-completed-certifications-provider-data.model.ts (100%) rename src-ts/tools/learn/learn-lib/{ => data-providers}/user-completed-certifications-provider/user-completed-certifications.provider.tsx (100%) diff --git a/src-ts/tools/learn/learn-lib/all-certifications-provider/all-certifications-provider-data.model.ts b/src-ts/tools/learn/learn-lib/data-providers/all-certifications-provider/all-certifications-provider-data.model.ts old mode 100755 new mode 100644 similarity index 100% rename from src-ts/tools/learn/learn-lib/all-certifications-provider/all-certifications-provider-data.model.ts rename to src-ts/tools/learn/learn-lib/data-providers/all-certifications-provider/all-certifications-provider-data.model.ts diff --git a/src-ts/tools/learn/learn-lib/all-certifications-provider/all-certifications.provider.tsx b/src-ts/tools/learn/learn-lib/data-providers/all-certifications-provider/all-certifications.provider.tsx similarity index 96% rename from src-ts/tools/learn/learn-lib/all-certifications-provider/all-certifications.provider.tsx rename to src-ts/tools/learn/learn-lib/data-providers/all-certifications-provider/all-certifications.provider.tsx index d055ca0ca..a626b7172 100644 --- a/src-ts/tools/learn/learn-lib/all-certifications-provider/all-certifications.provider.tsx +++ b/src-ts/tools/learn/learn-lib/data-providers/all-certifications-provider/all-certifications.provider.tsx @@ -1,5 +1,5 @@ import useSWR, { SWRResponse } from 'swr' -import { learnUrlGet } from '../functions' +import { learnUrlGet } from '../../functions' import { AllCertificationsProviderData } from './all-certifications-provider-data.model' diff --git a/src-ts/tools/learn/learn-lib/all-certifications-provider/index.ts b/src-ts/tools/learn/learn-lib/data-providers/all-certifications-provider/index.ts old mode 100755 new mode 100644 similarity index 100% rename from src-ts/tools/learn/learn-lib/all-certifications-provider/index.ts rename to src-ts/tools/learn/learn-lib/data-providers/all-certifications-provider/index.ts diff --git a/src-ts/tools/learn/learn-lib/all-certifications-provider/learn-certificate-track-type.ts b/src-ts/tools/learn/learn-lib/data-providers/all-certifications-provider/learn-certificate-track-type.ts similarity index 100% rename from src-ts/tools/learn/learn-lib/all-certifications-provider/learn-certificate-track-type.ts rename to src-ts/tools/learn/learn-lib/data-providers/all-certifications-provider/learn-certificate-track-type.ts diff --git a/src-ts/tools/learn/learn-lib/all-certifications-provider/learn-certification.model.ts b/src-ts/tools/learn/learn-lib/data-providers/all-certifications-provider/learn-certification.model.ts similarity index 100% rename from src-ts/tools/learn/learn-lib/all-certifications-provider/learn-certification.model.ts rename to src-ts/tools/learn/learn-lib/data-providers/all-certifications-provider/learn-certification.model.ts diff --git a/src-ts/tools/learn/learn-lib/courses-provider/courses-functions/course.store.ts b/src-ts/tools/learn/learn-lib/data-providers/courses-provider/courses-functions/course.store.ts old mode 100755 new mode 100644 similarity index 84% rename from src-ts/tools/learn/learn-lib/courses-provider/courses-functions/course.store.ts rename to src-ts/tools/learn/learn-lib/data-providers/courses-provider/courses-functions/course.store.ts index 91975316a..58c40c711 --- a/src-ts/tools/learn/learn-lib/courses-provider/courses-functions/course.store.ts +++ b/src-ts/tools/learn/learn-lib/data-providers/courses-provider/courses-functions/course.store.ts @@ -1,4 +1,4 @@ -import { learnUrlGet, learnXhrGetAsync } from '../../functions' +import { learnUrlGet, learnXhrGetAsync } from '../../../functions' import { LearnCourse } from './learn-course.model' diff --git a/src-ts/tools/learn/learn-lib/courses-provider/courses-functions/index.ts b/src-ts/tools/learn/learn-lib/data-providers/courses-provider/courses-functions/index.ts old mode 100755 new mode 100644 similarity index 100% rename from src-ts/tools/learn/learn-lib/courses-provider/courses-functions/index.ts rename to src-ts/tools/learn/learn-lib/data-providers/courses-provider/courses-functions/index.ts diff --git a/src-ts/tools/learn/learn-lib/courses-provider/courses-functions/learn-course.model.ts b/src-ts/tools/learn/learn-lib/data-providers/courses-provider/courses-functions/learn-course.model.ts similarity index 90% rename from src-ts/tools/learn/learn-lib/courses-provider/courses-functions/learn-course.model.ts rename to src-ts/tools/learn/learn-lib/data-providers/courses-provider/courses-functions/learn-course.model.ts index b9c7010a4..ff8fa29db 100644 --- a/src-ts/tools/learn/learn-lib/courses-provider/courses-functions/learn-course.model.ts +++ b/src-ts/tools/learn/learn-lib/data-providers/courses-provider/courses-functions/learn-course.model.ts @@ -1,4 +1,4 @@ -import { LearnModelBase } from '../../functions' +import { LearnModelBase } from '../../../functions' import { LearnModule } from '../../lesson-provider' export interface LearnCourse extends LearnModelBase { diff --git a/src-ts/tools/learn/learn-lib/courses-provider/courses-provider-data.model.ts b/src-ts/tools/learn/learn-lib/data-providers/courses-provider/courses-provider-data.model.ts old mode 100755 new mode 100644 similarity index 100% rename from src-ts/tools/learn/learn-lib/courses-provider/courses-provider-data.model.ts rename to src-ts/tools/learn/learn-lib/data-providers/courses-provider/courses-provider-data.model.ts diff --git a/src-ts/tools/learn/learn-lib/courses-provider/courses.provider.tsx b/src-ts/tools/learn/learn-lib/data-providers/courses-provider/courses.provider.tsx similarity index 100% rename from src-ts/tools/learn/learn-lib/courses-provider/courses.provider.tsx rename to src-ts/tools/learn/learn-lib/data-providers/courses-provider/courses.provider.tsx diff --git a/src-ts/tools/learn/learn-lib/courses-provider/index.ts b/src-ts/tools/learn/learn-lib/data-providers/courses-provider/index.ts old mode 100755 new mode 100644 similarity index 100% rename from src-ts/tools/learn/learn-lib/courses-provider/index.ts rename to src-ts/tools/learn/learn-lib/data-providers/courses-provider/index.ts diff --git a/src-ts/tools/learn/learn-lib/data-providers/index.ts b/src-ts/tools/learn/learn-lib/data-providers/index.ts new file mode 100644 index 000000000..ae66884e9 --- /dev/null +++ b/src-ts/tools/learn/learn-lib/data-providers/index.ts @@ -0,0 +1,6 @@ +export * from './all-certifications-provider' +export * from './courses-provider' +export * from './lesson-provider' +export * from './resource-provider-provider' +export * from './user-certifications-provider' +export * from './user-completed-certifications-provider' diff --git a/src-ts/tools/learn/learn-lib/lesson-provider/index.ts b/src-ts/tools/learn/learn-lib/data-providers/lesson-provider/index.ts old mode 100755 new mode 100644 similarity index 100% rename from src-ts/tools/learn/learn-lib/lesson-provider/index.ts rename to src-ts/tools/learn/learn-lib/data-providers/lesson-provider/index.ts diff --git a/src-ts/tools/learn/learn-lib/lesson-provider/learn-lesson-meta.model.ts b/src-ts/tools/learn/learn-lib/data-providers/lesson-provider/learn-lesson-meta.model.ts similarity index 100% rename from src-ts/tools/learn/learn-lib/lesson-provider/learn-lesson-meta.model.ts rename to src-ts/tools/learn/learn-lib/data-providers/lesson-provider/learn-lesson-meta.model.ts diff --git a/src-ts/tools/learn/learn-lib/lesson-provider/learn-lesson.model.ts b/src-ts/tools/learn/learn-lib/data-providers/lesson-provider/learn-lesson.model.ts similarity index 100% rename from src-ts/tools/learn/learn-lib/lesson-provider/learn-lesson.model.ts rename to src-ts/tools/learn/learn-lib/data-providers/lesson-provider/learn-lesson.model.ts diff --git a/src-ts/tools/learn/learn-lib/lesson-provider/learn-module-meta.model.ts b/src-ts/tools/learn/learn-lib/data-providers/lesson-provider/learn-module-meta.model.ts similarity index 100% rename from src-ts/tools/learn/learn-lib/lesson-provider/learn-module-meta.model.ts rename to src-ts/tools/learn/learn-lib/data-providers/lesson-provider/learn-module-meta.model.ts diff --git a/src-ts/tools/learn/learn-lib/lesson-provider/learn-module.model.ts b/src-ts/tools/learn/learn-lib/data-providers/lesson-provider/learn-module.model.ts similarity index 100% rename from src-ts/tools/learn/learn-lib/lesson-provider/learn-module.model.ts rename to src-ts/tools/learn/learn-lib/data-providers/lesson-provider/learn-module.model.ts diff --git a/src-ts/tools/learn/learn-lib/lesson-provider/lesson-provider-data.model.ts b/src-ts/tools/learn/learn-lib/data-providers/lesson-provider/lesson-provider-data.model.ts old mode 100755 new mode 100644 similarity index 100% rename from src-ts/tools/learn/learn-lib/lesson-provider/lesson-provider-data.model.ts rename to src-ts/tools/learn/learn-lib/data-providers/lesson-provider/lesson-provider-data.model.ts diff --git a/src-ts/tools/learn/learn-lib/lesson-provider/lesson.provider.tsx b/src-ts/tools/learn/learn-lib/data-providers/lesson-provider/lesson.provider.tsx similarity index 100% rename from src-ts/tools/learn/learn-lib/lesson-provider/lesson.provider.tsx rename to src-ts/tools/learn/learn-lib/data-providers/lesson-provider/lesson.provider.tsx diff --git a/src-ts/tools/learn/learn-lib/resource-provider-provider/index.ts b/src-ts/tools/learn/learn-lib/data-providers/resource-provider-provider/index.ts old mode 100755 new mode 100644 similarity index 100% rename from src-ts/tools/learn/learn-lib/resource-provider-provider/index.ts rename to src-ts/tools/learn/learn-lib/data-providers/resource-provider-provider/index.ts diff --git a/src-ts/tools/learn/learn-lib/resource-provider-provider/resource-provider-data.model.ts b/src-ts/tools/learn/learn-lib/data-providers/resource-provider-provider/resource-provider-data.model.ts old mode 100755 new mode 100644 similarity index 100% rename from src-ts/tools/learn/learn-lib/resource-provider-provider/resource-provider-data.model.ts rename to src-ts/tools/learn/learn-lib/data-providers/resource-provider-provider/resource-provider-data.model.ts diff --git a/src-ts/tools/learn/learn-lib/resource-provider-provider/resource-provider-functions/index.ts b/src-ts/tools/learn/learn-lib/data-providers/resource-provider-provider/resource-provider-functions/index.ts old mode 100755 new mode 100644 similarity index 100% rename from src-ts/tools/learn/learn-lib/resource-provider-provider/resource-provider-functions/index.ts rename to src-ts/tools/learn/learn-lib/data-providers/resource-provider-provider/resource-provider-functions/index.ts diff --git a/src-ts/tools/learn/learn-lib/resource-provider-provider/resource-provider-functions/resource-provider.model.ts b/src-ts/tools/learn/learn-lib/data-providers/resource-provider-provider/resource-provider-functions/resource-provider.model.ts old mode 100755 new mode 100644 similarity index 73% rename from src-ts/tools/learn/learn-lib/resource-provider-provider/resource-provider-functions/resource-provider.model.ts rename to src-ts/tools/learn/learn-lib/data-providers/resource-provider-provider/resource-provider-functions/resource-provider.model.ts index df6ca66b2..255779d75 --- a/src-ts/tools/learn/learn-lib/resource-provider-provider/resource-provider-functions/resource-provider.model.ts +++ b/src-ts/tools/learn/learn-lib/data-providers/resource-provider-provider/resource-provider-functions/resource-provider.model.ts @@ -1,4 +1,4 @@ -import { LearnModelBase } from '../../functions' +import { LearnModelBase } from '../../../functions' export interface ResourceProvider extends LearnModelBase { attributionStatement: string diff --git a/src-ts/tools/learn/learn-lib/resource-provider-provider/resource-provider-functions/resource-provider.store.ts b/src-ts/tools/learn/learn-lib/data-providers/resource-provider-provider/resource-provider-functions/resource-provider.store.ts old mode 100755 new mode 100644 similarity index 79% rename from src-ts/tools/learn/learn-lib/resource-provider-provider/resource-provider-functions/resource-provider.store.ts rename to src-ts/tools/learn/learn-lib/data-providers/resource-provider-provider/resource-provider-functions/resource-provider.store.ts index f845874d3..73f24559f --- a/src-ts/tools/learn/learn-lib/resource-provider-provider/resource-provider-functions/resource-provider.store.ts +++ b/src-ts/tools/learn/learn-lib/data-providers/resource-provider-provider/resource-provider-functions/resource-provider.store.ts @@ -1,4 +1,4 @@ -import { learnUrlGet, learnXhrGetAsync } from '../../functions' +import { learnUrlGet, learnXhrGetAsync } from '../../../functions' import { ResourceProvider } from './resource-provider.model' diff --git a/src-ts/tools/learn/learn-lib/resource-provider-provider/resource-provider.provider.tsx b/src-ts/tools/learn/learn-lib/data-providers/resource-provider-provider/resource-provider.provider.tsx old mode 100755 new mode 100644 similarity index 100% rename from src-ts/tools/learn/learn-lib/resource-provider-provider/resource-provider.provider.tsx rename to src-ts/tools/learn/learn-lib/data-providers/resource-provider-provider/resource-provider.provider.tsx diff --git a/src-ts/tools/learn/learn-lib/user-certifications-provider/index.ts b/src-ts/tools/learn/learn-lib/data-providers/user-certifications-provider/index.ts old mode 100755 new mode 100644 similarity index 100% rename from src-ts/tools/learn/learn-lib/user-certifications-provider/index.ts rename to src-ts/tools/learn/learn-lib/data-providers/user-certifications-provider/index.ts diff --git a/src-ts/tools/learn/learn-lib/user-certifications-provider/user-certification-completed.model.ts b/src-ts/tools/learn/learn-lib/data-providers/user-certifications-provider/user-certification-completed.model.ts similarity index 100% rename from src-ts/tools/learn/learn-lib/user-certifications-provider/user-certification-completed.model.ts rename to src-ts/tools/learn/learn-lib/data-providers/user-certifications-provider/user-certification-completed.model.ts diff --git a/src-ts/tools/learn/learn-lib/user-certifications-provider/user-certification-in-progress.model.ts b/src-ts/tools/learn/learn-lib/data-providers/user-certifications-provider/user-certification-in-progress.model.ts similarity index 100% rename from src-ts/tools/learn/learn-lib/user-certifications-provider/user-certification-in-progress.model.ts rename to src-ts/tools/learn/learn-lib/data-providers/user-certifications-provider/user-certification-in-progress.model.ts diff --git a/src-ts/tools/learn/learn-lib/user-certifications-provider/user-certification-progress-provider-data.model.ts b/src-ts/tools/learn/learn-lib/data-providers/user-certifications-provider/user-certification-progress-provider-data.model.ts old mode 100755 new mode 100644 similarity index 100% rename from src-ts/tools/learn/learn-lib/user-certifications-provider/user-certification-progress-provider-data.model.ts rename to src-ts/tools/learn/learn-lib/data-providers/user-certifications-provider/user-certification-progress-provider-data.model.ts diff --git a/src-ts/tools/learn/learn-lib/user-certifications-provider/user-certification-progress.provider.tsx b/src-ts/tools/learn/learn-lib/data-providers/user-certifications-provider/user-certification-progress.provider.tsx similarity index 100% rename from src-ts/tools/learn/learn-lib/user-certifications-provider/user-certification-progress.provider.tsx rename to src-ts/tools/learn/learn-lib/data-providers/user-certifications-provider/user-certification-progress.provider.tsx diff --git a/src-ts/tools/learn/learn-lib/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 old mode 100755 new mode 100644 similarity index 100% rename from src-ts/tools/learn/learn-lib/user-certifications-provider/user-certifications-functions/index.ts rename to src-ts/tools/learn/learn-lib/data-providers/user-certifications-provider/user-certifications-functions/index.ts diff --git a/src-ts/tools/learn/learn-lib/user-certifications-provider/user-certifications-functions/learn-module-progress.model.ts b/src-ts/tools/learn/learn-lib/data-providers/user-certifications-provider/user-certifications-functions/learn-module-progress.model.ts similarity index 100% rename from src-ts/tools/learn/learn-lib/user-certifications-provider/user-certifications-functions/learn-module-progress.model.ts rename to src-ts/tools/learn/learn-lib/data-providers/user-certifications-provider/user-certifications-functions/learn-module-progress.model.ts diff --git a/src-ts/tools/learn/learn-lib/user-certifications-provider/user-certifications-functions/learn-user-certification-progress.model.ts b/src-ts/tools/learn/learn-lib/data-providers/user-certifications-provider/user-certifications-functions/learn-user-certification-progress.model.ts similarity index 92% rename from src-ts/tools/learn/learn-lib/user-certifications-provider/user-certifications-functions/learn-user-certification-progress.model.ts rename to src-ts/tools/learn/learn-lib/data-providers/user-certifications-provider/user-certifications-functions/learn-user-certification-progress.model.ts index 2d9dc6f78..5c39b423c 100644 --- a/src-ts/tools/learn/learn-lib/user-certifications-provider/user-certifications-functions/learn-user-certification-progress.model.ts +++ b/src-ts/tools/learn/learn-lib/data-providers/user-certifications-provider/user-certifications-functions/learn-user-certification-progress.model.ts @@ -1,4 +1,4 @@ -import { LearnModelBase } from '../../functions' +import { LearnModelBase } from '../../../functions' import { LearnModuleProgress } from './learn-module-progress.model' import { UserCertificationProgressStatus } from './user-certification-progress-status.enum' diff --git a/src-ts/tools/learn/learn-lib/user-certifications-provider/user-certifications-functions/user-certification-progress-status.enum.ts b/src-ts/tools/learn/learn-lib/data-providers/user-certifications-provider/user-certifications-functions/user-certification-progress-status.enum.ts old mode 100755 new mode 100644 similarity index 100% rename from src-ts/tools/learn/learn-lib/user-certifications-provider/user-certifications-functions/user-certification-progress-status.enum.ts rename to src-ts/tools/learn/learn-lib/data-providers/user-certifications-provider/user-certifications-functions/user-certification-progress-status.enum.ts diff --git a/src-ts/tools/learn/learn-lib/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 old mode 100755 new mode 100644 similarity index 93% rename from src-ts/tools/learn/learn-lib/user-certifications-provider/user-certifications-functions/user-certification-progress.store.ts rename to src-ts/tools/learn/learn-lib/data-providers/user-certifications-provider/user-certifications-functions/user-certification-progress.store.ts index 4642d1f3d..99a62d343 --- a/src-ts/tools/learn/learn-lib/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 @@ -1,6 +1,6 @@ -import { LearnConfig } from '../../../learn-config' -import { getUserCertificateUrl } from '../../../learn.routes' -import { learnUrlGet, learnXhrGetAsync, learnXhrPostAsync, learnXhrPutAsync } from '../../functions' +import { LearnConfig } from '../../../../learn-config' +import { getUserCertificateUrl } from '../../../../learn.routes' +import { learnUrlGet, learnXhrGetAsync, learnXhrPostAsync, learnXhrPutAsync } from '../../../functions' import { LearnUserCertificationProgress } from './learn-user-certification-progress.model' import { UserCertificationUpdateProgressActions } from './user-certification-update-progress-actions.enum' diff --git a/src-ts/tools/learn/learn-lib/user-certifications-provider/user-certifications-functions/user-certification-update-progress-actions.enum.ts b/src-ts/tools/learn/learn-lib/data-providers/user-certifications-provider/user-certifications-functions/user-certification-update-progress-actions.enum.ts similarity index 100% rename from src-ts/tools/learn/learn-lib/user-certifications-provider/user-certifications-functions/user-certification-update-progress-actions.enum.ts rename to src-ts/tools/learn/learn-lib/data-providers/user-certifications-provider/user-certifications-functions/user-certification-update-progress-actions.enum.ts diff --git a/src-ts/tools/learn/learn-lib/user-certifications-provider/user-certifications-provider-data.model.ts b/src-ts/tools/learn/learn-lib/data-providers/user-certifications-provider/user-certifications-provider-data.model.ts old mode 100755 new mode 100644 similarity index 100% rename from src-ts/tools/learn/learn-lib/user-certifications-provider/user-certifications-provider-data.model.ts rename to src-ts/tools/learn/learn-lib/data-providers/user-certifications-provider/user-certifications-provider-data.model.ts diff --git a/src-ts/tools/learn/learn-lib/user-certifications-provider/user-certifications.provider.tsx b/src-ts/tools/learn/learn-lib/data-providers/user-certifications-provider/user-certifications.provider.tsx similarity index 99% rename from src-ts/tools/learn/learn-lib/user-certifications-provider/user-certifications.provider.tsx rename to src-ts/tools/learn/learn-lib/data-providers/user-certifications-provider/user-certifications.provider.tsx index f1ef3dad1..1d33e088f 100644 --- a/src-ts/tools/learn/learn-lib/user-certifications-provider/user-certifications.provider.tsx +++ b/src-ts/tools/learn/learn-lib/data-providers/user-certifications-provider/user-certifications.provider.tsx @@ -1,6 +1,6 @@ import { Dispatch, SetStateAction, useContext, useEffect, useState } from 'react' -import { errorHandle, profileContext, ProfileContextData } from '../../../../lib' +import { errorHandle, profileContext, ProfileContextData } from '../../../../../lib' import { UserCertificationCompleted } from './user-certification-completed.model' import { UserCertificationInProgress } from './user-certification-in-progress.model' diff --git a/src-ts/tools/learn/learn-lib/user-completed-certifications-provider/index.ts b/src-ts/tools/learn/learn-lib/data-providers/user-completed-certifications-provider/index.ts similarity index 100% rename from src-ts/tools/learn/learn-lib/user-completed-certifications-provider/index.ts rename to src-ts/tools/learn/learn-lib/data-providers/user-completed-certifications-provider/index.ts diff --git a/src-ts/tools/learn/learn-lib/user-completed-certifications-provider/user-completed-certifications-functions/index.ts b/src-ts/tools/learn/learn-lib/data-providers/user-completed-certifications-provider/user-completed-certifications-functions/index.ts similarity index 100% rename from src-ts/tools/learn/learn-lib/user-completed-certifications-provider/user-completed-certifications-functions/index.ts rename to src-ts/tools/learn/learn-lib/data-providers/user-completed-certifications-provider/user-completed-certifications-functions/index.ts diff --git a/src-ts/tools/learn/learn-lib/user-completed-certifications-provider/user-completed-certifications-functions/user-completed-certification.model.ts b/src-ts/tools/learn/learn-lib/data-providers/user-completed-certifications-provider/user-completed-certifications-functions/user-completed-certification.model.ts similarity index 91% rename from src-ts/tools/learn/learn-lib/user-completed-certifications-provider/user-completed-certifications-functions/user-completed-certification.model.ts rename to src-ts/tools/learn/learn-lib/data-providers/user-completed-certifications-provider/user-completed-certifications-functions/user-completed-certification.model.ts index d3a97e55c..1c515a2f0 100644 --- a/src-ts/tools/learn/learn-lib/user-completed-certifications-provider/user-completed-certifications-functions/user-completed-certification.model.ts +++ b/src-ts/tools/learn/learn-lib/data-providers/user-completed-certifications-provider/user-completed-certifications-functions/user-completed-certification.model.ts @@ -1,5 +1,5 @@ import { LearnCertificateTrackType } from '../../all-certifications-provider' -import { LearnModelBase } from '../../functions' +import { LearnModelBase } from '../../../functions' import { UserCertificationProgressStatus } from '../../user-certifications-provider' export interface LearnUserCompletedCertification extends LearnModelBase { diff --git a/src-ts/tools/learn/learn-lib/user-completed-certifications-provider/user-completed-certifications-functions/user-completed-certification.store.ts b/src-ts/tools/learn/learn-lib/data-providers/user-completed-certifications-provider/user-completed-certifications-functions/user-completed-certification.store.ts similarity index 83% rename from src-ts/tools/learn/learn-lib/user-completed-certifications-provider/user-completed-certifications-functions/user-completed-certification.store.ts rename to src-ts/tools/learn/learn-lib/data-providers/user-completed-certifications-provider/user-completed-certifications-functions/user-completed-certification.store.ts index 5a8388b13..f9fdea9fe 100644 --- a/src-ts/tools/learn/learn-lib/user-completed-certifications-provider/user-completed-certifications-functions/user-completed-certification.store.ts +++ b/src-ts/tools/learn/learn-lib/data-providers/user-completed-certifications-provider/user-completed-certifications-functions/user-completed-certification.store.ts @@ -1,4 +1,4 @@ -import { learnUrlGet, learnXhrGetAsync } from '../../functions' +import { learnUrlGet, learnXhrGetAsync } from '../../../functions' import { LearnUserCompletedCertification } from './user-completed-certification.model' diff --git a/src-ts/tools/learn/learn-lib/user-completed-certifications-provider/user-completed-certifications-provider-data.model.ts b/src-ts/tools/learn/learn-lib/data-providers/user-completed-certifications-provider/user-completed-certifications-provider-data.model.ts similarity index 100% rename from src-ts/tools/learn/learn-lib/user-completed-certifications-provider/user-completed-certifications-provider-data.model.ts rename to src-ts/tools/learn/learn-lib/data-providers/user-completed-certifications-provider/user-completed-certifications-provider-data.model.ts diff --git a/src-ts/tools/learn/learn-lib/user-completed-certifications-provider/user-completed-certifications.provider.tsx b/src-ts/tools/learn/learn-lib/data-providers/user-completed-certifications-provider/user-completed-certifications.provider.tsx similarity index 100% rename from src-ts/tools/learn/learn-lib/user-completed-certifications-provider/user-completed-certifications.provider.tsx rename to src-ts/tools/learn/learn-lib/data-providers/user-completed-certifications-provider/user-completed-certifications.provider.tsx diff --git a/src-ts/tools/learn/learn-lib/index.ts b/src-ts/tools/learn/learn-lib/index.ts index ec7692e7e..6a21a12f8 100755 --- a/src-ts/tools/learn/learn-lib/index.ts +++ b/src-ts/tools/learn/learn-lib/index.ts @@ -1,16 +1,11 @@ -export * from './all-certifications-provider' export * from './collapsible-pane' export * from './course-badge' export * from './course-outline' export * from './course-title' -export * from './courses-provider' export * from './curriculum-summary' +export * from './data-providers' export * from './learn-breadcrumb-provider' export * from './learn-swr' -export * from './lesson-provider' export * from './my-course-card' -export * from './resource-provider-provider' export * from './svgs' -export * from './user-certifications-provider' -export * from './user-completed-certifications-provider' export * from './wave-hero' From 696e5b2ddc58ced71b10d4ee5f681a6eb6eccff1 Mon Sep 17 00:00:00 2001 From: Vasilica Olariu Date: Tue, 25 Oct 2022 15:52:55 +0300 Subject: [PATCH 4/9] TCA-590 - update user-certifications providers to use SWR for data fetching --- .../course-completed/CourseCompletedPage.tsx | 4 +- .../course-details/CourseDetailsPage.tsx | 4 +- .../learn/free-code-camp/FreeCodeCamp.tsx | 4 +- .../user-certification-progress.provider.tsx | 80 ++++------- .../user-certifications-functions/index.ts | 1 - .../user-certification-progress.store.ts | 17 +-- .../user-certifications.provider.tsx | 126 +++++++----------- src-ts/tools/learn/my-learning/MyLearning.tsx | 4 +- src-ts/tools/learn/welcome/WelcomePage.tsx | 4 +- 9 files changed, 84 insertions(+), 160 deletions(-) diff --git a/src-ts/tools/learn/course-completed/CourseCompletedPage.tsx b/src-ts/tools/learn/course-completed/CourseCompletedPage.tsx index b45299573..4ff632248 100755 --- a/src-ts/tools/learn/course-completed/CourseCompletedPage.tsx +++ b/src-ts/tools/learn/course-completed/CourseCompletedPage.tsx @@ -19,7 +19,7 @@ import { useLearnBreadcrumb, UserCertificationProgressProviderData, UserCertificationProgressStatus, - useUserCertificationProgress + useGetUserCertificationProgress } from '../learn-lib' import { getCertificatePath, getCoursePath, LEARN_PATHS, rootRoute } from '../learn.routes' @@ -43,7 +43,7 @@ const CourseCompletedPage: FC<{}> = () => { const { certificationProgress: progress, ready: progressReady, - }: UserCertificationProgressProviderData = useUserCertificationProgress( + }: UserCertificationProgressProviderData = useGetUserCertificationProgress( profile?.userId, routeParams.provider, routeParams.certification diff --git a/src-ts/tools/learn/course-details/CourseDetailsPage.tsx b/src-ts/tools/learn/course-details/CourseDetailsPage.tsx index 8cc7d70d9..0bd31004d 100644 --- a/src-ts/tools/learn/course-details/CourseDetailsPage.tsx +++ b/src-ts/tools/learn/course-details/CourseDetailsPage.tsx @@ -21,7 +21,7 @@ import { UserCertificationProgressProviderData, UserCertificationProgressStatus, useResourceProvider, - useUserCertificationProgress + useGetUserCertificationProgress } from '../learn-lib' import { getCoursePath } from '../learn.routes' @@ -46,7 +46,7 @@ const CourseDetailsPage: FC<{}> = () => { const { certificationProgress: progress, ready: progressReady, - }: UserCertificationProgressProviderData = useUserCertificationProgress( + }: UserCertificationProgressProviderData = useGetUserCertificationProgress( profile?.userId, routeParams.provider, routeParams.certification, diff --git a/src-ts/tools/learn/free-code-camp/FreeCodeCamp.tsx b/src-ts/tools/learn/free-code-camp/FreeCodeCamp.tsx index 83af1a695..703ff3944 100644 --- a/src-ts/tools/learn/free-code-camp/FreeCodeCamp.tsx +++ b/src-ts/tools/learn/free-code-camp/FreeCodeCamp.tsx @@ -33,7 +33,7 @@ import { UserCertificationProgressStatus, userCertificationProgressUpdateAsync, UserCertificationUpdateProgressActions, - useUserCertificationProgress, + useGetUserCertificationProgress, } from '../learn-lib' import { getCertificationCompletedPath, getCoursePath, getLessonPathFromModule } from '../learn.routes' @@ -63,7 +63,7 @@ const FreeCodeCamp: FC<{}> = () => { setCertificateProgress, ready: progressReady, refetch: refetchProgress, - }: UserCertificationProgressProviderData = useUserCertificationProgress( + }: UserCertificationProgressProviderData = useGetUserCertificationProgress( profile?.userId, routeParams.provider, certificationParam diff --git a/src-ts/tools/learn/learn-lib/data-providers/user-certifications-provider/user-certification-progress.provider.tsx b/src-ts/tools/learn/learn-lib/data-providers/user-certifications-provider/user-certification-progress.provider.tsx index 8a951e979..5ee9671ab 100644 --- a/src-ts/tools/learn/learn-lib/data-providers/user-certifications-provider/user-certification-progress.provider.tsx +++ b/src-ts/tools/learn/learn-lib/data-providers/user-certifications-provider/user-certification-progress.provider.tsx @@ -1,60 +1,32 @@ -import { Dispatch, MutableRefObject, SetStateAction, useCallback, useEffect, useRef, useState } from 'react' +import { find } from 'lodash' +import useSWR, { SWRResponse } from 'swr' +import { learnUrlGet } from '../../functions' import { UserCertificationProgressProviderData } from './user-certification-progress-provider-data.model' -import { LearnUserCertificationProgress, userCertificationProgressGetAsync } from './user-certifications-functions' +import { LearnUserCertificationProgress } from './user-certifications-functions' -export function useUserCertificationProgress(userId?: number, provider?: string, certification?: string): +export function useGetUserCertificationProgress(userId?: number, provider?: string, certification?: string): UserCertificationProgressProviderData { - const callCounter: MutableRefObject = useRef(0) - function setCertificateProgress(progress: LearnUserCertificationProgress): void { - setState((prevState) => ({ ...prevState, certificationProgress: progress })) - callCounter.current++ - } - - const fetchProgress: () => void = useCallback(() => { - if (!userId) { - return - } - - const currentCallCounter: number = ++callCounter.current - - userCertificationProgressGetAsync(userId, provider, certification) - .then((myCertifications) => { - // if another call to fetchProgress or to setCertificateProgress - // was made before we got the api response - // return, and do not update state - if (callCounter.current !== currentCallCounter) { - return - } - - setState((prevState) => ({ - ...prevState, - certificationProgress: myCertifications.find(c => c.certification === certification), - loading: false, - ready: true, - })) - }) - }, [certification, provider, userId]) - - const [state, setState]: - [UserCertificationProgressProviderData, Dispatch>] - = useState({ - certificationProgress: undefined, - loading: false, - ready: false, - refetch: fetchProgress, - setCertificateProgress, - }) - - useEffect(() => { - setState((prevState) => ({ - ...prevState, - loading: true, - })) - - fetchProgress() - }, [certification, fetchProgress]) - - return state + const params: string = [ + `?userId=${userId}`, + provider && `provider=${provider}`, + certification && `certification=${certification}`, + ] + .filter(Boolean) + .join('&') + + const url: string = learnUrlGet('certification-progresses', params) + + const { data, error, mutate }: SWRResponse> = useSWR(url, { + isPaused: () => !userId || !certification + }) + + return { + certificationProgress: find(data, {certification}), + loading: !!userId && !data && !error, + ready: !userId || data || error, + refetch: () => mutate(), + setCertificateProgress: (progress) => mutate([progress]) + }; } 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 9b8dd3889..8c6a98dc8 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,7 +4,6 @@ export * from './user-certification-progress-status.enum' export * from './user-certification-update-progress-actions.enum' export { completeCourse as userCertificationProgressCompleteCourseAsync, - getAsync as userCertificationProgressGetAsync, startAsync as userCertificationProgressStartAsync, updateAsync as userCertificationProgressUpdateAsync } from './user-certification-progress.store' 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 99a62d343..34c55e9cd 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 @@ -1,6 +1,6 @@ import { LearnConfig } from '../../../../learn-config' import { getUserCertificateUrl } from '../../../../learn.routes' -import { learnUrlGet, learnXhrGetAsync, learnXhrPostAsync, learnXhrPutAsync } from '../../../functions' +import { learnUrlGet, learnXhrPostAsync, learnXhrPutAsync } from '../../../functions' import { LearnUserCertificationProgress } from './learn-user-certification-progress.model' import { UserCertificationUpdateProgressActions } from './user-certification-update-progress-actions.enum' @@ -30,21 +30,6 @@ export function completeCourse( ) } -export function getAsync(userId: number, provider?: string, certification?: string): Promise> { - - const params: string = [ - `?userId=${userId}`, - provider && `provider=${provider}`, - certification && `certification=${certification}`, - ] - .filter(Boolean) - .join('&') - - const url: string = learnUrlGet(certProgressPath, params) - - return learnXhrGetAsync>(url) -} - export function startAsync(userId: number, certificationId: string, courseId: string, data: any): Promise { const url: string = learnUrlGet(certProgressPath, `${userId}`, certificationId, courseId) diff --git a/src-ts/tools/learn/learn-lib/data-providers/user-certifications-provider/user-certifications.provider.tsx b/src-ts/tools/learn/learn-lib/data-providers/user-certifications-provider/user-certifications.provider.tsx index 1d33e088f..1c9f40011 100644 --- a/src-ts/tools/learn/learn-lib/data-providers/user-certifications-provider/user-certifications.provider.tsx +++ b/src-ts/tools/learn/learn-lib/data-providers/user-certifications-provider/user-certifications.provider.tsx @@ -1,88 +1,56 @@ -import { Dispatch, SetStateAction, useContext, useEffect, useState } from 'react' +import { useContext } from 'react' +import useSWR, { SWRResponse } from 'swr' import { errorHandle, profileContext, ProfileContextData } from '../../../../../lib' +import { learnUrlGet } from '../../functions' import { UserCertificationCompleted } from './user-certification-completed.model' import { UserCertificationInProgress } from './user-certification-in-progress.model' -import { userCertificationProgressGetAsync, UserCertificationProgressStatus } from './user-certifications-functions' +import { LearnUserCertificationProgress, UserCertificationProgressStatus } from './user-certifications-functions' import { UserCertificationsProviderData } from './user-certifications-provider-data.model' -const defaultProviderData: UserCertificationsProviderData = { - completed: [], - inProgress: [], - loading: false, - ready: false, -} - -export function useUserCertifications(): UserCertificationsProviderData { - +export function useGetUserCertifications( + provider: string = 'freeCodeCamp', +): UserCertificationsProviderData { const profileContextData: ProfileContextData = useContext(profileContext) - const [state, setState]: [UserCertificationsProviderData, Dispatch>] - = useState(defaultProviderData) - - useEffect(() => { - - let mounted: boolean = true - - setState((prevState) => ({ - ...prevState, - loading: true, - })) - - const userId: number | undefined = profileContextData?.profile?.userId - if (!userId) { - if (profileContextData.initialized) { - // user is logged out, - // we're not going to fetch any progress, data is ready as is - setState((prevState) => ({ - ...prevState, - loading: false, - ready: true, - })) - } - return - } - - userCertificationProgressGetAsync(userId) - .then((myCertifications) => { - - if (!mounted) { - return - } - - const completed: ReadonlyArray = myCertifications - .filter(c => c.status === UserCertificationProgressStatus.completed) - .map(c => c as UserCertificationCompleted) - .sort((a, b) => b.updatedAt.getTime() - a.updatedAt.getTime()) - - const inProgress: ReadonlyArray = myCertifications - .filter(c => c.status === UserCertificationProgressStatus.inProgress) - .map(c => c as UserCertificationInProgress) - .sort((a, b) => b.updatedAt.getTime() - a.updatedAt.getTime()) - - setState((prevState) => ({ - ...prevState, - completed, - inProgress, - loading: false, - ready: true, - })) - }) - .catch((err: any) => { - errorHandle(err, 'There was an error getting your course progress.') - setState((prevState) => ({ - ...prevState, - completed: [], - inProgress: [], - loading: false, - ready: true, - })) - }) - - return () => { - mounted = false - } - }, [profileContextData]) - - return state + const userId: number | undefined = profileContextData?.profile?.userId + + const params: string = [ + `?userId=${userId}`, + provider && `provider=${provider}`, + ] + .filter(Boolean) + .join('&') + + const url: string = learnUrlGet('certification-progresses', params) + + const { data, error }: SWRResponse> = useSWR(url, { + isPaused: () => !userId + }) + + const completed: ReadonlyArray = data + ?.filter(c => c.status === UserCertificationProgressStatus.completed) + .map(c => c as UserCertificationCompleted) + .sort((a, b) => b.updatedAt.getTime() - a.updatedAt.getTime()) ?? [] + + const inProgress: ReadonlyArray = data + ?.filter(c => c.status === UserCertificationProgressStatus.inProgress) + .map(c => c as UserCertificationInProgress) + .sort((a, b) => b.updatedAt.getTime() - a.updatedAt.getTime()) ?? [] + + if (error) { + errorHandle(error, 'There was an error getting your course progress.') + } + + return { + completed, + inProgress, + loading: !!userId && !data && !error, + + // ready when: + // profile context was initialized and + // user is logged out, or + // data or error is available + ready: profileContextData.initialized && (!userId || data || error), + } } diff --git a/src-ts/tools/learn/my-learning/MyLearning.tsx b/src-ts/tools/learn/my-learning/MyLearning.tsx index 3d24802e6..4c5fa7663 100755 --- a/src-ts/tools/learn/my-learning/MyLearning.tsx +++ b/src-ts/tools/learn/my-learning/MyLearning.tsx @@ -7,7 +7,7 @@ import { useGetAllCertifications, useLearnBreadcrumb, UserCertificationsProviderData, - useUserCertifications, + useGetUserCertifications, WaveHero } from '../learn-lib' import { LEARN_PATHS } from '../learn.routes' @@ -25,7 +25,7 @@ interface CertificatesByIdType { const MyLearning: FC<{}> = () => { const { profile, initialized: profileReady }: ProfileContextData = useContext(profileContext) - const { completed, inProgress, ready: coursesReady }: UserCertificationsProviderData = useUserCertifications() + const { completed, inProgress, ready: coursesReady }: UserCertificationsProviderData = useGetUserCertifications() const { certifications, ready: certificatesReady }: AllCertificationsProviderData = useGetAllCertifications() const [activeTab, setActiveTab]: [MyTabsViews|undefined, Dispatch>] = useState() diff --git a/src-ts/tools/learn/welcome/WelcomePage.tsx b/src-ts/tools/learn/welcome/WelcomePage.tsx index 75c75a4d4..b96be27c1 100644 --- a/src-ts/tools/learn/welcome/WelcomePage.tsx +++ b/src-ts/tools/learn/welcome/WelcomePage.tsx @@ -7,7 +7,7 @@ import { AllCertificationsProviderData, useGetAllCertifications, UserCertificationsProviderData, - useUserCertifications, + useGetUserCertifications, WaveHero, } from '../learn-lib' @@ -19,7 +19,7 @@ import styles from './WelcomePage.module.scss' const WelcomePage: FC<{}> = () => { const allCertsData: AllCertificationsProviderData = useGetAllCertifications() - const userCertsData: UserCertificationsProviderData = useUserCertifications() + const userCertsData: UserCertificationsProviderData = useGetUserCertifications() const coursesReady: boolean = allCertsData.ready && userCertsData.ready From 5c34eeed393a82575c19f3dc44e6b929456b0699 Mon Sep 17 00:00:00 2001 From: Vasilica Olariu Date: Tue, 25 Oct 2022 16:26:59 +0300 Subject: [PATCH 5/9] TCA-590 - update courses provider to use SWR --- .../certificate-view/CertificateView.tsx | 4 +- .../course-completed/CourseCompletedPage.tsx | 4 +- .../course-details/CourseDetailsPage.tsx | 4 +- .../learn/free-code-camp/FreeCodeCamp.tsx | 4 +- .../courses-provider/courses.provider.tsx | 68 ++++++------------- .../my-course-card/in-progress/InProgress.tsx | 4 +- 6 files changed, 31 insertions(+), 57 deletions(-) diff --git a/src-ts/tools/learn/course-certificate/certificate-view/CertificateView.tsx b/src-ts/tools/learn/course-certificate/certificate-view/CertificateView.tsx index 161c80c84..9dd1506e0 100644 --- a/src-ts/tools/learn/course-certificate/certificate-view/CertificateView.tsx +++ b/src-ts/tools/learn/course-certificate/certificate-view/CertificateView.tsx @@ -16,7 +16,7 @@ import { AllCertificationsProviderData, CoursesProviderData, useGetCertification, - useCourses, + useGetCourses, UserCompletedCertificationsProviderData, useUserCompletedCertifications, } from '../../learn-lib' @@ -54,7 +54,7 @@ const CertificateView: FC = (props: CertificateViewProps) const { course, ready: courseReady, - }: CoursesProviderData = useCourses(props.provider, props.certification) + }: CoursesProviderData = useGetCourses(props.provider, props.certification) function getCertTitle(user: string): string { return `${user} - ${course?.title} Certification` diff --git a/src-ts/tools/learn/course-completed/CourseCompletedPage.tsx b/src-ts/tools/learn/course-completed/CourseCompletedPage.tsx index 4ff632248..b8e9f3dcc 100755 --- a/src-ts/tools/learn/course-completed/CourseCompletedPage.tsx +++ b/src-ts/tools/learn/course-completed/CourseCompletedPage.tsx @@ -15,7 +15,7 @@ import { CoursesProviderData, CourseTitle, useGetCertification, - useCourses, + useGetCourses, useLearnBreadcrumb, UserCertificationProgressProviderData, UserCertificationProgressStatus, @@ -38,7 +38,7 @@ const CourseCompletedPage: FC<{}> = () => { const { course: courseData, ready: courseDataReady, - }: CoursesProviderData = useCourses(providerParam, certificationParam) + }: CoursesProviderData = useGetCourses(providerParam, certificationParam) const { certificationProgress: progress, diff --git a/src-ts/tools/learn/course-details/CourseDetailsPage.tsx b/src-ts/tools/learn/course-details/CourseDetailsPage.tsx index 0bd31004d..2a9fff35e 100644 --- a/src-ts/tools/learn/course-details/CourseDetailsPage.tsx +++ b/src-ts/tools/learn/course-details/CourseDetailsPage.tsx @@ -16,7 +16,7 @@ import { CourseTitle, ResourceProviderData, useGetCertification, - useCourses, + useGetCourses, useLearnBreadcrumb, UserCertificationProgressProviderData, UserCertificationProgressStatus, @@ -41,7 +41,7 @@ const CourseDetailsPage: FC<{}> = () => { const { course, ready: courseReady, - }: CoursesProviderData = useCourses(routeParams.provider ?? '', routeParams.certification) + }: CoursesProviderData = useGetCourses(routeParams.provider ?? '', routeParams.certification) const { certificationProgress: progress, diff --git a/src-ts/tools/learn/free-code-camp/FreeCodeCamp.tsx b/src-ts/tools/learn/free-code-camp/FreeCodeCamp.tsx index 703ff3944..a36e7c613 100644 --- a/src-ts/tools/learn/free-code-camp/FreeCodeCamp.tsx +++ b/src-ts/tools/learn/free-code-camp/FreeCodeCamp.tsx @@ -24,7 +24,7 @@ import { LearnModule, LearnModuleProgress, LessonProviderData, - useCourses, + useGetCourses, useLearnBreadcrumb, useLessonProvider, userCertificationProgressCompleteCourseAsync, @@ -72,7 +72,7 @@ const FreeCodeCamp: FC<{}> = () => { const { course: courseData, ready: courseDataReady, - }: CoursesProviderData = useCourses(providerParam, certificationParam) + }: CoursesProviderData = useGetCourses(providerParam, certificationParam) const { lesson, ready: lessonReady }: LessonProviderData = useLessonProvider( providerParam, diff --git a/src-ts/tools/learn/learn-lib/data-providers/courses-provider/courses.provider.tsx b/src-ts/tools/learn/learn-lib/data-providers/courses-provider/courses.provider.tsx index 5c001c51f..05d4ec54f 100644 --- a/src-ts/tools/learn/learn-lib/data-providers/courses-provider/courses.provider.tsx +++ b/src-ts/tools/learn/learn-lib/data-providers/courses-provider/courses.provider.tsx @@ -1,55 +1,29 @@ -import { Dispatch, SetStateAction, useEffect, useState } from 'react' +import { get } from 'lodash' +import useSWR, { SWRResponse } from 'swr' +import { learnUrlGet } from '../../functions' -import { courseGetAsync } from './courses-functions' +import { LearnCourse } from './courses-functions' import { CoursesProviderData } from './courses-provider-data.model' -export function useCourses(provider: string, certification?: string): CoursesProviderData { +export function useGetCourses( + provider: string, + certification?: string +): CoursesProviderData { - const defaultProviderData: CoursesProviderData = { - loading: false, - ready: false, - } - - const [state, setState]: [CoursesProviderData, Dispatch>] - = useState(defaultProviderData) - - useEffect(() => { - - let mounted: boolean = true + const params: string = [ + `certification=${certification}`, + `provider=${provider}`, + ] + .filter(Boolean) + .join('&') - if (!certification) { - setState((prevState) => ({ - ...prevState, - course: undefined, - loading: false, - ready: false, - })) - return - } + const url: string = learnUrlGet('courses', `?${params}`) - setState((prevState) => ({ - ...prevState, - loading: true, - })) + const {data, error}: SWRResponse> = useSWR(url) - courseGetAsync(provider, certification) - .then((course) => { - if (!mounted) { - return - } - setState((prevState) => ({ - ...prevState, - course, - loading: false, - ready: true, - })) - }) - - return () => { - mounted = false - } - - }, [provider, certification]) - - return state + return { + course: get(data, [0]), + loading: !data && !error, + ready: !!data || !!error, + } } diff --git a/src-ts/tools/learn/learn-lib/my-course-card/in-progress/InProgress.tsx b/src-ts/tools/learn/learn-lib/my-course-card/in-progress/InProgress.tsx index b05b64269..5526f87ba 100644 --- a/src-ts/tools/learn/learn-lib/my-course-card/in-progress/InProgress.tsx +++ b/src-ts/tools/learn/learn-lib/my-course-card/in-progress/InProgress.tsx @@ -11,7 +11,7 @@ import { CoursesProviderData, CourseTitle, LearnCertification, - useCourses, + useGetCourses, } from '../../../learn-lib' import { getCoursePath, getLessonPathFromCurrentLesson } from '../../../learn.routes' import { CurriculumSummary } from '../../curriculum-summary' @@ -34,7 +34,7 @@ const InProgress: FC = (props: InProgressProps) => { const certification: string = props.certification?.certification ?? '' const provider: string = props.certification?.providerName ?? '' - const { course }: CoursesProviderData = useCourses(provider, certification) + const { course }: CoursesProviderData = useGetCourses(provider, certification) const resumeCourse: () => void = () => { if (!props.currentLesson) { From 886cdb0c3b10662e3cc993ba946ece455203b236 Mon Sep 17 00:00:00 2001 From: Vasilica Olariu Date: Tue, 25 Oct 2022 17:09:37 +0300 Subject: [PATCH 6/9] TCA-590 - update lesson provider to use SWR --- .../learn/free-code-camp/FreeCodeCamp.tsx | 4 +- .../courses-functions/course.store.ts | 12 --- .../courses-functions/index.ts | 2 - .../courses-provider-data.model.ts | 2 +- .../courses-provider/courses.provider.tsx | 2 +- .../data-providers/courses-provider/index.ts | 2 +- .../learn-course.model.ts | 4 +- .../lesson-provider/lesson.provider.tsx | 100 ++++++------------ 8 files changed, 39 insertions(+), 89 deletions(-) delete mode 100644 src-ts/tools/learn/learn-lib/data-providers/courses-provider/courses-functions/course.store.ts delete mode 100644 src-ts/tools/learn/learn-lib/data-providers/courses-provider/courses-functions/index.ts rename src-ts/tools/learn/learn-lib/data-providers/courses-provider/{courses-functions => }/learn-course.model.ts (80%) diff --git a/src-ts/tools/learn/free-code-camp/FreeCodeCamp.tsx b/src-ts/tools/learn/free-code-camp/FreeCodeCamp.tsx index a36e7c613..69048ebb5 100644 --- a/src-ts/tools/learn/free-code-camp/FreeCodeCamp.tsx +++ b/src-ts/tools/learn/free-code-camp/FreeCodeCamp.tsx @@ -26,7 +26,7 @@ import { LessonProviderData, useGetCourses, useLearnBreadcrumb, - useLessonProvider, + useGetLesson, userCertificationProgressCompleteCourseAsync, UserCertificationProgressProviderData, userCertificationProgressStartAsync, @@ -74,7 +74,7 @@ const FreeCodeCamp: FC<{}> = () => { ready: courseDataReady, }: CoursesProviderData = useGetCourses(providerParam, certificationParam) - const { lesson, ready: lessonReady }: LessonProviderData = useLessonProvider( + const { lesson, ready: lessonReady }: LessonProviderData = useGetLesson( providerParam, certificationParam, moduleParam, diff --git a/src-ts/tools/learn/learn-lib/data-providers/courses-provider/courses-functions/course.store.ts b/src-ts/tools/learn/learn-lib/data-providers/courses-provider/courses-functions/course.store.ts deleted file mode 100644 index 58c40c711..000000000 --- a/src-ts/tools/learn/learn-lib/data-providers/courses-provider/courses-functions/course.store.ts +++ /dev/null @@ -1,12 +0,0 @@ -import { learnUrlGet, learnXhrGetAsync } from '../../../functions' - -import { LearnCourse } from './learn-course.model' - -export function getAsync(provider: string, certification: string): - Promise { - - const url: string = learnUrlGet('courses', `?certification=${certification}&provider=${provider}`) - - return learnXhrGetAsync>(url) - .then(courses => courses[0]) -} diff --git a/src-ts/tools/learn/learn-lib/data-providers/courses-provider/courses-functions/index.ts b/src-ts/tools/learn/learn-lib/data-providers/courses-provider/courses-functions/index.ts deleted file mode 100644 index e6c6a0a63..000000000 --- a/src-ts/tools/learn/learn-lib/data-providers/courses-provider/courses-functions/index.ts +++ /dev/null @@ -1,2 +0,0 @@ -export { getAsync as courseGetAsync } from './course.store' -export * from './learn-course.model' diff --git a/src-ts/tools/learn/learn-lib/data-providers/courses-provider/courses-provider-data.model.ts b/src-ts/tools/learn/learn-lib/data-providers/courses-provider/courses-provider-data.model.ts index 9fec0a898..03985d117 100644 --- a/src-ts/tools/learn/learn-lib/data-providers/courses-provider/courses-provider-data.model.ts +++ b/src-ts/tools/learn/learn-lib/data-providers/courses-provider/courses-provider-data.model.ts @@ -1,4 +1,4 @@ -import { LearnCourse } from './courses-functions' +import { LearnCourse } from "./learn-course.model" export interface CoursesProviderData { course?: LearnCourse diff --git a/src-ts/tools/learn/learn-lib/data-providers/courses-provider/courses.provider.tsx b/src-ts/tools/learn/learn-lib/data-providers/courses-provider/courses.provider.tsx index 05d4ec54f..80245800e 100644 --- a/src-ts/tools/learn/learn-lib/data-providers/courses-provider/courses.provider.tsx +++ b/src-ts/tools/learn/learn-lib/data-providers/courses-provider/courses.provider.tsx @@ -2,8 +2,8 @@ import { get } from 'lodash' import useSWR, { SWRResponse } from 'swr' import { learnUrlGet } from '../../functions' -import { LearnCourse } from './courses-functions' import { CoursesProviderData } from './courses-provider-data.model' +import { LearnCourse } from './learn-course.model' export function useGetCourses( provider: string, diff --git a/src-ts/tools/learn/learn-lib/data-providers/courses-provider/index.ts b/src-ts/tools/learn/learn-lib/data-providers/courses-provider/index.ts index 7b9eaf3f1..90af1d40e 100644 --- a/src-ts/tools/learn/learn-lib/data-providers/courses-provider/index.ts +++ b/src-ts/tools/learn/learn-lib/data-providers/courses-provider/index.ts @@ -1,3 +1,3 @@ -export * from './courses-functions' export * from './courses-provider-data.model' export * from './courses.provider' +export * from './learn-course.model' diff --git a/src-ts/tools/learn/learn-lib/data-providers/courses-provider/courses-functions/learn-course.model.ts b/src-ts/tools/learn/learn-lib/data-providers/courses-provider/learn-course.model.ts similarity index 80% rename from src-ts/tools/learn/learn-lib/data-providers/courses-provider/courses-functions/learn-course.model.ts rename to src-ts/tools/learn/learn-lib/data-providers/courses-provider/learn-course.model.ts index ff8fa29db..aae27afb8 100644 --- a/src-ts/tools/learn/learn-lib/data-providers/courses-provider/courses-functions/learn-course.model.ts +++ b/src-ts/tools/learn/learn-lib/data-providers/courses-provider/learn-course.model.ts @@ -1,5 +1,5 @@ -import { LearnModelBase } from '../../../functions' -import { LearnModule } from '../../lesson-provider' +import { LearnModelBase } from '../../functions' +import { LearnModule } from '../lesson-provider' export interface LearnCourse extends LearnModelBase { certification: string diff --git a/src-ts/tools/learn/learn-lib/data-providers/lesson-provider/lesson.provider.tsx b/src-ts/tools/learn/learn-lib/data-providers/lesson-provider/lesson.provider.tsx index 3a42f0a11..ed1f00879 100644 --- a/src-ts/tools/learn/learn-lib/data-providers/lesson-provider/lesson.provider.tsx +++ b/src-ts/tools/learn/learn-lib/data-providers/lesson-provider/lesson.provider.tsx @@ -1,80 +1,44 @@ -import { Dispatch, SetStateAction, useEffect, useState } from 'react' - -import { courseGetAsync } from '../courses-provider' +import { CoursesProviderData, useGetCourses } from '../courses-provider' import { LearnLesson } from './learn-lesson.model' import { LearnModule } from './learn-module.model' import { LessonProviderData } from './lesson-provider-data.model' -export function useLessonProvider( +export function useGetLesson( provider: string, course?: string, module?: string, lesson?: string, ): LessonProviderData { - const [state, setState]: [LessonProviderData, Dispatch>] = useState({ - loading: false, - ready: false, - }) - - useEffect(() => { - let mounted: boolean = true - - if (!course || !module || !lesson) { - setState((prevState) => ({ - ...prevState, - lesson: undefined, - loading: false, - ready: false, - })) - return - } - - setState((prevState) => ({ - ...prevState, - loading: true, - })) - - courseGetAsync(provider, course) - .then((courseData) => { - - if (!mounted) { - return - } - - const moduleData: LearnModule | undefined = courseData?.modules.find(m => m.key === module) - const lessonData: LearnLesson | undefined = moduleData?.lessons.find(l => l.dashedName === lesson) - - const lessonUrl: string = [ - 'learn', - courseData?.key ?? course, - module, - lesson, - ].filter(Boolean).join('/') - - setState((prevState) => ({ - ...prevState, - lesson: lessonData && { - ...lessonData, - course: { - certification: courseData?.certification ?? '', - certificationId: courseData?.certificationId ?? '', - id: courseData?.id ?? '', - title: courseData?.title ?? '', - }, - lessonUrl, - module: { - dashedName: moduleData?.meta.dashedName ?? '', - title: moduleData?.meta.name ?? '', - }, - }, - loading: false, - ready: true, - })) - }) - - return () => { mounted = false } - }, [provider, course, module, lesson]) - return state + const { course: courseData, loading, ready }: CoursesProviderData = useGetCourses(provider, course) + + const moduleData: LearnModule | undefined = courseData?.modules.find(m => m.key === module) + const lessonData: LearnLesson | undefined = moduleData?.lessons.find(l => l.dashedName === lesson) + + const lessonUrl: string = [ + 'learn', + courseData?.key ?? course, + module, + lesson, + ].filter(Boolean).join('/') + + return { + lesson: !lessonData ? undefined : { + ...lessonData, + course: { + certification: courseData?.certification ?? '', + certificationId: courseData?.certificationId ?? '', + id: courseData?.id ?? '', + title: courseData?.title ?? '', + }, + lessonUrl, + module: { + dashedName: moduleData?.meta.dashedName ?? '', + title: moduleData?.meta.name ?? '', + }, + }, + loading, + ready, + } } From ef40c1f425cb3e192dfa90d39e810c3632b16001 Mon Sep 17 00:00:00 2001 From: Vasilica Olariu Date: Tue, 25 Oct 2022 17:28:06 +0300 Subject: [PATCH 7/9] TCA-590 - update resource-provider & user-completed-certifications providers to use SWR --- .../certificate-view/CertificateView.tsx | 4 +- .../course-details/CourseDetailsPage.tsx | 4 +- .../resource-provider-provider/index.ts | 2 +- .../resource-provider-functions/index.ts | 2 - .../resource-provider.store.ts | 9 --- .../resource-provider.model.ts | 2 +- .../resource-provider.provider.tsx | 44 +++-------- .../user-certification-progress.provider.tsx | 6 +- .../index.ts | 2 +- .../user-completed-certification.model.ts | 6 +- .../index.ts | 4 - .../user-completed-certification.store.ts | 9 --- ...eted-certifications-provider-data.model.ts | 2 +- ...user-completed-certifications.provider.tsx | 76 ++++++------------- 14 files changed, 50 insertions(+), 122 deletions(-) delete mode 100644 src-ts/tools/learn/learn-lib/data-providers/resource-provider-provider/resource-provider-functions/index.ts delete mode 100644 src-ts/tools/learn/learn-lib/data-providers/resource-provider-provider/resource-provider-functions/resource-provider.store.ts rename src-ts/tools/learn/learn-lib/data-providers/resource-provider-provider/{resource-provider-functions => }/resource-provider.model.ts (73%) rename src-ts/tools/learn/learn-lib/data-providers/user-completed-certifications-provider/{user-completed-certifications-functions => }/user-completed-certification.model.ts (64%) delete mode 100644 src-ts/tools/learn/learn-lib/data-providers/user-completed-certifications-provider/user-completed-certifications-functions/index.ts delete mode 100644 src-ts/tools/learn/learn-lib/data-providers/user-completed-certifications-provider/user-completed-certifications-functions/user-completed-certification.store.ts diff --git a/src-ts/tools/learn/course-certificate/certificate-view/CertificateView.tsx b/src-ts/tools/learn/course-certificate/certificate-view/CertificateView.tsx index 9dd1506e0..0d78ca6ef 100644 --- a/src-ts/tools/learn/course-certificate/certificate-view/CertificateView.tsx +++ b/src-ts/tools/learn/course-certificate/certificate-view/CertificateView.tsx @@ -18,7 +18,7 @@ import { useGetCertification, useGetCourses, UserCompletedCertificationsProviderData, - useUserCompletedCertifications, + useGetUserCompletedCertifications, } from '../../learn-lib' import { getCoursePath, getUserCertificateSsr } from '../../learn.routes' @@ -72,7 +72,7 @@ const CertificateView: FC = (props: CertificateViewProps) const { certifications: [completedCertificate], ready: completedCertificateReady, - }: UserCompletedCertificationsProviderData = useUserCompletedCertifications( + }: UserCompletedCertificationsProviderData = useGetUserCompletedCertifications( props.profile.userId, props.provider, props.certification diff --git a/src-ts/tools/learn/course-details/CourseDetailsPage.tsx b/src-ts/tools/learn/course-details/CourseDetailsPage.tsx index 2a9fff35e..050e6b8b7 100644 --- a/src-ts/tools/learn/course-details/CourseDetailsPage.tsx +++ b/src-ts/tools/learn/course-details/CourseDetailsPage.tsx @@ -20,7 +20,7 @@ import { useLearnBreadcrumb, UserCertificationProgressProviderData, UserCertificationProgressStatus, - useResourceProvider, + useGetResourceProvider, useGetUserCertificationProgress } from '../learn-lib' import { getCoursePath } from '../learn.routes' @@ -36,7 +36,7 @@ const CourseDetailsPage: FC<{}> = () => { const { provider: resourceProvider, - }: ResourceProviderData = useResourceProvider(routeParams.provider) + }: ResourceProviderData = useGetResourceProvider(routeParams.provider) const { course, diff --git a/src-ts/tools/learn/learn-lib/data-providers/resource-provider-provider/index.ts b/src-ts/tools/learn/learn-lib/data-providers/resource-provider-provider/index.ts index c1577421a..f8934bcf9 100644 --- a/src-ts/tools/learn/learn-lib/data-providers/resource-provider-provider/index.ts +++ b/src-ts/tools/learn/learn-lib/data-providers/resource-provider-provider/index.ts @@ -1,3 +1,3 @@ -export * from './resource-provider-functions' export * from './resource-provider-data.model' export * from './resource-provider.provider' +export * from './resource-provider.model' diff --git a/src-ts/tools/learn/learn-lib/data-providers/resource-provider-provider/resource-provider-functions/index.ts b/src-ts/tools/learn/learn-lib/data-providers/resource-provider-provider/resource-provider-functions/index.ts deleted file mode 100644 index 6e52546b1..000000000 --- a/src-ts/tools/learn/learn-lib/data-providers/resource-provider-provider/resource-provider-functions/index.ts +++ /dev/null @@ -1,2 +0,0 @@ -export * from './resource-provider.model' -export * from './resource-provider.store' diff --git a/src-ts/tools/learn/learn-lib/data-providers/resource-provider-provider/resource-provider-functions/resource-provider.store.ts b/src-ts/tools/learn/learn-lib/data-providers/resource-provider-provider/resource-provider-functions/resource-provider.store.ts deleted file mode 100644 index 73f24559f..000000000 --- a/src-ts/tools/learn/learn-lib/data-providers/resource-provider-provider/resource-provider-functions/resource-provider.store.ts +++ /dev/null @@ -1,9 +0,0 @@ -import { learnUrlGet, learnXhrGetAsync } from '../../../functions' - -import { ResourceProvider } from './resource-provider.model' - -export function getResourceProvidersAsync(): Promise | undefined> { - - const url: string = learnUrlGet('providers') - return learnXhrGetAsync>(url) -} diff --git a/src-ts/tools/learn/learn-lib/data-providers/resource-provider-provider/resource-provider-functions/resource-provider.model.ts b/src-ts/tools/learn/learn-lib/data-providers/resource-provider-provider/resource-provider.model.ts similarity index 73% rename from src-ts/tools/learn/learn-lib/data-providers/resource-provider-provider/resource-provider-functions/resource-provider.model.ts rename to src-ts/tools/learn/learn-lib/data-providers/resource-provider-provider/resource-provider.model.ts index 255779d75..df6ca66b2 100644 --- a/src-ts/tools/learn/learn-lib/data-providers/resource-provider-provider/resource-provider-functions/resource-provider.model.ts +++ b/src-ts/tools/learn/learn-lib/data-providers/resource-provider-provider/resource-provider.model.ts @@ -1,4 +1,4 @@ -import { LearnModelBase } from '../../../functions' +import { LearnModelBase } from '../../functions' export interface ResourceProvider extends LearnModelBase { attributionStatement: string diff --git a/src-ts/tools/learn/learn-lib/data-providers/resource-provider-provider/resource-provider.provider.tsx b/src-ts/tools/learn/learn-lib/data-providers/resource-provider-provider/resource-provider.provider.tsx index 3f799b3c9..0d9f5bace 100644 --- a/src-ts/tools/learn/learn-lib/data-providers/resource-provider-provider/resource-provider.provider.tsx +++ b/src-ts/tools/learn/learn-lib/data-providers/resource-provider-provider/resource-provider.provider.tsx @@ -1,39 +1,19 @@ -import { Dispatch, SetStateAction, useEffect, useState } from 'react' +import { find } from 'lodash' +import useSWR, { SWRResponse } from 'swr' +import { learnUrlGet } from '../../functions' import { ResourceProviderData } from './resource-provider-data.model' -import { getResourceProvidersAsync } from './resource-provider-functions/resource-provider.store' +import { ResourceProvider } from './resource-provider.model' -export function useResourceProvider(providerName?: string): ResourceProviderData { - const [state, setState]: [ResourceProviderData, Dispatch>] = useState({ - loading: false, - ready: false, - }) +export function useGetResourceProvider(providerName?: string): ResourceProviderData { - useEffect(() => { - if (!providerName) { - setState((prevState) => ({ - ...prevState, - loading: false, - provider: undefined, - ready: false, - })) - return - } + const url: string = learnUrlGet('providers') - setState((prevState) => ({ - ...prevState, - loading: true, - })) + const {data, error}: SWRResponse> = useSWR(url) - getResourceProvidersAsync().then((providers) => { - setState((prevState) => ({ - ...prevState, - loading: false, - provider: providers?.find(p => p.name === providerName), - ready: true, - })) - }) - }, [providerName]) - - return state + return { + provider: find(data, {name: providerName}), + loading: !data && !error, + ready: !!data || !!error, + } } diff --git a/src-ts/tools/learn/learn-lib/data-providers/user-certifications-provider/user-certification-progress.provider.tsx b/src-ts/tools/learn/learn-lib/data-providers/user-certifications-provider/user-certification-progress.provider.tsx index 5ee9671ab..0938646f8 100644 --- a/src-ts/tools/learn/learn-lib/data-providers/user-certifications-provider/user-certification-progress.provider.tsx +++ b/src-ts/tools/learn/learn-lib/data-providers/user-certifications-provider/user-certification-progress.provider.tsx @@ -5,7 +5,11 @@ import { learnUrlGet } from '../../functions' import { UserCertificationProgressProviderData } from './user-certification-progress-provider-data.model' import { LearnUserCertificationProgress } from './user-certifications-functions' -export function useGetUserCertificationProgress(userId?: number, provider?: string, certification?: string): +export function useGetUserCertificationProgress( + userId?: number, + provider?: string, + certification?: string +): UserCertificationProgressProviderData { const params: string = [ diff --git a/src-ts/tools/learn/learn-lib/data-providers/user-completed-certifications-provider/index.ts b/src-ts/tools/learn/learn-lib/data-providers/user-completed-certifications-provider/index.ts index 0b86d900a..ddf12865e 100644 --- a/src-ts/tools/learn/learn-lib/data-providers/user-completed-certifications-provider/index.ts +++ b/src-ts/tools/learn/learn-lib/data-providers/user-completed-certifications-provider/index.ts @@ -1,3 +1,3 @@ -export * from './user-completed-certifications-functions' export * from './user-completed-certifications-provider-data.model' export * from './user-completed-certifications.provider' +export * from './user-completed-certification.model' diff --git a/src-ts/tools/learn/learn-lib/data-providers/user-completed-certifications-provider/user-completed-certifications-functions/user-completed-certification.model.ts b/src-ts/tools/learn/learn-lib/data-providers/user-completed-certifications-provider/user-completed-certification.model.ts similarity index 64% rename from src-ts/tools/learn/learn-lib/data-providers/user-completed-certifications-provider/user-completed-certifications-functions/user-completed-certification.model.ts rename to src-ts/tools/learn/learn-lib/data-providers/user-completed-certifications-provider/user-completed-certification.model.ts index 1c515a2f0..04583a26d 100644 --- a/src-ts/tools/learn/learn-lib/data-providers/user-completed-certifications-provider/user-completed-certifications-functions/user-completed-certification.model.ts +++ b/src-ts/tools/learn/learn-lib/data-providers/user-completed-certifications-provider/user-completed-certification.model.ts @@ -1,6 +1,6 @@ -import { LearnCertificateTrackType } from '../../all-certifications-provider' -import { LearnModelBase } from '../../../functions' -import { UserCertificationProgressStatus } from '../../user-certifications-provider' +import { LearnCertificateTrackType } from '../all-certifications-provider' +import { LearnModelBase } from '../../functions' +import { UserCertificationProgressStatus } from '../user-certifications-provider' export interface LearnUserCompletedCertification extends LearnModelBase { certification: string, diff --git a/src-ts/tools/learn/learn-lib/data-providers/user-completed-certifications-provider/user-completed-certifications-functions/index.ts b/src-ts/tools/learn/learn-lib/data-providers/user-completed-certifications-provider/user-completed-certifications-functions/index.ts deleted file mode 100644 index 371041a0b..000000000 --- a/src-ts/tools/learn/learn-lib/data-providers/user-completed-certifications-provider/user-completed-certifications-functions/index.ts +++ /dev/null @@ -1,4 +0,0 @@ -export * from './user-completed-certification.model' -export { - getAsync as userCompletedCertificationGetAsync -} from './user-completed-certification.store' diff --git a/src-ts/tools/learn/learn-lib/data-providers/user-completed-certifications-provider/user-completed-certifications-functions/user-completed-certification.store.ts b/src-ts/tools/learn/learn-lib/data-providers/user-completed-certifications-provider/user-completed-certifications-functions/user-completed-certification.store.ts deleted file mode 100644 index f9fdea9fe..000000000 --- a/src-ts/tools/learn/learn-lib/data-providers/user-completed-certifications-provider/user-completed-certifications-functions/user-completed-certification.store.ts +++ /dev/null @@ -1,9 +0,0 @@ -import { learnUrlGet, learnXhrGetAsync } from '../../../functions' - -import { LearnUserCompletedCertification } from './user-completed-certification.model' - -export function getAsync(userId: number): Promise> { - - const url: string = learnUrlGet('completed-certifications', `${userId}`) - return learnXhrGetAsync>(url) -} diff --git a/src-ts/tools/learn/learn-lib/data-providers/user-completed-certifications-provider/user-completed-certifications-provider-data.model.ts b/src-ts/tools/learn/learn-lib/data-providers/user-completed-certifications-provider/user-completed-certifications-provider-data.model.ts index 763c6b780..f5791b508 100644 --- a/src-ts/tools/learn/learn-lib/data-providers/user-completed-certifications-provider/user-completed-certifications-provider-data.model.ts +++ b/src-ts/tools/learn/learn-lib/data-providers/user-completed-certifications-provider/user-completed-certifications-provider-data.model.ts @@ -1,7 +1,7 @@ import { LearnUserCompletedCertification } from './user-completed-certifications-functions' export interface UserCompletedCertificationsProviderData { - certifications: Array + certifications: ReadonlyArray loading: boolean ready: boolean } diff --git a/src-ts/tools/learn/learn-lib/data-providers/user-completed-certifications-provider/user-completed-certifications.provider.tsx b/src-ts/tools/learn/learn-lib/data-providers/user-completed-certifications-provider/user-completed-certifications.provider.tsx index f3131b8ff..9941bd958 100644 --- a/src-ts/tools/learn/learn-lib/data-providers/user-completed-certifications-provider/user-completed-certifications.provider.tsx +++ b/src-ts/tools/learn/learn-lib/data-providers/user-completed-certifications-provider/user-completed-certifications.provider.tsx @@ -1,63 +1,31 @@ -import { Dispatch, SetStateAction, useEffect, useState } from 'react' +import useSWR, { SWRResponse } from 'swr' -import { LearnUserCompletedCertification, userCompletedCertificationGetAsync } from './user-completed-certifications-functions' +import { learnUrlGet } from '../../functions' +import { LearnUserCompletedCertification } from './user-completed-certification.model' import { UserCompletedCertificationsProviderData } from './user-completed-certifications-provider-data.model' -export function useUserCompletedCertifications(userId?: number, provider?: string, certification?: string): - UserCompletedCertificationsProviderData { +export function useGetUserCompletedCertifications( + userId?: number, + provider?: string, + certification?: string +): UserCompletedCertificationsProviderData { - const [state, setState]: - [UserCompletedCertificationsProviderData, Dispatch>] - = useState({ - certifications: [], - loading: false, - ready: false, - }) - - useEffect(() => { - let mounted: boolean = true - - setState((prevState) => ({ - ...prevState, - loading: true, - })) - - if (!userId) { - return - } + const url: string = learnUrlGet('completed-certifications', `${userId}`) - userCompletedCertificationGetAsync(userId) - .then((completedCertifications) => { + const {data, error}: SWRResponse> = useSWR(url) - if (!mounted) { - return - } + let certifications: ReadonlyArray = data ?? [] - let certifications: Array = completedCertifications - - if (provider || certification) { - certifications = completedCertifications.filter((c) => { - return (!provider || c.provider === provider) && - (!certification || c.certification === certification) - }) - } - - setState((prevState) => ({ - ...prevState, - certifications, - loading: false, - ready: true, - })) - }) - - return () => { - mounted = false - } - }, [ - certification, - provider, - userId, - ]) + if (provider || certification) { + certifications = certifications.filter((c) => { + return (!provider || c.provider === provider) && + (!certification || c.certification === certification) + }) + } - return state + return { + certifications, + loading: !data && !error, + ready: !!data || !!error, + } } From c63e2738bb7eb4474df9c5c277ec0cf8f14ccad1 Mon Sep 17 00:00:00 2001 From: Vasilica Olariu Date: Tue, 25 Oct 2022 18:25:12 +0300 Subject: [PATCH 8/9] TCA-590 - use swr cache for data that doesn't change over time --- .../all-certifications.provider.tsx | 7 +++-- .../courses-provider/courses.provider.tsx | 6 ++-- .../resource-provider.provider.tsx | 6 ++-- .../user-certifications.provider.tsx | 4 +-- .../learn/learn-lib/learn-swr/LearnSwr.tsx | 3 ++ .../tools/learn/learn-lib/learn-swr/index.ts | 1 + .../learn-lib/learn-swr/use-swr-cache.tsx | 31 +++++++++++++++++++ 7 files changed, 50 insertions(+), 8 deletions(-) create mode 100644 src-ts/tools/learn/learn-lib/learn-swr/use-swr-cache.tsx diff --git a/src-ts/tools/learn/learn-lib/data-providers/all-certifications-provider/all-certifications.provider.tsx b/src-ts/tools/learn/learn-lib/data-providers/all-certifications-provider/all-certifications.provider.tsx index a626b7172..ba517ba90 100644 --- a/src-ts/tools/learn/learn-lib/data-providers/all-certifications-provider/all-certifications.provider.tsx +++ b/src-ts/tools/learn/learn-lib/data-providers/all-certifications-provider/all-certifications.provider.tsx @@ -1,5 +1,6 @@ -import useSWR, { SWRResponse } from 'swr' +import useSWR, { SWRConfiguration, SWRResponse } from 'swr' import { learnUrlGet } from '../../functions' +import { useSwrCache } from '../../learn-swr' import { AllCertificationsProviderData } from './all-certifications-provider-data.model' @@ -14,10 +15,12 @@ export function useGetAllCertifications( const url: string = learnUrlGet( 'certifications', - `?providerName=${providerName}&test=true` + `?providerName=${providerName}` ) + const swrCacheConfig: SWRConfiguration = useSwrCache(url) const {data, error}: SWRResponse = useSWR(url, { + ...swrCacheConfig, isPaused: () => options?.enabled === false }) diff --git a/src-ts/tools/learn/learn-lib/data-providers/courses-provider/courses.provider.tsx b/src-ts/tools/learn/learn-lib/data-providers/courses-provider/courses.provider.tsx index 80245800e..b28421afd 100644 --- a/src-ts/tools/learn/learn-lib/data-providers/courses-provider/courses.provider.tsx +++ b/src-ts/tools/learn/learn-lib/data-providers/courses-provider/courses.provider.tsx @@ -1,6 +1,7 @@ import { get } from 'lodash' -import useSWR, { SWRResponse } from 'swr' +import useSWR, { SWRConfiguration, SWRResponse } from 'swr' import { learnUrlGet } from '../../functions' +import { useSwrCache } from '../../learn-swr' import { CoursesProviderData } from './courses-provider-data.model' import { LearnCourse } from './learn-course.model' @@ -18,8 +19,9 @@ export function useGetCourses( .join('&') const url: string = learnUrlGet('courses', `?${params}`) + const swrCacheConfig: SWRConfiguration = useSwrCache(url) - const {data, error}: SWRResponse> = useSWR(url) + const {data, error}: SWRResponse> = useSWR(url, swrCacheConfig) return { course: get(data, [0]), diff --git a/src-ts/tools/learn/learn-lib/data-providers/resource-provider-provider/resource-provider.provider.tsx b/src-ts/tools/learn/learn-lib/data-providers/resource-provider-provider/resource-provider.provider.tsx index 0d9f5bace..ce327c96b 100644 --- a/src-ts/tools/learn/learn-lib/data-providers/resource-provider-provider/resource-provider.provider.tsx +++ b/src-ts/tools/learn/learn-lib/data-providers/resource-provider-provider/resource-provider.provider.tsx @@ -1,6 +1,7 @@ import { find } from 'lodash' -import useSWR, { SWRResponse } from 'swr' +import useSWR, { SWRConfiguration, SWRResponse } from 'swr' import { learnUrlGet } from '../../functions' +import { useSwrCache } from '../../learn-swr' import { ResourceProviderData } from './resource-provider-data.model' import { ResourceProvider } from './resource-provider.model' @@ -8,8 +9,9 @@ import { ResourceProvider } from './resource-provider.model' export function useGetResourceProvider(providerName?: string): ResourceProviderData { const url: string = learnUrlGet('providers') + const swrCacheConfig: SWRConfiguration = useSwrCache(url) - const {data, error}: SWRResponse> = useSWR(url) + const {data, error}: SWRResponse> = useSWR(url, swrCacheConfig) return { provider: find(data, {name: providerName}), diff --git a/src-ts/tools/learn/learn-lib/data-providers/user-certifications-provider/user-certifications.provider.tsx b/src-ts/tools/learn/learn-lib/data-providers/user-certifications-provider/user-certifications.provider.tsx index 1c9f40011..5385ee9c1 100644 --- a/src-ts/tools/learn/learn-lib/data-providers/user-certifications-provider/user-certifications.provider.tsx +++ b/src-ts/tools/learn/learn-lib/data-providers/user-certifications-provider/user-certifications.provider.tsx @@ -31,12 +31,12 @@ export function useGetUserCertifications( const completed: ReadonlyArray = data ?.filter(c => c.status === UserCertificationProgressStatus.completed) .map(c => c as UserCertificationCompleted) - .sort((a, b) => b.updatedAt.getTime() - a.updatedAt.getTime()) ?? [] + .sort((a, b) => new Date(b.updatedAt).getTime() - new Date(a.updatedAt).getTime()) ?? [] const inProgress: ReadonlyArray = data ?.filter(c => c.status === UserCertificationProgressStatus.inProgress) .map(c => c as UserCertificationInProgress) - .sort((a, b) => b.updatedAt.getTime() - a.updatedAt.getTime()) ?? [] + .sort((a, b) => new Date(b.updatedAt).getTime() - new Date(a.updatedAt).getTime()) ?? [] if (error) { errorHandle(error, 'There was an error getting your course progress.') diff --git a/src-ts/tools/learn/learn-lib/learn-swr/LearnSwr.tsx b/src-ts/tools/learn/learn-lib/learn-swr/LearnSwr.tsx index 5710acecf..d9a744244 100644 --- a/src-ts/tools/learn/learn-lib/learn-swr/LearnSwr.tsx +++ b/src-ts/tools/learn/learn-lib/learn-swr/LearnSwr.tsx @@ -13,6 +13,9 @@ const LearnSwr: FC = (props: LearnSwrProps) => { learnXhrGetAsync(resource), + refreshInterval: 0, + revalidateOnMount: true, + revalidateOnFocus: false, }} > {props.children} diff --git a/src-ts/tools/learn/learn-lib/learn-swr/index.ts b/src-ts/tools/learn/learn-lib/learn-swr/index.ts index 710f62330..831dd7f3c 100644 --- a/src-ts/tools/learn/learn-lib/learn-swr/index.ts +++ b/src-ts/tools/learn/learn-lib/learn-swr/index.ts @@ -1 +1,2 @@ export { default as LearnSwr } from './LearnSwr' +export * from './use-swr-cache' diff --git a/src-ts/tools/learn/learn-lib/learn-swr/use-swr-cache.tsx b/src-ts/tools/learn/learn-lib/learn-swr/use-swr-cache.tsx new file mode 100644 index 000000000..ac3e8bcb6 --- /dev/null +++ b/src-ts/tools/learn/learn-lib/learn-swr/use-swr-cache.tsx @@ -0,0 +1,31 @@ +import { mutate, SWRConfiguration } from "swr"; + +let cacheMap: any = {} as any; + +if (typeof window !== "undefined") { + try { + // load all cached data from localstorage + cacheMap = JSON.parse(localStorage.getItem('swr-cached') ?? '{}') + } catch {} + + // parse the loaded data, and load it into swr's in-memory cache + if (cacheMap) { + Object.entries(cacheMap).forEach(([key, data]) => { + mutate(key, data, {revalidate: false}) + }) + } +} + +export function useSwrCache(key: string): SWRConfiguration { + // return handlers to store and clear localstorage data + return { + onError() { + cacheMap[key] = undefined + localStorage.setItem('swr-cached', JSON.stringify(cacheMap)); + }, + onSuccess(data: T) { + cacheMap[key] = data + localStorage.setItem('swr-cached', JSON.stringify(cacheMap)); + }, + } +} From 3aa62fd8a2272a8cb7a6ec4456b01a56cda59da2 Mon Sep 17 00:00:00 2001 From: Vasilica Olariu Date: Wed, 26 Oct 2022 17:10:35 +0300 Subject: [PATCH 9/9] lint fixes --- src-ts/tools/learn/Learn.tsx | 1 + .../certificate-view/CertificateView.tsx | 2 +- .../course-completed/CourseCompletedPage.tsx | 4 ++-- .../learn/course-details/CourseDetailsPage.tsx | 6 +++--- .../tools/learn/free-code-camp/FreeCodeCamp.tsx | 4 ++-- .../all-certifications-provider-data.model.ts | 4 ++-- .../all-certifications.provider.tsx | 11 ++++++----- .../courses-provider-data.model.ts | 2 +- .../courses-provider/courses.provider.tsx | 1 + .../resource-provider.provider.tsx | 3 ++- .../user-certification-progress.provider.tsx | 7 ++++--- .../user-certifications.provider.tsx | 15 +++++++++------ .../user-completed-certification.model.ts | 2 +- .../user-completed-certifications.provider.tsx | 1 + .../tools/learn/learn-lib/learn-swr/LearnSwr.tsx | 2 +- .../learn/learn-lib/learn-swr/use-swr-cache.tsx | 14 +++++++------- src-ts/tools/learn/my-learning/MyLearning.tsx | 2 +- src-ts/tools/learn/welcome/WelcomePage.tsx | 2 +- 18 files changed, 46 insertions(+), 37 deletions(-) diff --git a/src-ts/tools/learn/Learn.tsx b/src-ts/tools/learn/Learn.tsx index a134539e9..4175dcfc3 100644 --- a/src-ts/tools/learn/Learn.tsx +++ b/src-ts/tools/learn/Learn.tsx @@ -6,6 +6,7 @@ import { routeContext, RouteContextData, } from '../../lib' + import { LearnSwr } from './learn-lib' export const toolTitle: string = ToolTitle.learn diff --git a/src-ts/tools/learn/course-certificate/certificate-view/CertificateView.tsx b/src-ts/tools/learn/course-certificate/certificate-view/CertificateView.tsx index 0d78ca6ef..c5cd582b9 100644 --- a/src-ts/tools/learn/course-certificate/certificate-view/CertificateView.tsx +++ b/src-ts/tools/learn/course-certificate/certificate-view/CertificateView.tsx @@ -17,8 +17,8 @@ import { CoursesProviderData, useGetCertification, useGetCourses, - UserCompletedCertificationsProviderData, useGetUserCompletedCertifications, + UserCompletedCertificationsProviderData, } from '../../learn-lib' import { getCoursePath, getUserCertificateSsr } from '../../learn.routes' diff --git a/src-ts/tools/learn/course-completed/CourseCompletedPage.tsx b/src-ts/tools/learn/course-completed/CourseCompletedPage.tsx index b8e9f3dcc..d2a44c00d 100755 --- a/src-ts/tools/learn/course-completed/CourseCompletedPage.tsx +++ b/src-ts/tools/learn/course-completed/CourseCompletedPage.tsx @@ -16,10 +16,10 @@ import { CourseTitle, useGetCertification, useGetCourses, + useGetUserCertificationProgress, useLearnBreadcrumb, UserCertificationProgressProviderData, - UserCertificationProgressStatus, - useGetUserCertificationProgress + UserCertificationProgressStatus } from '../learn-lib' import { getCertificatePath, getCoursePath, LEARN_PATHS, rootRoute } from '../learn.routes' diff --git a/src-ts/tools/learn/course-details/CourseDetailsPage.tsx b/src-ts/tools/learn/course-details/CourseDetailsPage.tsx index 050e6b8b7..2b37e5c14 100644 --- a/src-ts/tools/learn/course-details/CourseDetailsPage.tsx +++ b/src-ts/tools/learn/course-details/CourseDetailsPage.tsx @@ -17,11 +17,11 @@ import { ResourceProviderData, useGetCertification, useGetCourses, + useGetResourceProvider, + useGetUserCertificationProgress, useLearnBreadcrumb, UserCertificationProgressProviderData, - UserCertificationProgressStatus, - useGetResourceProvider, - useGetUserCertificationProgress + UserCertificationProgressStatus } from '../learn-lib' import { getCoursePath } from '../learn.routes' diff --git a/src-ts/tools/learn/free-code-camp/FreeCodeCamp.tsx b/src-ts/tools/learn/free-code-camp/FreeCodeCamp.tsx index 69048ebb5..0fb6cc346 100644 --- a/src-ts/tools/learn/free-code-camp/FreeCodeCamp.tsx +++ b/src-ts/tools/learn/free-code-camp/FreeCodeCamp.tsx @@ -25,15 +25,15 @@ import { LearnModuleProgress, LessonProviderData, useGetCourses, - useLearnBreadcrumb, useGetLesson, + useGetUserCertificationProgress, + useLearnBreadcrumb, userCertificationProgressCompleteCourseAsync, UserCertificationProgressProviderData, userCertificationProgressStartAsync, UserCertificationProgressStatus, userCertificationProgressUpdateAsync, UserCertificationUpdateProgressActions, - useGetUserCertificationProgress, } from '../learn-lib' import { getCertificationCompletedPath, getCoursePath, getLessonPathFromModule } from '../learn.routes' diff --git a/src-ts/tools/learn/learn-lib/data-providers/all-certifications-provider/all-certifications-provider-data.model.ts b/src-ts/tools/learn/learn-lib/data-providers/all-certifications-provider/all-certifications-provider-data.model.ts index 072f5d306..991e7727d 100644 --- a/src-ts/tools/learn/learn-lib/data-providers/all-certifications-provider/all-certifications-provider-data.model.ts +++ b/src-ts/tools/learn/learn-lib/data-providers/all-certifications-provider/all-certifications-provider-data.model.ts @@ -1,9 +1,9 @@ -import { LearnCertification } from "./learn-certification.model" +import { LearnCertification } from './learn-certification.model' export interface AllCertificationsProviderData { certification?: LearnCertification certifications: Array + error: boolean loading: boolean ready: boolean - error: boolean } diff --git a/src-ts/tools/learn/learn-lib/data-providers/all-certifications-provider/all-certifications.provider.tsx b/src-ts/tools/learn/learn-lib/data-providers/all-certifications-provider/all-certifications.provider.tsx index ba517ba90..7eb1f8ea2 100644 --- a/src-ts/tools/learn/learn-lib/data-providers/all-certifications-provider/all-certifications.provider.tsx +++ b/src-ts/tools/learn/learn-lib/data-providers/all-certifications-provider/all-certifications.provider.tsx @@ -1,4 +1,5 @@ import useSWR, { SWRConfiguration, SWRResponse } from 'swr' + import { learnUrlGet } from '../../functions' import { useSwrCache } from '../../learn-swr' @@ -21,14 +22,14 @@ export function useGetAllCertifications( const {data, error}: SWRResponse = useSWR(url, { ...swrCacheConfig, - isPaused: () => options?.enabled === false + isPaused: () => options?.enabled === false, }) return { certifications: data ?? [], + error: !!error, loading: !data, ready: !!data, - error: !!error, } } @@ -45,13 +46,13 @@ export function useGetCertification( ) const {data, error}: SWRResponse = useSWR(url, { - isPaused: () => options?.enabled === false + isPaused: () => options?.enabled === false, }) return { - certifications: [], certification: data ?? undefined, + certifications: [], + error: !!error, loading: !data, ready: !!data, - error: !!error, } } diff --git a/src-ts/tools/learn/learn-lib/data-providers/courses-provider/courses-provider-data.model.ts b/src-ts/tools/learn/learn-lib/data-providers/courses-provider/courses-provider-data.model.ts index 03985d117..b80d78557 100644 --- a/src-ts/tools/learn/learn-lib/data-providers/courses-provider/courses-provider-data.model.ts +++ b/src-ts/tools/learn/learn-lib/data-providers/courses-provider/courses-provider-data.model.ts @@ -1,4 +1,4 @@ -import { LearnCourse } from "./learn-course.model" +import { LearnCourse } from './learn-course.model' export interface CoursesProviderData { course?: LearnCourse diff --git a/src-ts/tools/learn/learn-lib/data-providers/courses-provider/courses.provider.tsx b/src-ts/tools/learn/learn-lib/data-providers/courses-provider/courses.provider.tsx index b28421afd..304b53e96 100644 --- a/src-ts/tools/learn/learn-lib/data-providers/courses-provider/courses.provider.tsx +++ b/src-ts/tools/learn/learn-lib/data-providers/courses-provider/courses.provider.tsx @@ -1,5 +1,6 @@ import { get } from 'lodash' import useSWR, { SWRConfiguration, SWRResponse } from 'swr' + import { learnUrlGet } from '../../functions' import { useSwrCache } from '../../learn-swr' diff --git a/src-ts/tools/learn/learn-lib/data-providers/resource-provider-provider/resource-provider.provider.tsx b/src-ts/tools/learn/learn-lib/data-providers/resource-provider-provider/resource-provider.provider.tsx index ce327c96b..a100e0ffc 100644 --- a/src-ts/tools/learn/learn-lib/data-providers/resource-provider-provider/resource-provider.provider.tsx +++ b/src-ts/tools/learn/learn-lib/data-providers/resource-provider-provider/resource-provider.provider.tsx @@ -1,5 +1,6 @@ import { find } from 'lodash' import useSWR, { SWRConfiguration, SWRResponse } from 'swr' + import { learnUrlGet } from '../../functions' import { useSwrCache } from '../../learn-swr' @@ -14,8 +15,8 @@ export function useGetResourceProvider(providerName?: string): ResourceProviderD const {data, error}: SWRResponse> = useSWR(url, swrCacheConfig) return { - provider: find(data, {name: providerName}), loading: !data && !error, + provider: find(data, {name: providerName}), ready: !!data || !!error, } } diff --git a/src-ts/tools/learn/learn-lib/data-providers/user-certifications-provider/user-certification-progress.provider.tsx b/src-ts/tools/learn/learn-lib/data-providers/user-certifications-provider/user-certification-progress.provider.tsx index 0938646f8..949505428 100644 --- a/src-ts/tools/learn/learn-lib/data-providers/user-certifications-provider/user-certification-progress.provider.tsx +++ b/src-ts/tools/learn/learn-lib/data-providers/user-certifications-provider/user-certification-progress.provider.tsx @@ -1,5 +1,6 @@ import { find } from 'lodash' import useSWR, { SWRResponse } from 'swr' + import { learnUrlGet } from '../../functions' import { UserCertificationProgressProviderData } from './user-certification-progress-provider-data.model' @@ -23,7 +24,7 @@ export function useGetUserCertificationProgress( const url: string = learnUrlGet('certification-progresses', params) const { data, error, mutate }: SWRResponse> = useSWR(url, { - isPaused: () => !userId || !certification + isPaused: () => !userId || !certification, }) return { @@ -31,6 +32,6 @@ export function useGetUserCertificationProgress( loading: !!userId && !data && !error, ready: !userId || data || error, refetch: () => mutate(), - setCertificateProgress: (progress) => mutate([progress]) - }; + setCertificateProgress: (progress) => mutate([progress]), + } } diff --git a/src-ts/tools/learn/learn-lib/data-providers/user-certifications-provider/user-certifications.provider.tsx b/src-ts/tools/learn/learn-lib/data-providers/user-certifications-provider/user-certifications.provider.tsx index 5385ee9c1..529f22aa6 100644 --- a/src-ts/tools/learn/learn-lib/data-providers/user-certifications-provider/user-certifications.provider.tsx +++ b/src-ts/tools/learn/learn-lib/data-providers/user-certifications-provider/user-certifications.provider.tsx @@ -1,4 +1,4 @@ -import { useContext } from 'react' +import { useContext, useMemo } from 'react' import useSWR, { SWRResponse } from 'swr' import { errorHandle, profileContext, ProfileContextData } from '../../../../../lib' @@ -25,18 +25,21 @@ export function useGetUserCertifications( const url: string = learnUrlGet('certification-progresses', params) const { data, error }: SWRResponse> = useSWR(url, { - isPaused: () => !userId + isPaused: () => !userId, }) + const loading: boolean = !data && !error - const completed: ReadonlyArray = data + const completed: ReadonlyArray = useMemo(() => data ?.filter(c => c.status === UserCertificationProgressStatus.completed) .map(c => c as UserCertificationCompleted) .sort((a, b) => new Date(b.updatedAt).getTime() - new Date(a.updatedAt).getTime()) ?? [] + , [data]) - const inProgress: ReadonlyArray = data + const inProgress: ReadonlyArray = useMemo(() => data ?.filter(c => c.status === UserCertificationProgressStatus.inProgress) .map(c => c as UserCertificationInProgress) .sort((a, b) => new Date(b.updatedAt).getTime() - new Date(a.updatedAt).getTime()) ?? [] + , [data]) if (error) { errorHandle(error, 'There was an error getting your course progress.') @@ -45,12 +48,12 @@ export function useGetUserCertifications( return { completed, inProgress, - loading: !!userId && !data && !error, + loading: !!userId && loading, // ready when: // profile context was initialized and // user is logged out, or // data or error is available - ready: profileContextData.initialized && (!userId || data || error), + ready: profileContextData.initialized && (!userId || !loading), } } diff --git a/src-ts/tools/learn/learn-lib/data-providers/user-completed-certifications-provider/user-completed-certification.model.ts b/src-ts/tools/learn/learn-lib/data-providers/user-completed-certifications-provider/user-completed-certification.model.ts index 04583a26d..e74b44573 100644 --- a/src-ts/tools/learn/learn-lib/data-providers/user-completed-certifications-provider/user-completed-certification.model.ts +++ b/src-ts/tools/learn/learn-lib/data-providers/user-completed-certifications-provider/user-completed-certification.model.ts @@ -1,5 +1,5 @@ -import { LearnCertificateTrackType } from '../all-certifications-provider' import { LearnModelBase } from '../../functions' +import { LearnCertificateTrackType } from '../all-certifications-provider' import { UserCertificationProgressStatus } from '../user-certifications-provider' export interface LearnUserCompletedCertification extends LearnModelBase { diff --git a/src-ts/tools/learn/learn-lib/data-providers/user-completed-certifications-provider/user-completed-certifications.provider.tsx b/src-ts/tools/learn/learn-lib/data-providers/user-completed-certifications-provider/user-completed-certifications.provider.tsx index 9941bd958..7a44f8ddb 100644 --- a/src-ts/tools/learn/learn-lib/data-providers/user-completed-certifications-provider/user-completed-certifications.provider.tsx +++ b/src-ts/tools/learn/learn-lib/data-providers/user-completed-certifications-provider/user-completed-certifications.provider.tsx @@ -1,6 +1,7 @@ import useSWR, { SWRResponse } from 'swr' import { learnUrlGet } from '../../functions' + import { LearnUserCompletedCertification } from './user-completed-certification.model' import { UserCompletedCertificationsProviderData } from './user-completed-certifications-provider-data.model' diff --git a/src-ts/tools/learn/learn-lib/learn-swr/LearnSwr.tsx b/src-ts/tools/learn/learn-lib/learn-swr/LearnSwr.tsx index d9a744244..532fdd52a 100644 --- a/src-ts/tools/learn/learn-lib/learn-swr/LearnSwr.tsx +++ b/src-ts/tools/learn/learn-lib/learn-swr/LearnSwr.tsx @@ -14,8 +14,8 @@ const LearnSwr: FC = (props: LearnSwrProps) => { value={{ fetcher: (resource) => learnXhrGetAsync(resource), refreshInterval: 0, - revalidateOnMount: true, revalidateOnFocus: false, + revalidateOnMount: true, }} > {props.children} diff --git a/src-ts/tools/learn/learn-lib/learn-swr/use-swr-cache.tsx b/src-ts/tools/learn/learn-lib/learn-swr/use-swr-cache.tsx index ac3e8bcb6..2e13c599e 100644 --- a/src-ts/tools/learn/learn-lib/learn-swr/use-swr-cache.tsx +++ b/src-ts/tools/learn/learn-lib/learn-swr/use-swr-cache.tsx @@ -1,8 +1,8 @@ -import { mutate, SWRConfiguration } from "swr"; +import { mutate, SWRConfiguration } from 'swr' -let cacheMap: any = {} as any; +let cacheMap: any = {} as any -if (typeof window !== "undefined") { +if (typeof window !== 'undefined') { try { // load all cached data from localstorage cacheMap = JSON.parse(localStorage.getItem('swr-cached') ?? '{}') @@ -19,13 +19,13 @@ if (typeof window !== "undefined") { export function useSwrCache(key: string): SWRConfiguration { // return handlers to store and clear localstorage data return { - onError() { + onError(): void { cacheMap[key] = undefined - localStorage.setItem('swr-cached', JSON.stringify(cacheMap)); + localStorage.setItem('swr-cached', JSON.stringify(cacheMap)) }, - onSuccess(data: T) { + onSuccess(data: T): void { cacheMap[key] = data - localStorage.setItem('swr-cached', JSON.stringify(cacheMap)); + localStorage.setItem('swr-cached', JSON.stringify(cacheMap)) }, } } diff --git a/src-ts/tools/learn/my-learning/MyLearning.tsx b/src-ts/tools/learn/my-learning/MyLearning.tsx index 4c5fa7663..ffbc935fe 100755 --- a/src-ts/tools/learn/my-learning/MyLearning.tsx +++ b/src-ts/tools/learn/my-learning/MyLearning.tsx @@ -5,9 +5,9 @@ import { AllCertificationsProviderData, LearnCertification, useGetAllCertifications, + useGetUserCertifications, useLearnBreadcrumb, UserCertificationsProviderData, - useGetUserCertifications, WaveHero } from '../learn-lib' import { LEARN_PATHS } from '../learn.routes' diff --git a/src-ts/tools/learn/welcome/WelcomePage.tsx b/src-ts/tools/learn/welcome/WelcomePage.tsx index b96be27c1..7278bd716 100644 --- a/src-ts/tools/learn/welcome/WelcomePage.tsx +++ b/src-ts/tools/learn/welcome/WelcomePage.tsx @@ -6,8 +6,8 @@ import '../../../lib/styles/index.scss' import { AllCertificationsProviderData, useGetAllCertifications, - UserCertificationsProviderData, useGetUserCertifications, + UserCertificationsProviderData, WaveHero, } from '../learn-lib'