- You're currently viewing the schedule for section {section} . {
+ You're currently viewing the schedule for section {section} ({time}) . {
setSection(null)
}}>Switch section...
diff --git a/components/AssignmentTable.tsx b/components/AssignmentTable.tsx
new file mode 100644
index 0000000..cb143f7
--- /dev/null
+++ b/components/AssignmentTable.tsx
@@ -0,0 +1,95 @@
+import Link from "next/link"
+import { FormattedDate } from "./FormattedDate"
+import { allAssessments, allHomework } from "contentlayer/generated"
+
+export type Assignment = {
+ title: string
+ href: string
+ isReleased: boolean
+ releaseDate?: Date
+ dates: {
+ name: string
+ date: Date
+ specifyTime: boolean
+ }[]
+ sortDate: Date
+}
+
+export const formattedHomework: Assignment[] = allHomework.map(hw => {
+ const due = new Date(hw.dueDate)
+
+ return {
+ title: hw.title,
+ href: `/assignments/hw/${hw.slug}`,
+ isReleased: hw.isReleased,
+ releaseDate: hw.releaseDate && new Date(hw.releaseDate),
+ dates: [
+ ...(hw.auxiliaryDates ?? []).map(aux => ({
+ name: aux.name,
+ date: new Date(aux.date),
+ specifyTime: true,
+ })),
+ {
+ name: "Due",
+ date: due,
+ specifyTime: true,
+ }
+ ],
+ sortDate: new Date(hw.dueDate),
+ }
+})
+
+export const formattedAssessments = allAssessments.map(a => {
+ const date = new Date(a.assessmentDate)
+
+ return {
+ title: a.title,
+ href: `/assignments/assessment/${a.slug}`,
+ isReleased: a.isReleased,
+ releaseDate: a.releaseDate && new Date(a.releaseDate),
+ dates: [
+ {
+ name: "Scheduled",
+ date,
+ specifyTime: false,
+ }
+ ],
+ sortDate: date,
+ }
+})
+
+export function AssignmentRow({ title, href, isReleased, releaseDate, dates }: Assignment) {
+ let className = "border-b border-neutral-300 dark:border-neutral-600 py-2 last:pb-0 last:border-0 block lg:table-row w-full"
+ if (!isReleased) {
+ className += " opacity-50"
+ }
+
+ return
+
+ {isReleased ?
+ {title} :
+ {title}{releaseDate && <> (available )>} }
+
+
+ {dates.map((item, index) =>
+ {item.name}
+
)}
+
+
+}
+
+export function AssignmentTable({ assignments: raw }: { assignments: Assignment[] }) {
+ const data = raw.toSorted((a, b) => a.sortDate.getTime() - b.sortDate.getTime())
+
+ return
+
+
+ Name
+ Date
+
+
+
+ {data.map(assignment => )}
+
+
+}
\ No newline at end of file
diff --git a/content/homework/hw1.mdx b/content/homework/hw1.mdx
index 758c718..27b7336 100644
--- a/content/homework/hw1.mdx
+++ b/content/homework/hw1.mdx
@@ -3,4 +3,6 @@ title: HW1 - Basic Swift
isReleased: false
dueDate: 2024-01-23T23:59:00-05:00
releaseDate: 2024-01-24T23:59:00-05:00
----
\ No newline at end of file
+---
+
+This content should not appear in the final export.
\ No newline at end of file
diff --git a/contentlayer.config.ts b/contentlayer.config.ts
index 8625842..c2ac838 100644
--- a/contentlayer.config.ts
+++ b/contentlayer.config.ts
@@ -48,6 +48,13 @@ export const Homework = defineDocumentType(() => ({
},
computedFields: {
slug: { type: 'string', resolve: page => page._raw.flattenedPath.slice("homework/".length) },
+ body: {
+ type: 'mdx',
+ resolve(page) {
+ if (page.isReleased) return page.body
+ return undefined
+ },
+ },
},
}))
@@ -63,13 +70,20 @@ export const Assessment = defineDocumentType(() => ({
},
computedFields: {
slug: { type: 'string', resolve: page => page._raw.flattenedPath.slice("assessments/".length) },
+ body: {
+ type: 'mdx',
+ resolve(page) {
+ if (page.isReleased) return page.body
+ return undefined
+ },
+ },
},
}))
const LectureDates = defineNestedType(() => {
const fields = {}
sections.forEach(section => {
- fields[section] = { type: 'date', required: false }
+ fields[section.id] = { type: 'date', required: false }
})
return {
diff --git a/sections.json b/sections.json
index f8da1be..fb3e57d 100644
--- a/sections.json
+++ b/sections.json
@@ -1 +1,10 @@
-["201", "202"]
\ No newline at end of file
+[
+ {
+ "id": "201",
+ "time": "Thursdays 7pm"
+ },
+ {
+ "id": "202",
+ "time": "Mondays 5:15pm"
+ }
+]
\ No newline at end of file