feat: use swr for lecture page

This commit is contained in:
swve 2023-01-29 18:36:46 +01:00
parent ab851fb918
commit 4ccb253e71
2 changed files with 40 additions and 51 deletions

View file

@ -4,52 +4,35 @@ import Link from "next/link";
import React, { useMemo } from "react"; import React, { useMemo } from "react";
import Layout from "@components/UI/Layout"; import Layout from "@components/UI/Layout";
import { getLecture } from "@services/courses/lectures"; import { getLecture } from "@services/courses/lectures";
import { getBackendUrl } from "@services/config"; import { getAPIUrl, getBackendUrl } from "@services/config";
import Canva from "@components/LectureViews/DynamicCanva/DynamicCanva"; import Canva from "@components/LectureViews/DynamicCanva/DynamicCanva";
import styled from "styled-components"; import styled from "styled-components";
import { getCourse } from "@services/courses/courses"; import { getCourse } from "@services/courses/courses";
import VideoLecture from "@components/LectureViews/Video/Video"; import VideoLecture from "@components/LectureViews/Video/Video";
import useSWR, { mutate } from "swr";
import { Check } from "lucide-react"; import { Check } from "lucide-react";
import { maskLectureAsComplete } from "@services/courses/activity"; import { maskLectureAsComplete } from "@services/courses/activity";
import { swrFetcher } from "@services/utils/requests";
function LecturePage(params: any) { function LecturePage(params: any) {
const router = useRouter();
const lectureid = params.params.lectureid; const lectureid = params.params.lectureid;
const courseid = params.params.courseid; const courseid = params.params.courseid;
const orgslug = params.params.orgslug; const orgslug = params.params.orgslug;
const [lecture, setLecture] = React.useState<any>({});
const [course, setCourse] = React.useState<any>({});
const [isLoading, setIsLoading] = React.useState(true);
async function fetchLectureData() { const { data: course, error: error_course } = useSWR(`${getAPIUrl()}courses/meta/course_${courseid}`, swrFetcher);
setIsLoading(true); const { data: lecture, error: error_lecture } = useSWR(`${getAPIUrl()}lectures/lecture_${lectureid}`, swrFetcher);
const lecture = await getLecture("lecture_" + lectureid);
setLecture(lecture);
}
async function fetchCourseData() { console.log(course, lecture);
const course = await getCourseMetadata("course_" + courseid);
setCourse(course);
setIsLoading(false);
}
async function markLectureAsCompleteFront() { async function markLectureAsCompleteFront() {
const activity = await maskLectureAsComplete("" + lectureid, courseid, lecture.lecture_id.replace("lecture_", "")); const activity = await maskLectureAsComplete("" + lectureid, courseid, lecture.lecture_id.replace("lecture_", ""));
fetchCourseData(); mutate(`${getAPIUrl()}courses/meta/${courseid}`);
} }
React.useEffect(() => {
if (lectureid) {
fetchLectureData();
fetchCourseData();
}
return () => {};
// eslint-disable-next-line react-hooks/exhaustive-deps
}, [lectureid]);
return ( return (
<> <>
{isLoading ? ( {error_course && <p>Failed to load</p>}
{!course || !lecture ? (
<div>Loading...</div> <div>Loading...</div>
) : ( ) : (
<LectureLayout> <LectureLayout>
@ -85,13 +68,16 @@ function LecturePage(params: any) {
})} })}
</ChaptersWrapper> </ChaptersWrapper>
{lecture ? (
<CourseContent> <CourseContent>
{lecture.type == "dynamic" && <Canva content={lecture.content} lecture={lecture} />} {lecture.type == "dynamic" && <Canva content={lecture.content} lecture={lecture} />}
{/* todo : use apis & streams instead of this */} {/* todo : use apis & streams instead of this */}
{lecture.type == "video" && <VideoLecture course={course} lecture={lecture} />} {lecture.type == "video" && <VideoLecture course={course} lecture={lecture} />}
<ActivityMarkerWrapper> <ActivityMarkerWrapper>
{course.activity.lectures_marked_complete.includes("lecture_"+lectureid) && course.activity.status == "ongoing" ? ( {course.activity.lectures_marked_complete &&
course.activity.lectures_marked_complete.includes("lecture_" + lectureid) &&
course.activity.status == "ongoing" ? (
<button style={{ backgroundColor: "green" }}> <button style={{ backgroundColor: "green" }}>
<i> <i>
<Check size={20}></Check> <Check size={20}></Check>
@ -109,6 +95,9 @@ function LecturePage(params: any) {
)} )}
</ActivityMarkerWrapper> </ActivityMarkerWrapper>
</CourseContent> </CourseContent>
) : (
<div>Loading...</div>
)}
</LectureLayout> </LectureLayout>
)} )}
</> </>

View file

@ -18,7 +18,7 @@ const CourseIdPage = (params: any) => {
await createActivity("course_" + courseid); await createActivity("course_" + courseid);
// Mutate course // Mutate course
mutate(`${getAPIUrl()}courses/meta/${courseid}`); mutate(`${getAPIUrl()}courses/meta/course_${courseid}`);
} }
async function quitActivity() { async function quitActivity() {
@ -31,7 +31,7 @@ const CourseIdPage = (params: any) => {
console.log(activity); console.log(activity);
// Mutate course // Mutate course
mutate(`${getAPIUrl()}courses/meta/${courseid}`); mutate(`${getAPIUrl()}courses/meta/course_${courseid}`);
} }
return ( return (