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; id: number | null;
tutors: GroupPerson[]; tutors: GroupPerson[];
students: GroupPerson[]; students: GroupPerson[];
people: GroupPerson[]; people: GroupPerson[];
}>({ members?: GroupPerson[];
};
export const group = writable<GroupStore>({
id: null, id: null,
tutors: [], tutors: [],
students: [], students: [],
@@ -86,46 +89,36 @@ export async function setCourse(data: Course, setLesson = true) {
if (data.group) { if (data.group) {
const groupData = Object.assign(data.group, { const groupData = Object.assign(data.group, {
id: null,
tutors: [], tutors: [],
students: [], students: [],
people: [] people: []
}); }) as GroupStore;
// @ts-ignore
if (Array.isArray(groupData.members)) { if (Array.isArray(groupData.members)) {
// @ts-ignore
for (const member of groupData.members) { for (const member of groupData.members) {
if (member.role_id === ROLE.STUDENT) { if (member.role_id === ROLE.STUDENT) {
// @ts-ignore
groupData.students.push(member); groupData.students.push(member);
} else if (member.profile) { } else if (member.profile) {
// @ts-ignore
groupData.tutors.push({ groupData.tutors.push({
...member.profile, ...member.profile,
memberId: member.id memberId: member.id
}); });
// tutorsById[member.profile.id] = member.profile;
} }
} }
// @ts-ignore
groupData.people = groupData.members; groupData.people = groupData.members;
} }
// @ts-ignore
delete groupData.members; delete groupData.members;
// @ts-ignore
group.set(groupData); group.set(groupData);
} }
if (setLesson) { if (setLesson) {
// @ts-ignore
const orderedLessons = (data.lessons || []) const orderedLessons = (data.lessons || [])
// @ts-ignore .sort((a, b) => new Date(a.created_at).getTime() - new Date(b.created_at).getTime())
.sort((a, b) => new Date(a.created_at) - new Date(b.created_at)) .sort((a, b) => (a.order ?? 0) - (b.order ?? 0));
// @ts-ignore
.sort((a, b) => a.order - b.order);
// .map((lesson) => ({ // .map((lesson) => ({
// ...lesson, // ...lesson,
// profile: lesson.profile && tutorsById[lesson.profile.id], // profile: lesson.profile && tutorsById[lesson.profile.id],
@@ -133,7 +126,6 @@ export async function setCourse(data: Course, setLesson = true) {
lessons.set(orderedLessons); lessons.set(orderedLessons);
} }
//@ts-ignore
delete data.lessons; delete data.lessons;
if (data.metadata && !Object.values(data.metadata)) { if (data.metadata && !Object.values(data.metadata)) {
@@ -90,7 +90,9 @@
$: video = get(courseData, 'metadata.videoUrl'); $: video = get(courseData, 'metadata.videoUrl');
$: allowNewStudent = get(courseData, 'metadata.allowNewStudent'); $: allowNewStudent = get(courseData, 'metadata.allowNewStudent');
$: bannerImage = get(courseData, 'logo'); $: 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') || {}; $: instructor = get(courseData, 'metadata.instructor') || {};
$: initPlyr(player, video); $: initPlyr(player, video);
$: { $: {
@@ -28,7 +28,7 @@ const SLUG_QUERY = `
is_certificate_downloadable, is_certificate_downloadable,
certificate_theme, certificate_theme,
lessons:lesson( 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; email: string | null;
group_id: string; group_id: string;
id: string; id: string;
profile: Profile; memberId: string;
profile: Partial<Profile>;
profile_id: string; profile_id: string;
role_id: Role['id']; role_id: Role['id'];
fullname?: string; fullname?: string;
@@ -297,7 +298,7 @@ export interface Lesson {
slide_url?: any; // type unknown; slide_url?: any; // type unknown;
course_id: string /* foreign key to course.id */; course_id: string /* foreign key to course.id */;
id: string /* primary key */; id: string /* primary key */;
created_at?: string; created_at: string;
updated_at?: string; updated_at?: string;
title: string; // type unknown; title: string; // type unknown;
public?: boolean; public?: boolean;