From ad4b059a17429a5297f13a04a5c169d9dd7c6957 Mon Sep 17 00:00:00 2001 From: Alex Mickelson Date: Sat, 4 Jan 2025 12:07:06 -0700 Subject: [PATCH] restoring page titles --- src/app/course/[courseName]/CourseTitle.tsx | 10 ---------- src/app/course/[courseName]/layout.tsx | 13 +++++++++++++ .../lecture/[lectureDay]/layout.tsx | 15 +++++++++++++++ .../assignment/[assignmentName]/layout.tsx | 1 + .../assignment/[assignmentName]/page.tsx | 18 ++++++++++++++++++ .../[moduleName]/page/[pageName]/page.tsx | 18 ++++++++++++++++++ .../[moduleName]/quiz/[quizName]/page.tsx | 18 ++++++++++++++++++ src/app/course/[courseName]/page.tsx | 3 +-- src/app/course/[courseName]/settings/page.tsx | 13 +++++++++++++ src/app/layout.tsx | 3 ++- src/services/titleUtils.ts | 6 ++++++ 11 files changed, 105 insertions(+), 13 deletions(-) delete mode 100644 src/app/course/[courseName]/CourseTitle.tsx create mode 100644 src/services/titleUtils.ts diff --git a/src/app/course/[courseName]/CourseTitle.tsx b/src/app/course/[courseName]/CourseTitle.tsx deleted file mode 100644 index c4b11a5..0000000 --- a/src/app/course/[courseName]/CourseTitle.tsx +++ /dev/null @@ -1,10 +0,0 @@ -"use client" - -import { useCourseContext } from "./context/courseContext" - -export default function CourseTitle() { - const {courseName}= useCourseContext() - return ( - {(process.env.NEXT_PUBLIC_TITLE_PREFIX ?? "")}{courseName} - ) -} diff --git a/src/app/course/[courseName]/layout.tsx b/src/app/course/[courseName]/layout.tsx index 656204a..88b2118 100644 --- a/src/app/course/[courseName]/layout.tsx +++ b/src/app/course/[courseName]/layout.tsx @@ -1,5 +1,18 @@ import { Suspense } from "react"; import CourseContextProvider from "./context/CourseContextProvider"; +import { Metadata } from "next"; +import { getTitle } from "@/services/titleUtils"; + +export async function generateMetadata({ + params, +}: { + params: Promise<{ courseName: string }>; +}): Promise { + const { courseName } = await params; + return { + title: getTitle(courseName), + }; +} export default async function CourseLayout({ children, diff --git a/src/app/course/[courseName]/lecture/[lectureDay]/layout.tsx b/src/app/course/[courseName]/lecture/[lectureDay]/layout.tsx index 8261553..956bc1f 100644 --- a/src/app/course/[courseName]/lecture/[lectureDay]/layout.tsx +++ b/src/app/course/[courseName]/lecture/[lectureDay]/layout.tsx @@ -1,5 +1,20 @@ import { Suspense } from "react"; import CourseContextProvider from "../../context/CourseContextProvider"; +import { Metadata } from "next"; +import { getTitle } from "@/services/titleUtils"; + +export async function generateMetadata({ + params, +}: { + params: Promise<{ courseName: string; lectureDay: string }>; +}): Promise { + const { courseName, lectureDay } = await params; + const decodedDay = decodeURIComponent(lectureDay); + const dayOnly = decodedDay.split(" ")[0]; + return { + title: getTitle(`${courseName} lecture ${dayOnly}`), + }; +} export default async function LectureLayout({ children, diff --git a/src/app/course/[courseName]/modules/[moduleName]/assignment/[assignmentName]/layout.tsx b/src/app/course/[courseName]/modules/[moduleName]/assignment/[assignmentName]/layout.tsx index 1736e6e..2ccccdd 100644 --- a/src/app/course/[courseName]/modules/[moduleName]/assignment/[assignmentName]/layout.tsx +++ b/src/app/course/[courseName]/modules/[moduleName]/assignment/[assignmentName]/layout.tsx @@ -1,5 +1,6 @@ import React, { ReactNode, Suspense } from "react"; + export default function layout({ children }: { children: ReactNode }) { return {children}; } diff --git a/src/app/course/[courseName]/modules/[moduleName]/assignment/[assignmentName]/page.tsx b/src/app/course/[courseName]/modules/[moduleName]/assignment/[assignmentName]/page.tsx index 1e58658..c1936b6 100644 --- a/src/app/course/[courseName]/modules/[moduleName]/assignment/[assignmentName]/page.tsx +++ b/src/app/course/[courseName]/modules/[moduleName]/assignment/[assignmentName]/page.tsx @@ -1,5 +1,23 @@ import React from "react"; import EditAssignment from "./EditAssignment"; +import { Metadata } from "next"; +import { getTitle } from "@/services/titleUtils"; + +export async function generateMetadata({ + params, +}: { + params: Promise<{ + courseName: string; + assignmentName: string; + moduleName: string; + }>; +}): Promise { + const { courseName, assignmentName } = await params; + const decodedAssignmentName = decodeURIComponent(assignmentName); + return { + title: getTitle(`${decodedAssignmentName}, ${courseName}`), + }; +} export default async function Page({ params, diff --git a/src/app/course/[courseName]/modules/[moduleName]/page/[pageName]/page.tsx b/src/app/course/[courseName]/modules/[moduleName]/page/[pageName]/page.tsx index 5a8a9fe..59672fa 100644 --- a/src/app/course/[courseName]/modules/[moduleName]/page/[pageName]/page.tsx +++ b/src/app/course/[courseName]/modules/[moduleName]/page/[pageName]/page.tsx @@ -1,5 +1,23 @@ import React from "react"; import EditPage from "./EditPage"; +import { getTitle } from "@/services/titleUtils"; +import { Metadata } from "next"; + +export async function generateMetadata({ + params, +}: { + params: Promise<{ + courseName: string; + pageName: string; + moduleName: string; + }>; +}): Promise { + const { courseName, pageName } = await params; + const decodedPageName = decodeURIComponent(pageName); + return { + title: getTitle(`${decodedPageName}, ${courseName}`), + }; +} export default async function Page({ params, diff --git a/src/app/course/[courseName]/modules/[moduleName]/quiz/[quizName]/page.tsx b/src/app/course/[courseName]/modules/[moduleName]/quiz/[quizName]/page.tsx index 18cef08..946ca9e 100644 --- a/src/app/course/[courseName]/modules/[moduleName]/quiz/[quizName]/page.tsx +++ b/src/app/course/[courseName]/modules/[moduleName]/quiz/[quizName]/page.tsx @@ -1,5 +1,23 @@ import React from "react"; import EditQuiz from "./EditQuiz"; +import { getTitle } from "@/services/titleUtils"; +import { Metadata } from "next"; + +export async function generateMetadata({ + params, +}: { + params: Promise<{ + courseName: string; + quizName: string; + moduleName: string; + }>; +}): Promise { + const { courseName, quizName } = await params; + const decodedQuizName = decodeURIComponent(quizName); + return { + title: getTitle(`${decodedQuizName}, ${courseName}`), + }; +} export default async function Page({ params, diff --git a/src/app/course/[courseName]/page.tsx b/src/app/course/[courseName]/page.tsx index 23b2625..173ac33 100644 --- a/src/app/course/[courseName]/page.tsx +++ b/src/app/course/[courseName]/page.tsx @@ -2,14 +2,13 @@ import CourseCalendar from "./calendar/CourseCalendar"; import CourseSettingsLink from "./CourseSettingsLink"; import ModuleList from "./modules/ModuleList"; import DraggingContextProvider from "./context/drag/DraggingContextProvider"; -import CourseTitle from "./CourseTitle"; import { CourseNavigation } from "./CourseNavigation"; import { DragStyleContextProvider } from "./context/drag/dragStyleContext"; + export default async function CoursePage({}: {}) { return ( <> -
diff --git a/src/app/course/[courseName]/settings/page.tsx b/src/app/course/[courseName]/settings/page.tsx index 6851ad5..f86d76c 100644 --- a/src/app/course/[courseName]/settings/page.tsx +++ b/src/app/course/[courseName]/settings/page.tsx @@ -1,4 +1,17 @@ +import { Metadata } from "next"; import AllSettings from "./AllSettings"; +import { getTitle } from "@/services/titleUtils"; + +export async function generateMetadata({ + params, +}: { + params: Promise<{ courseName: string }>; +}): Promise { + const { courseName } = await params; + return { + title: getTitle(courseName) + " Settings", + }; +} export default function page() { return ( diff --git a/src/app/layout.tsx b/src/app/layout.tsx index b325533..b318445 100644 --- a/src/app/layout.tsx +++ b/src/app/layout.tsx @@ -10,10 +10,11 @@ import { createTrpcContext } from "@/services/serverFunctions/context"; import superjson from "superjson"; import { fileStorageService } from "@/services/fileStorage/fileStorageService"; import { ClientCacheInvalidation } from "../components/realtime/ClientCacheInvalidation"; +import { getTitle } from "@/services/titleUtils"; export const dynamic = "force-dynamic"; export const metadata: Metadata = { - title: (process.env.NEXT_PUBLIC_TITLE_PREFIX ?? "") + "Canvas Manager 2.0", + title: getTitle("Canvas Manager 2.0"), }; export default async function RootLayout({ diff --git a/src/services/titleUtils.ts b/src/services/titleUtils.ts new file mode 100644 index 0000000..65b565a --- /dev/null +++ b/src/services/titleUtils.ts @@ -0,0 +1,6 @@ +export function getTitle(title: string) { + const prefix = process.env.NEXT_PUBLIC_TITLE_PREFIX + ? process.env.NEXT_PUBLIC_TITLE_PREFIX + " " + : ""; + return `${prefix}${title}`; +}