diff --git a/components/Nav.tsx b/components/Nav.tsx index df55402..87a2227 100644 --- a/components/Nav.tsx +++ b/components/Nav.tsx @@ -27,7 +27,7 @@ export default function NavBar() { - + ); diff --git a/routes/group/[slug].tsx b/routes/group/[slug].tsx index 0c349e3..91f61d5 100644 --- a/routes/group/[slug].tsx +++ b/routes/group/[slug].tsx @@ -19,12 +19,12 @@ export const handler: Handlers = { : parseInt(ctx.params.slug); if (typeof toFind === "number") { - foundCourseGroup = cache.merged.find((c) => { + foundCourseGroup = cache.courses.find((c) => { return "courses" in c && c.courses.length > 0 && c.order === toFind; }); } else { - foundCourseGroup = cache.merged.find((c) => { + foundCourseGroup = cache.courses.find((c) => { return "courses" in c && c.courses.length > 0 && c.label === toFind; }); diff --git a/routes/index.tsx b/routes/index.tsx index ea00df5..e7563f9 100644 --- a/routes/index.tsx +++ b/routes/index.tsx @@ -11,7 +11,7 @@ import IconChevronDown from "https://deno.land/x/tabler_icons_tsx@0.0.5/tsx/chev populateCache(); -export const handler: Handlers<{ merged: (Course | CourseGroup)[] }> = { +export const handler: Handlers<{ courses: (Course | CourseGroup)[] }> = { async GET(_req, ctx) { const courses = await getCourses(cache); return ctx.render(courses); @@ -19,9 +19,9 @@ export const handler: Handlers<{ merged: (Course | CourseGroup)[] }> = { }; export default function BlogIndexPage( - props: PageProps<{ merged: (Course | CourseGroup)[] }>, + props: PageProps<{ courses: (Course | CourseGroup)[] }>, ) { - const { merged } = props.data; + const { courses } = props.data; return ( <> @@ -42,7 +42,7 @@ export default function BlogIndexPage(

المحتوى

- {merged.map((course, index) => { + {courses.map((course, index) => { // Group of courses if ("courses" in course) { return ( diff --git a/utils/course-cache.ts b/utils/course-cache.ts index 0b32599..d9e1f62 100644 --- a/utils/course-cache.ts +++ b/utils/course-cache.ts @@ -1,6 +1,6 @@ import { Course, CourseGroup } from "./types.ts"; import { getCourses } from "./course.ts"; -export const cache: { merged: (Course | CourseGroup)[] } = { merged: [] }; +export const cache: { courses: (Course | CourseGroup)[] } = { courses: [] }; export async function populateCache(): Promise { await getCourses(cache); diff --git a/utils/course.ts b/utils/course.ts index 8eb4f43..902a4a1 100644 --- a/utils/course.ts +++ b/utils/course.ts @@ -44,11 +44,11 @@ export async function getJson( } export async function getCourses( - cache: { merged: (Course | CourseGroup)[] } = { merged: [] }, + cache: { courses: (Course | CourseGroup)[] } = { courses: [] }, ): Promise< - { merged: (Course | CourseGroup)[] } + { courses: (Course | CourseGroup)[] } > { - if (cache.merged.length > 0) { + if (cache.courses.length > 0) { return cache; } @@ -56,6 +56,7 @@ export async function getCourses( const files = Deno.readDir("./courses"); const groups: CourseGroup[] = []; const nonGroups: Course[] = []; + for await (const file of files) { if (file.isDirectory) { const groupSlug = file.name; @@ -71,11 +72,13 @@ export async function getCourses( } } const groupOrder = await getGroupOrder(join("./courses", groupSlug)); - groups.push({ - courses: groupPromises, - order: groupOrder?.order, - label: groupOrder?.label, - }); + if (groupOrder) { + groups.push({ + courses: groupPromises, + order: groupOrder.order, + label: groupOrder.label, + }); + } } else if (file.name.endsWith(".md")) { const slug = file.name.replace(".md", ""); const course = await getCourse(slug); @@ -87,6 +90,6 @@ export async function getCourses( const merged: (Course | CourseGroup)[] = [...nonGroups, ...groups]; merged.sort((a, b) => (a.order || 999) - (b.order || 999)); - cache.merged = merged; + cache.courses = merged; return cache; } diff --git a/utils/types.ts b/utils/types.ts index ddeb9bf..0fdc8ab 100644 --- a/utils/types.ts +++ b/utils/types.ts @@ -8,12 +8,12 @@ export interface Course { export interface CourseGroup { courses: Course[]; - order?: number; - label?: string; + order: number; + label: string; } export interface CourseAttributes { - title?: string; - snippet?: string; - order?: number; + title: string; + snippet: string; + order: number; }