chore: simplify course fetching
This commit is contained in:
@@ -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
|
||||||
)
|
)
|
||||||
`;
|
`;
|
||||||
|
|
||||||
|
|||||||
@@ -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;
|
||||||
|
|||||||
Reference in New Issue
Block a user