chore: simplify course fetching

This commit is contained in:
Rotimi Best
2024-06-16 05:23:16 +01:00
parent fecdaa116d
commit a7aeba1d80
4 changed files with 17 additions and 22 deletions
@@ -68,12 +68,15 @@ export const mockGroupMember = {
}
};
export const group = writable<{
type GroupStore = {
id: number | null;
tutors: GroupPerson[];
students: GroupPerson[];
people: GroupPerson[];
}>({
members?: GroupPerson[];
};
export const group = writable<GroupStore>({
id: null,
tutors: [],
students: [],
@@ -86,46 +89,36 @@ export async function setCourse(data: Course, setLesson = true) {
if (data.group) {
const groupData = Object.assign(data.group, {
id: null,
tutors: [],
students: [],
people: []
});
}) as GroupStore;
// @ts-ignore
if (Array.isArray(groupData.members)) {
// @ts-ignore
for (const member of groupData.members) {
if (member.role_id === ROLE.STUDENT) {
// @ts-ignore
groupData.students.push(member);
} else if (member.profile) {
// @ts-ignore
groupData.tutors.push({
...member.profile,
memberId: member.id
});
// tutorsById[member.profile.id] = member.profile;
}
}
// @ts-ignore
groupData.people = groupData.members;
}
// @ts-ignore
delete groupData.members;
// @ts-ignore
group.set(groupData);
}
if (setLesson) {
// @ts-ignore
const orderedLessons = (data.lessons || [])
// @ts-ignore
.sort((a, b) => new Date(a.created_at) - new Date(b.created_at))
// @ts-ignore
.sort((a, b) => a.order - b.order);
.sort((a, b) => new Date(a.created_at).getTime() - new Date(b.created_at).getTime())
.sort((a, b) => (a.order ?? 0) - (b.order ?? 0));
// .map((lesson) => ({
// ...lesson,
// profile: lesson.profile && tutorsById[lesson.profile.id],
@@ -133,7 +126,6 @@ export async function setCourse(data: Course, setLesson = true) {
lessons.set(orderedLessons);
}
//@ts-ignore
delete data.lessons;
if (data.metadata && !Object.values(data.metadata)) {
@@ -90,7 +90,9 @@
$: video = get(courseData, 'metadata.videoUrl');
$: allowNewStudent = get(courseData, 'metadata.allowNewStudent');
$: bannerImage = get(courseData, 'logo');
$: lessons = get(courseData, 'lessons', []);
$: lessons = get(courseData, 'lessons', [])
.sort((a, b) => new Date(a.created_at).getTime() - new Date(b.created_at).getTime())
.sort((a, b) => (a.order ?? 0) - (b.order ?? 0));
$: instructor = get(courseData, 'metadata.instructor') || {};
$: initPlyr(player, video);
$: {
@@ -28,7 +28,7 @@ const SLUG_QUERY = `
is_certificate_downloadable,
certificate_theme,
lessons:lesson(
id, title, public, lesson_at, call_url, is_unlocked, order, created_at
id, title, order
)
`;
+3 -2
View File
@@ -19,7 +19,8 @@ export interface GroupPerson {
email: string | null;
group_id: string;
id: string;
profile: Profile;
memberId: string;
profile: Partial<Profile>;
profile_id: string;
role_id: Role['id'];
fullname?: string;
@@ -297,7 +298,7 @@ export interface Lesson {
slide_url?: any; // type unknown;
course_id: string /* foreign key to course.id */;
id: string /* primary key */;
created_at?: string;
created_at: string;
updated_at?: string;
title: string; // type unknown;
public?: boolean;