mirror of
https://github.com/alexmickelson/canvasManagement.git
synced 2026-03-27 07:58:31 -06:00
84 lines
2.3 KiB
TypeScript
84 lines
2.3 KiB
TypeScript
import { CalendarItemsInterface } from "../context/calendarItemsContext";
|
|
import { getLectureUrl, getModuleItemUrl } from "@/services/urlUtils";
|
|
|
|
export type CourseItemType = "assignment" | "quiz" | "page" | "lecture";
|
|
|
|
export interface OrderedCourseItem {
|
|
type: CourseItemType;
|
|
name: string;
|
|
moduleName?: string;
|
|
date: string;
|
|
url: string;
|
|
}
|
|
|
|
export function getOrderedItems(
|
|
courseName: string,
|
|
...calendars: CalendarItemsInterface[]
|
|
): OrderedCourseItem[] {
|
|
const itemTypes = [
|
|
{ key: "assignments" as const, type: "assignment" as const },
|
|
{ key: "quizzes" as const, type: "quiz" as const },
|
|
{ key: "pages" as const, type: "page" as const },
|
|
];
|
|
|
|
return calendars
|
|
.flatMap((calendar) =>
|
|
Object.entries(calendar).flatMap(([date, modules]) =>
|
|
Object.entries(modules).flatMap(([moduleName, moduleData]) =>
|
|
itemTypes.flatMap(({ key, type }) =>
|
|
(moduleData[key] || []).map((item) => ({
|
|
type,
|
|
name: item.name,
|
|
moduleName,
|
|
date,
|
|
url: getModuleItemUrl(courseName, moduleName, type, item.name),
|
|
}))
|
|
)
|
|
)
|
|
)
|
|
)
|
|
.sort((a, b) => {
|
|
const dateCompare = a.date.localeCompare(b.date);
|
|
if (dateCompare !== 0) return dateCompare;
|
|
return a.name.localeCompare(b.name);
|
|
});
|
|
}
|
|
|
|
export function getOrderedLectures(
|
|
weeks: { lectures: { date: string }[] }[],
|
|
courseName: string
|
|
): OrderedCourseItem[] {
|
|
return weeks
|
|
.flatMap((week) => week.lectures)
|
|
.map((lecture) => ({
|
|
type: "lecture",
|
|
name: lecture.date,
|
|
date: lecture.date,
|
|
url: getLectureUrl(courseName, lecture.date),
|
|
}));
|
|
}
|
|
|
|
export function getNavigationLinks(
|
|
list: OrderedCourseItem[],
|
|
type: CourseItemType,
|
|
name: string,
|
|
moduleName?: string
|
|
) {
|
|
const index = list.findIndex((item) => {
|
|
if (type === "lecture") return item.date === name;
|
|
return (
|
|
item.name === name && item.type === type && item.moduleName === moduleName
|
|
);
|
|
});
|
|
|
|
if (index === -1) return { previousUrl: null, nextUrl: null };
|
|
|
|
const previousIndex = (index - 1 + list.length) % list.length;
|
|
const nextIndex = (index + 1) % list.length;
|
|
|
|
return {
|
|
previousUrl: list[previousIndex].url,
|
|
nextUrl: list[nextIndex].url,
|
|
};
|
|
}
|