diff --git a/front/app/_orgs/[orgslug]/course/[courseid]/page.tsx b/front/app/_orgs/[orgslug]/course/[courseid]/page.tsx index a4031e94..a48256f6 100644 --- a/front/app/_orgs/[orgslug]/course/[courseid]/page.tsx +++ b/front/app/_orgs/[orgslug]/course/[courseid]/page.tsx @@ -2,67 +2,55 @@ import { EyeOpenIcon, Pencil2Icon } from "@radix-ui/react-icons"; import { closeActivity, createActivity } from "@services/courses/activity"; import Link from "next/link"; -import { useRouter } from "next/navigation"; import React from "react"; import styled from "styled-components"; -import Layout from "../../../../../components/UI/Layout"; import { getAPIUrl, getBackendUrl } from "../../../../../services/config"; -import { getCourse, getCourseMetadata } from "../../../../../services/courses/courses"; +import useSWR, { mutate } from "swr"; +import { swrFetcher } from "@services/utils/requests"; const CourseIdPage = (params: any) => { - const router = useRouter(); const courseid = params.params.courseid; const orgslug = params.params.orgslug; - - const [isLoading, setIsLoading] = React.useState(true); - const [courseInfo, setCourseInfo] = React.useState({}) as any; - - async function fetchCourseInfo() { - const course = await getCourseMetadata("course_" + courseid); - setCourseInfo(course); - setIsLoading(false); - } + const { data: course, error: error } = useSWR(`${getAPIUrl()}courses/meta/course_${courseid}`, swrFetcher); async function startActivity() { - const activity = await createActivity("course_" + courseid); - fetchCourseInfo(); + // Create activity + await createActivity("course_" + courseid); + + // Mutate course + mutate(`${getAPIUrl()}courses/meta/${courseid}`); } async function quitActivity() { - let activity_id = courseInfo.activity.activity_id; - let org_id = courseInfo.activity.org_id; - console.log("activity", activity_id); + // Get activity id and org id + let activity_id = course.activity.activity_id; + let org_id = course.activity.org_id; + // Close activity let activity = await closeActivity(activity_id, org_id); console.log(activity); - fetchCourseInfo(); + // Mutate course + mutate(`${getAPIUrl()}courses/meta/${courseid}`); } - React.useEffect(() => { - if (courseid && orgslug) { - fetchCourseInfo(); - } - return () => {}; - // eslint-disable-next-line react-hooks/exhaustive-deps - }, [courseid && orgslug]); - return ( <> - {isLoading ? ( + {error &&

Failed to load

} + {!course ? (
Loading...
) : (

Course

- {courseInfo.course.name}{" "} + {course.course.name}{" "} {" "}

- {courseInfo.chapters.map((chapter: any) => { + {course.chapters.map((chapter: any) => { return ( <> {chapter.lectures.map((lecture: any) => { @@ -81,7 +69,7 @@ const CourseIdPage = (params: any) => { - + @@ -89,18 +77,18 @@ const CourseIdPage = (params: any) => {

Description

-

{courseInfo.course.description}

+

{course.course.description}

What you will learn

-

{courseInfo.course.learnings == ![] ? "no data" : courseInfo.course.learnings}

+

{course.course.learnings == ![] ? "no data" : course.course.learnings}

Course Lessons

- {courseInfo.chapters.map((chapter: any) => { + {course.chapters.map((chapter: any) => { return ( <>

Chapter : {chapter.name}

@@ -123,8 +111,10 @@ const CourseIdPage = (params: any) => {
- {courseInfo.activity.status == "ongoing" ? ( - + {course.activity.status == "ongoing" ? ( + ) : ( )} diff --git a/front/services/courses/courses.ts b/front/services/courses/courses.ts index 2bd0861e..1fdff696 100644 --- a/front/services/courses/courses.ts +++ b/front/services/courses/courses.ts @@ -1,5 +1,10 @@ import { getAPIUrl } from "../config"; +/* + This file includes only POST, PUT, DELETE requests + GET requests are called from the frontend using SWR (https://swr.vercel.app/) +*/ + export async function getOrgCourses(org_id: number) { const HeadersConfig = new Headers({ "Content-Type": "application/json" }); @@ -31,22 +36,6 @@ export async function getCourse(course_id: string) { .catch((error) => console.log("error", error)); } -export async function getCourseMetadata(course_id: string) { - const HeadersConfig = new Headers({ "Content-Type": "application/json" }); - - const requestOptions: any = { - method: "GET", - headers: HeadersConfig, - redirect: "follow", - credentials: "include", - }; - - // todo : add course id to url - return fetch(`${getAPIUrl()}courses/meta/${course_id}`, requestOptions) - .then((result) => result.json()) - .catch((error) => console.log("error", error)); - -} export async function createNewCourse(org_id: string, course_body: any, thumbnail: any) { const HeadersConfig = new Headers();