From 026ca3846fdfb0df7fb484cd60870a1ebe841e95 Mon Sep 17 00:00:00 2001 From: Alex Mickelson Date: Fri, 8 Nov 2024 16:01:41 -0700 Subject: [PATCH] starting to move over settings --- nextjs/src/app/api/canvas/[...rest]/route.ts | 33 ++++---- .../course/[courseName]/CourseNavigation.tsx | 2 +- .../[courseName]/CourseSettingsLink.tsx | 8 +- .../[courseName]/calendar/CalendarWeek.tsx | 2 +- .../[courseName]/calendar/CourseCalendar.tsx | 2 +- .../course/[courseName]/calendar/day/Day.tsx | 2 +- .../context/drag/useItemDropOnDay.ts | 2 +- .../lecture/[lectureDay]/EditLectureTitle.tsx | 7 +- .../lecture/[lectureDay]/LectureButtons.tsx | 2 +- .../[courseName]/modules/ModuleList.tsx | 4 +- .../[courseName]/modules/NewItemForm.tsx | 2 +- .../[assignmentName]/AssignmentButtons.tsx | 2 +- .../[assignmentName]/EditAssignment.tsx | 2 +- .../[moduleName]/page/[pageName]/EditPage.tsx | 2 +- .../page/[pageName]/EditPageButtons.tsx | 2 +- .../quiz/[quizName]/QuizButton.tsx | 7 +- .../settings/AssignmentGroupManagement.tsx | 2 +- .../settings/DaysOfWeekSettings.tsx | 2 +- .../[courseName]/settings/DefaultDueTime.tsx | 2 +- .../settings/DefaultFileUploadTypes.tsx | 2 +- .../settings/DefaultLockOffset.tsx | 2 +- .../[courseName]/settings/HolidayConfig.tsx | 2 +- .../[courseName]/settings/SettingsHeader.tsx | 13 ++-- .../[courseName]/settings/StartAndEndDate.tsx | 2 +- .../settings/SubmissionDefaults.tsx | 4 +- nextjs/src/app/layout.tsx | 51 +++++++++++- nextjs/src/app/page.tsx | 77 ++++--------------- .../src/hooks/canvas/canvasAssignmentHooks.ts | 10 +-- nextjs/src/hooks/canvas/canvasModuleHooks.ts | 4 +- nextjs/src/hooks/canvas/canvasPageHooks.ts | 8 +- nextjs/src/hooks/canvas/canvasQuizHooks.ts | 11 ++- nextjs/src/hooks/localCourse/lectureHooks.ts | 2 +- .../hooks/localCourse/localCoursesHooks.ts | 40 +++++----- nextjs/src/services/trpc/router/app.ts | 2 + .../services/trpc/router/settingsRouter.ts | 26 +++++++ 35 files changed, 188 insertions(+), 155 deletions(-) create mode 100644 nextjs/src/services/trpc/router/settingsRouter.ts diff --git a/nextjs/src/app/api/canvas/[...rest]/route.ts b/nextjs/src/app/api/canvas/[...rest]/route.ts index b1c5385..7fef3ce 100644 --- a/nextjs/src/app/api/canvas/[...rest]/route.ts +++ b/nextjs/src/app/api/canvas/[...rest]/route.ts @@ -1,25 +1,24 @@ import { NextRequest, NextResponse } from "next/server"; import { axiosClient } from "@/services/axiosUtils"; import { withErrorHandling } from "@/services/withErrorHandling"; -import { - isAxiosError, -} from "axios"; - +import { isAxiosError } from "axios"; const appendQueryParams = (url: URL, req: NextRequest) => { req.nextUrl.searchParams.forEach((value, key) => { url.searchParams.set(key, value); }); }; + const getUrl = (params: { rest: string[] }, req: NextRequest) => { const { rest } = params; const path = rest.join("/"); const newUrl = `https://snow.instructure.com/api/v1/${path}`; const url = new URL(newUrl); - + appendQueryParams(url, req); - - return url;}; + + return url; +}; const proxyResponseHeaders = (response: any) => { const headers = new Headers(); @@ -31,15 +30,13 @@ const proxyResponseHeaders = (response: any) => { export async function GET( req: NextRequest, - { params }: { params: { rest: string[] } } + { params }: { params: Promise<{ rest: string[] }> } ) { return withErrorHandling(async () => { try { - const url = getUrl(params, req); + const url = getUrl(await params, req); - const response = await axiosClient.get( - url.toString() - ); + const response = await axiosClient.get(url.toString()); const headers = proxyResponseHeaders(response); return new NextResponse(JSON.stringify(response.data), { headers }); @@ -54,10 +51,10 @@ export async function GET( export async function POST( req: NextRequest, - { params }: { params: { rest: string[] } } + { params }: { params: Promise<{ rest: string[] }> } ) { return withErrorHandling(async () => { - const url = getUrl(params, req); + const url = getUrl(await params, req); const body = await req.json(); let response; try { @@ -83,10 +80,10 @@ export async function POST( export async function PUT( req: NextRequest, - { params }: { params: { rest: string[] } } + { params }: { params: Promise<{ rest: string[] }> } ) { return withErrorHandling(async () => { - const url = getUrl(params, req); + const url = getUrl(await params, req); const body = await req.json(); try { const response = await axiosClient.put(url.toString(), body); @@ -118,11 +115,11 @@ export async function PUT( export async function DELETE( req: NextRequest, - { params }: { params: { rest: string[] } } + { params }: { params: Promise<{ rest: string[] }> } ) { return withErrorHandling(async () => { try { - const url = getUrl(params, req); + const url = getUrl(await params, req); const response = await axiosClient.delete(url.toString()); const headers = proxyResponseHeaders(response); diff --git a/nextjs/src/app/course/[courseName]/CourseNavigation.tsx b/nextjs/src/app/course/[courseName]/CourseNavigation.tsx index 4bef877..91cee54 100644 --- a/nextjs/src/app/course/[courseName]/CourseNavigation.tsx +++ b/nextjs/src/app/course/[courseName]/CourseNavigation.tsx @@ -3,7 +3,7 @@ import { useLocalCourseSettingsQuery } from "@/hooks/localCourse/localCoursesHoo import Link from "next/link"; export function CourseNavigation() { - const { data: settings } = useLocalCourseSettingsQuery(); + const [settings] = useLocalCourseSettingsQuery(); return (
diff --git a/nextjs/src/app/course/[courseName]/CourseSettingsLink.tsx b/nextjs/src/app/course/[courseName]/CourseSettingsLink.tsx index 5075e28..c18d319 100644 --- a/nextjs/src/app/course/[courseName]/CourseSettingsLink.tsx +++ b/nextjs/src/app/course/[courseName]/CourseSettingsLink.tsx @@ -7,12 +7,16 @@ import { getCourseSettingsUrl } from "@/services/urlUtils"; export default function CourseSettingsLink() { const { courseName } = useCourseContext(); - const { data: settings } = useLocalCourseSettingsQuery(); + const [settings] = useLocalCourseSettingsQuery(); return (
{settings.name} - + Course Settings
diff --git a/nextjs/src/app/course/[courseName]/calendar/CalendarWeek.tsx b/nextjs/src/app/course/[courseName]/calendar/CalendarWeek.tsx index bd471cb..ba5ee65 100644 --- a/nextjs/src/app/course/[courseName]/calendar/CalendarWeek.tsx +++ b/nextjs/src/app/course/[courseName]/calendar/CalendarWeek.tsx @@ -11,7 +11,7 @@ export function CalendarWeek({ week: string[]; //date strings monthNumber: number; }) { - const { data: settings } = useLocalCourseSettingsQuery(); + const [settings]= useLocalCourseSettingsQuery(); const startDate = getDateFromStringOrThrow( settings.startDate, "week calculation start date" diff --git a/nextjs/src/app/course/[courseName]/calendar/CourseCalendar.tsx b/nextjs/src/app/course/[courseName]/calendar/CourseCalendar.tsx index 5af8753..33429ef 100644 --- a/nextjs/src/app/course/[courseName]/calendar/CourseCalendar.tsx +++ b/nextjs/src/app/course/[courseName]/calendar/CourseCalendar.tsx @@ -7,7 +7,7 @@ import { useMemo } from "react"; import CalendarItemsContextProvider from "../context/CalendarItemsContextProvider"; export default function CourseCalendar() { - const { data: settings } = useLocalCourseSettingsQuery(); + const [settings] = useLocalCourseSettingsQuery(); const startDateTime = useMemo( () => getDateFromStringOrThrow(settings.startDate, "course start date"), diff --git a/nextjs/src/app/course/[courseName]/calendar/day/Day.tsx b/nextjs/src/app/course/[courseName]/calendar/day/Day.tsx index f962c4e..a2f1328 100644 --- a/nextjs/src/app/course/[courseName]/calendar/day/Day.tsx +++ b/nextjs/src/app/course/[courseName]/calendar/day/Day.tsx @@ -19,7 +19,7 @@ export default function Day({ day, month }: { day: string; month: number }) { getDateOnlyMarkdownString(new Date()) === getDateOnlyMarkdownString(dayAsDate); - const { data: settings } = useLocalCourseSettingsQuery(); + const [settings] = useLocalCourseSettingsQuery(); const { itemDropOnDay } = useDraggingContext(); const { todaysAssignments, todaysQuizzes, todaysPages } = useTodaysItems(day); diff --git a/nextjs/src/app/course/[courseName]/context/drag/useItemDropOnDay.ts b/nextjs/src/app/course/[courseName]/context/drag/useItemDropOnDay.ts index f7f1ba3..7cdc831 100644 --- a/nextjs/src/app/course/[courseName]/context/drag/useItemDropOnDay.ts +++ b/nextjs/src/app/course/[courseName]/context/drag/useItemDropOnDay.ts @@ -32,7 +32,7 @@ export function useItemDropOnDay({ setIsLoading: Dispatch>; modal: { isOpen: boolean; openModal: () => void; closeModal: () => void }; }) { - const { data: settings } = useLocalCourseSettingsQuery(); + const [settings] = useLocalCourseSettingsQuery(); // const { data: weeks } = useLecturesByWeekQuery(); const [weeks] = trpc.lectures.getLectures.useSuspenseQuery({ courseName: settings.name, diff --git a/nextjs/src/app/course/[courseName]/lecture/[lectureDay]/EditLectureTitle.tsx b/nextjs/src/app/course/[courseName]/lecture/[lectureDay]/EditLectureTitle.tsx index e48a246..6621a95 100644 --- a/nextjs/src/app/course/[courseName]/lecture/[lectureDay]/EditLectureTitle.tsx +++ b/nextjs/src/app/course/[courseName]/lecture/[lectureDay]/EditLectureTitle.tsx @@ -11,17 +11,14 @@ export default function EditLectureTitle({ }: { lectureDay: string; }) { - const { data: settings } = useLocalCourseSettingsQuery(); + const [settings] = useLocalCourseSettingsQuery(); const { courseName } = useCourseContext(); const lectureDate = getDateFromString(lectureDay); const lectureWeekName = getLectureWeekName(settings.startDate, lectureDay); return (
- + {courseName}
diff --git a/nextjs/src/app/course/[courseName]/lecture/[lectureDay]/LectureButtons.tsx b/nextjs/src/app/course/[courseName]/lecture/[lectureDay]/LectureButtons.tsx index f058c36..f9222ad 100644 --- a/nextjs/src/app/course/[courseName]/lecture/[lectureDay]/LectureButtons.tsx +++ b/nextjs/src/app/course/[courseName]/lecture/[lectureDay]/LectureButtons.tsx @@ -14,7 +14,7 @@ import { lectureKeys } from "@/hooks/localCourse/lectureKeys"; export default function LectureButtons({ lectureDay }: { lectureDay: string }) { const queryClient = useQueryClient(); const { courseName } = useCourseContext(); - const { data: settings } = useLocalCourseSettingsQuery(); + const [settings] = useLocalCourseSettingsQuery(); const router = useRouter(); const [isLoading, setIsLoading] = useState(false); const modal = useModal(); diff --git a/nextjs/src/app/course/[courseName]/modules/ModuleList.tsx b/nextjs/src/app/course/[courseName]/modules/ModuleList.tsx index f7b7c15..8bba203 100644 --- a/nextjs/src/app/course/[courseName]/modules/ModuleList.tsx +++ b/nextjs/src/app/course/[courseName]/modules/ModuleList.tsx @@ -7,9 +7,9 @@ export default function ModuleList() { const { data: moduleNames } = useModuleNamesQuery(); return (
- {moduleNames.map((m) => ( + {/* {moduleNames.map((m) => ( - ))} + ))} */}
diff --git a/nextjs/src/app/course/[courseName]/modules/NewItemForm.tsx b/nextjs/src/app/course/[courseName]/modules/NewItemForm.tsx index 107f6a7..46db811 100644 --- a/nextjs/src/app/course/[courseName]/modules/NewItemForm.tsx +++ b/nextjs/src/app/course/[courseName]/modules/NewItemForm.tsx @@ -27,7 +27,7 @@ export default function NewItemForm({ creationDate?: string; onCreate?: () => void; }) { - const { data: settings } = useLocalCourseSettingsQuery(); + const [settings] = useLocalCourseSettingsQuery(); const { courseName } = useCourseContext(); const { data: modules } = useModuleNamesQuery(); const [type, setType] = useState<"Assignment" | "Quiz" | "Page">( diff --git a/nextjs/src/app/course/[courseName]/modules/[moduleName]/assignment/[assignmentName]/AssignmentButtons.tsx b/nextjs/src/app/course/[courseName]/modules/[moduleName]/assignment/[assignmentName]/AssignmentButtons.tsx index ee497d6..34028ad 100644 --- a/nextjs/src/app/course/[courseName]/modules/[moduleName]/assignment/[assignmentName]/AssignmentButtons.tsx +++ b/nextjs/src/app/course/[courseName]/modules/[moduleName]/assignment/[assignmentName]/AssignmentButtons.tsx @@ -29,7 +29,7 @@ export function AssignmentButtons({ }) { const router = useRouter(); const { courseName } = useCourseContext(); - const { data: settings } = useLocalCourseSettingsQuery(); + const [settings] = useLocalCourseSettingsQuery(); const { data: canvasAssignments, isPending: canvasIsPending, diff --git a/nextjs/src/app/course/[courseName]/modules/[moduleName]/assignment/[assignmentName]/EditAssignment.tsx b/nextjs/src/app/course/[courseName]/modules/[moduleName]/assignment/[assignmentName]/EditAssignment.tsx index 8b9f357..cd4fd68 100644 --- a/nextjs/src/app/course/[courseName]/modules/[moduleName]/assignment/[assignmentName]/EditAssignment.tsx +++ b/nextjs/src/app/course/[courseName]/modules/[moduleName]/assignment/[assignmentName]/EditAssignment.tsx @@ -26,7 +26,7 @@ export default function EditAssignment({ }) { const router = useRouter(); const { courseName } = useCourseContext(); - const { data: settings } = useLocalCourseSettingsQuery(); + const [settings] = useLocalCourseSettingsQuery(); const [assignment] = useAssignmentQuery(moduleName, assignmentName); const updateAssignment = useUpdateAssignmentMutation(); diff --git a/nextjs/src/app/course/[courseName]/modules/[moduleName]/page/[pageName]/EditPage.tsx b/nextjs/src/app/course/[courseName]/modules/[moduleName]/page/[pageName]/EditPage.tsx index e25e619..8033413 100644 --- a/nextjs/src/app/course/[courseName]/modules/[moduleName]/page/[pageName]/EditPage.tsx +++ b/nextjs/src/app/course/[courseName]/modules/[moduleName]/page/[pageName]/EditPage.tsx @@ -30,7 +30,7 @@ export default function EditPage({ localPageMarkdownUtils.toMarkdown(page) ); const [error, setError] = useState(""); - const { data: settings } = useLocalCourseSettingsQuery(); + const [settings] = useLocalCourseSettingsQuery(); useEffect(() => { const delay = 500; diff --git a/nextjs/src/app/course/[courseName]/modules/[moduleName]/page/[pageName]/EditPageButtons.tsx b/nextjs/src/app/course/[courseName]/modules/[moduleName]/page/[pageName]/EditPageButtons.tsx index bf9329a..5cd4c16 100644 --- a/nextjs/src/app/course/[courseName]/modules/[moduleName]/page/[pageName]/EditPageButtons.tsx +++ b/nextjs/src/app/course/[courseName]/modules/[moduleName]/page/[pageName]/EditPageButtons.tsx @@ -27,7 +27,7 @@ export default function EditPageButtons({ }) { const router = useRouter(); const { courseName } = useCourseContext(); - const { data: settings } = useLocalCourseSettingsQuery(); + const [settings] = useLocalCourseSettingsQuery(); const { data: page } = usePageQuery(moduleName, pageName); const { data: canvasPages } = useCanvasPagesQuery(); const createPageInCanvas = useCreateCanvasPageMutation(); diff --git a/nextjs/src/app/course/[courseName]/modules/[moduleName]/quiz/[quizName]/QuizButton.tsx b/nextjs/src/app/course/[courseName]/modules/[moduleName]/quiz/[quizName]/QuizButton.tsx index 63c271a..0191347 100644 --- a/nextjs/src/app/course/[courseName]/modules/[moduleName]/quiz/[quizName]/QuizButton.tsx +++ b/nextjs/src/app/course/[courseName]/modules/[moduleName]/quiz/[quizName]/QuizButton.tsx @@ -6,7 +6,10 @@ import { useAddQuizToCanvasMutation, useDeleteQuizFromCanvasMutation, } from "@/hooks/canvas/canvasQuizHooks"; -import { useDeleteItemMutation, useItemQuery } from "@/hooks/localCourse/courseItemHooks"; +import { + useDeleteItemMutation, + useItemQuery, +} from "@/hooks/localCourse/courseItemHooks"; import { useLocalCourseSettingsQuery } from "@/hooks/localCourse/localCoursesHooks"; import { baseCanvasUrl } from "@/services/canvas/canvasServiceUtils"; import { getCourseUrl } from "@/services/urlUtils"; @@ -24,7 +27,7 @@ export function QuizButtons({ }) { const router = useRouter(); const { courseName } = useCourseContext(); - const { data: settings } = useLocalCourseSettingsQuery(); + const [settings] = useLocalCourseSettingsQuery(); const { data: canvasQuizzes } = useCanvasQuizzesQuery(); const { data: quiz } = useItemQuery(moduleName, quizName, "Quiz"); const addToCanvas = useAddQuizToCanvasMutation(); diff --git a/nextjs/src/app/course/[courseName]/settings/AssignmentGroupManagement.tsx b/nextjs/src/app/course/[courseName]/settings/AssignmentGroupManagement.tsx index 88f37ae..3cd03c6 100644 --- a/nextjs/src/app/course/[courseName]/settings/AssignmentGroupManagement.tsx +++ b/nextjs/src/app/course/[courseName]/settings/AssignmentGroupManagement.tsx @@ -10,7 +10,7 @@ import TextInput from "../../../../components/form/TextInput"; import { useSetAssignmentGroupsMutation } from "@/hooks/canvas/canvasCourseHooks"; export default function AssignmentGroupManagement() { - const { data: settings } = useLocalCourseSettingsQuery(); + const [settings] = useLocalCourseSettingsQuery(); const updateSettings = useUpdateLocalCourseSettingsMutation(); const applyInCanvas = useSetAssignmentGroupsMutation(settings.canvasId); // untested diff --git a/nextjs/src/app/course/[courseName]/settings/DaysOfWeekSettings.tsx b/nextjs/src/app/course/[courseName]/settings/DaysOfWeekSettings.tsx index 06d4ce0..15a2e81 100644 --- a/nextjs/src/app/course/[courseName]/settings/DaysOfWeekSettings.tsx +++ b/nextjs/src/app/course/[courseName]/settings/DaysOfWeekSettings.tsx @@ -8,7 +8,7 @@ import { import React from "react"; export default function DaysOfWeekSettings() { - const { data: settings } = useLocalCourseSettingsQuery(); + const [settings] = useLocalCourseSettingsQuery(); const updateSettings = useUpdateLocalCourseSettingsMutation(); return ( diff --git a/nextjs/src/app/course/[courseName]/settings/DefaultDueTime.tsx b/nextjs/src/app/course/[courseName]/settings/DefaultDueTime.tsx index 058d92d..61500c9 100644 --- a/nextjs/src/app/course/[courseName]/settings/DefaultDueTime.tsx +++ b/nextjs/src/app/course/[courseName]/settings/DefaultDueTime.tsx @@ -9,7 +9,7 @@ import { useState } from "react"; import DefaultLockOffset from "./DefaultLockOffset"; export default function DefaultDueTime() { - const { data: settings } = useLocalCourseSettingsQuery(); + const [settings] = useLocalCourseSettingsQuery(); const updateSettings = useUpdateLocalCourseSettingsMutation(); const [haveLockOffset, setHaveLockOffset] = useState( !!settings.defaultLockHoursOffset diff --git a/nextjs/src/app/course/[courseName]/settings/DefaultFileUploadTypes.tsx b/nextjs/src/app/course/[courseName]/settings/DefaultFileUploadTypes.tsx index c697571..cb3ca49 100644 --- a/nextjs/src/app/course/[courseName]/settings/DefaultFileUploadTypes.tsx +++ b/nextjs/src/app/course/[courseName]/settings/DefaultFileUploadTypes.tsx @@ -7,7 +7,7 @@ import { import { useState, useEffect } from "react"; export default function DefaultFileUploadTypes() { - const { data: settings } = useLocalCourseSettingsQuery(); + const [settings] = useLocalCourseSettingsQuery(); const [defaultFileUploadTypes, setDefaultFileUploadTypes] = useState< string[] >(settings.defaultFileUploadTypes); diff --git a/nextjs/src/app/course/[courseName]/settings/DefaultLockOffset.tsx b/nextjs/src/app/course/[courseName]/settings/DefaultLockOffset.tsx index e9b5bb9..059f419 100644 --- a/nextjs/src/app/course/[courseName]/settings/DefaultLockOffset.tsx +++ b/nextjs/src/app/course/[courseName]/settings/DefaultLockOffset.tsx @@ -8,7 +8,7 @@ import { import { useEffect, useState } from "react"; export default function DefaultLockOffset() { - const { data: settings } = useLocalCourseSettingsQuery(); + const [settings] = useLocalCourseSettingsQuery(); const updateSettings = useUpdateLocalCourseSettingsMutation(); const [hoursOffset, setHoursOffset] = useState( settings.defaultLockHoursOffset?.toString() ?? "0" diff --git a/nextjs/src/app/course/[courseName]/settings/HolidayConfig.tsx b/nextjs/src/app/course/[courseName]/settings/HolidayConfig.tsx index 57b4bd3..8b5117a 100644 --- a/nextjs/src/app/course/[courseName]/settings/HolidayConfig.tsx +++ b/nextjs/src/app/course/[courseName]/settings/HolidayConfig.tsx @@ -62,7 +62,7 @@ export default function HolidayConfig() { ); } function InnerHolidayConfig() { - const { data: settings } = useLocalCourseSettingsQuery(); + const [settings] = useLocalCourseSettingsQuery(); console.log(settings.holidays); const updateSettings = useUpdateLocalCourseSettingsMutation(); diff --git a/nextjs/src/app/course/[courseName]/settings/SettingsHeader.tsx b/nextjs/src/app/course/[courseName]/settings/SettingsHeader.tsx index 274a47b..83d32d7 100644 --- a/nextjs/src/app/course/[courseName]/settings/SettingsHeader.tsx +++ b/nextjs/src/app/course/[courseName]/settings/SettingsHeader.tsx @@ -7,23 +7,20 @@ import { useCourseContext } from "../context/courseContext"; export default function SettingsHeader() { const { courseName } = useCourseContext(); - const { data: settings } = useLocalCourseSettingsQuery(); + const [settings] = useLocalCourseSettingsQuery(); return ( <>
- - - Back To Course - + + Back To Course +

{settings.name}{" "} settings

-
- -
+

diff --git a/nextjs/src/app/course/[courseName]/settings/StartAndEndDate.tsx b/nextjs/src/app/course/[courseName]/settings/StartAndEndDate.tsx index d97a75c..f2973b6 100644 --- a/nextjs/src/app/course/[courseName]/settings/StartAndEndDate.tsx +++ b/nextjs/src/app/course/[courseName]/settings/StartAndEndDate.tsx @@ -4,7 +4,7 @@ import { getDateOnlyMarkdownString } from "@/models/local/timeUtils"; import React from "react"; export default function StartAndEndDate() { - const { data: settings } = useLocalCourseSettingsQuery(); + const [settings] = useLocalCourseSettingsQuery(); const startDate = new Date(settings.startDate); const endDate = new Date(settings.endDate); return ( diff --git a/nextjs/src/app/course/[courseName]/settings/SubmissionDefaults.tsx b/nextjs/src/app/course/[courseName]/settings/SubmissionDefaults.tsx index 8593c2c..ecfd9d1 100644 --- a/nextjs/src/app/course/[courseName]/settings/SubmissionDefaults.tsx +++ b/nextjs/src/app/course/[courseName]/settings/SubmissionDefaults.tsx @@ -11,7 +11,7 @@ import { import React, { useEffect, useState } from "react"; export default function SubmissionDefaults() { - const { data: settings } = useLocalCourseSettingsQuery(); + const [settings] = useLocalCourseSettingsQuery(); const [defaultSubmissionTypes, setDefaultSubmissionTypes] = useState< AssignmentSubmissionType[] >(settings.defaultAssignmentSubmissionTypes); @@ -29,8 +29,6 @@ export default function SubmissionDefaults() { } }, [defaultSubmissionTypes, settings, updateSettings]); - - return (
Default Assignment Submission Type
diff --git a/nextjs/src/app/layout.tsx b/nextjs/src/app/layout.tsx index 4194144..bb34528 100644 --- a/nextjs/src/app/layout.tsx +++ b/nextjs/src/app/layout.tsx @@ -33,7 +33,7 @@ export default async function RootLayout({ - {children} + {children}
@@ -41,3 +41,52 @@ export default async function RootLayout({ ); } + +async function DataHydration({ + children, +}: Readonly<{ + children: React.ReactNode; +}>) { + console.log("starting hydration"); + const trpcHelper = createServerSideHelpers({ + router: trpcAppRouter, + ctx: createTrpcContext(), + transformer: superjson, + }); + const allSettings = await fileStorageService.settings.getAllCoursesSettings(); + await Promise.all( + allSettings.map(async (settings) => { + const courseName = settings.name; + const moduleNames = await fileStorageService.modules.getModuleNames( + courseName + ); + await Promise.all( + moduleNames.map( + async (moduleName) => + await trpcHelper.assignment.getAllAssignments.prefetch({ + courseName, + moduleName, + }) + ) + ); + }) + ); + + await Promise.all( + allSettings.map( + async (settings) => + await trpcHelper.lectures.getLectures.prefetch({ + courseName: settings.name, + }) + ) + ); + + await hydrateCourses(trpcHelper.queryClient); + + const dehydratedState = dehydrate(trpcHelper.queryClient); + console.log("ran hydration"); + + return ( + {children} + ); +} diff --git a/nextjs/src/app/page.tsx b/nextjs/src/app/page.tsx index 6650f77..db686e1 100644 --- a/nextjs/src/app/page.tsx +++ b/nextjs/src/app/page.tsx @@ -1,70 +1,25 @@ -import { hydrateCourses } from "@/hooks/hookHydration"; -import { fileStorageService } from "@/services/fileStorage/fileStorageService"; -import { createTrpcContext } from "@/services/trpc/context"; -import { trpcAppRouter } from "@/services/trpc/router/app"; -import { dehydrate, HydrationBoundary } from "@tanstack/react-query"; -import { createServerSideHelpers } from "@trpc/react-query/server"; import CourseList from "./CourseList"; import AddNewCourse from "./newCourse/AddNewCourse"; import TodaysLectures from "./todaysLectures/TodaysLectures"; -import superjson from "superjson"; -import { trpc } from "@/services/trpc/utils"; export default async function Home() { - const trpcHelper = createServerSideHelpers({ - router: trpcAppRouter, - ctx: createTrpcContext(), - transformer: superjson, - }); - const allSettings = await fileStorageService.settings.getAllCoursesSettings(); - await Promise.all( - allSettings.map(async (settings) => { - const courseName = settings.name; - const moduleNames = await fileStorageService.modules.getModuleNames( - courseName - ); - await Promise.all( - moduleNames.map( - async (moduleName) => - await trpcHelper.assignment.getAllAssignments.fetch({ - courseName, - moduleName, - }) - ) - ); - }) - ); - - await Promise.all( - allSettings.map( - async (settings) => - await trpcHelper.lectures.getLectures.prefetch({ courseName: settings.name }) - ) - ); - - await hydrateCourses(trpcHelper.queryClient); - - const dehydratedState = dehydrate(trpcHelper.queryClient); - // console.log("dehydratedState", dehydratedState); return ( - -
-
-
-
-
-
-
- -
-
-
- -
-
- +
+
+
+
+
+
+
+
-
- +
+
+ +
+
+ +
+
); } diff --git a/nextjs/src/hooks/canvas/canvasAssignmentHooks.ts b/nextjs/src/hooks/canvas/canvasAssignmentHooks.ts index cc9d18c..d7cceda 100644 --- a/nextjs/src/hooks/canvas/canvasAssignmentHooks.ts +++ b/nextjs/src/hooks/canvas/canvasAssignmentHooks.ts @@ -22,7 +22,7 @@ export const canvasAssignmentKeys = { }; export const useCanvasAssignmentsQuery = () => { - const { data: settings } = useLocalCourseSettingsQuery(); + const [settings] = useLocalCourseSettingsQuery(); return useSuspenseQuery({ queryKey: canvasAssignmentKeys.assignments(settings.canvasId), @@ -31,7 +31,7 @@ export const useCanvasAssignmentsQuery = () => { }; // export const useCanvasAssignmentsQuery = () => { -// const { data: settings } = useLocalCourseSettingsQuery(); +// const [settings] = useLocalCourseSettingsQuery(); // const { data: allAssignments } = useInnerCanvasAssignmentsQuery(); // return useSuspenseQueries({ @@ -47,7 +47,7 @@ export const useCanvasAssignmentsQuery = () => { // }; export const useAddAssignmentToCanvasMutation = () => { - const { data: settings } = useLocalCourseSettingsQuery(); + const [settings] = useLocalCourseSettingsQuery(); const { data: canvasModules } = useCanvasModulesQuery(); const addModule = useAddCanvasModuleMutation(); const queryClient = useQueryClient(); @@ -90,7 +90,7 @@ export const useAddAssignmentToCanvasMutation = () => { }; export const useUpdateAssignmentInCanvasMutation = () => { - const { data: settings } = useLocalCourseSettingsQuery(); + const [settings] = useLocalCourseSettingsQuery(); const queryClient = useQueryClient(); return useMutation({ @@ -120,7 +120,7 @@ export const useUpdateAssignmentInCanvasMutation = () => { }; export const useDeleteAssignmentFromCanvasMutation = () => { - const { data: settings } = useLocalCourseSettingsQuery(); + const [settings] = useLocalCourseSettingsQuery(); const queryClient = useQueryClient(); return useMutation({ mutationFn: async ({ diff --git a/nextjs/src/hooks/canvas/canvasModuleHooks.ts b/nextjs/src/hooks/canvas/canvasModuleHooks.ts index f628109..b8f8a7e 100644 --- a/nextjs/src/hooks/canvas/canvasModuleHooks.ts +++ b/nextjs/src/hooks/canvas/canvasModuleHooks.ts @@ -11,7 +11,7 @@ export const canvasCourseModuleKeys = { }; export const useCanvasModulesQuery = () => { - const { data: settings } = useLocalCourseSettingsQuery(); + const [settings] = useLocalCourseSettingsQuery(); return useSuspenseQuery({ queryKey: canvasCourseModuleKeys.modules(settings.canvasId), queryFn: async () => @@ -20,7 +20,7 @@ export const useCanvasModulesQuery = () => { }; export const useAddCanvasModuleMutation = () => { - const { data: settings } = useLocalCourseSettingsQuery(); + const [settings] = useLocalCourseSettingsQuery(); const queryClient = useQueryClient(); return useMutation({ mutationFn: async (moduleName: string) => diff --git a/nextjs/src/hooks/canvas/canvasPageHooks.ts b/nextjs/src/hooks/canvas/canvasPageHooks.ts index 0149eba..190f823 100644 --- a/nextjs/src/hooks/canvas/canvasPageHooks.ts +++ b/nextjs/src/hooks/canvas/canvasPageHooks.ts @@ -21,7 +21,7 @@ export const canvasPageKeys = { }; export const useCanvasPagesQuery = () => { - const { data: settings } = useLocalCourseSettingsQuery(); + const [settings] = useLocalCourseSettingsQuery(); return useSuspenseQuery({ queryKey: canvasPageKeys.pagesInCourse(settings.canvasId), queryFn: async () => await canvasPageService.getAll(settings.canvasId), @@ -29,7 +29,7 @@ export const useCanvasPagesQuery = () => { }; export const useCreateCanvasPageMutation = () => { - const { data: settings } = useLocalCourseSettingsQuery(); + const [settings] = useLocalCourseSettingsQuery(); const queryClient = useQueryClient(); const { data: canvasModules } = useCanvasModulesQuery(); const addModule = useAddCanvasModuleMutation(); @@ -69,7 +69,7 @@ export const useCreateCanvasPageMutation = () => { }; export const useUpdateCanvasPageMutation = () => { - const { data: settings } = useLocalCourseSettingsQuery(); + const [settings] = useLocalCourseSettingsQuery(); const queryClient = useQueryClient(); return useMutation({ mutationFn: async ({ @@ -88,7 +88,7 @@ export const useUpdateCanvasPageMutation = () => { }; export const useDeleteCanvasPageMutation = () => { - const { data: settings } = useLocalCourseSettingsQuery(); + const [settings] = useLocalCourseSettingsQuery(); const queryClient = useQueryClient(); return useMutation({ mutationFn: async (canvasPageId: number) => diff --git a/nextjs/src/hooks/canvas/canvasQuizHooks.ts b/nextjs/src/hooks/canvas/canvasQuizHooks.ts index ec03da2..80776c7 100644 --- a/nextjs/src/hooks/canvas/canvasQuizHooks.ts +++ b/nextjs/src/hooks/canvas/canvasQuizHooks.ts @@ -6,7 +6,10 @@ import { import { useLocalCourseSettingsQuery } from "../localCourse/localCoursesHooks"; import { canvasQuizService } from "@/services/canvas/canvasQuizService"; import { LocalQuiz } from "@/models/local/quiz/localQuiz"; -import { useAddCanvasModuleMutation, useCanvasModulesQuery } from "./canvasModuleHooks"; +import { + useAddCanvasModuleMutation, + useCanvasModulesQuery, +} from "./canvasModuleHooks"; import { canvasModuleService } from "@/services/canvas/canvasModuleService"; export const canvasQuizKeys = { @@ -15,7 +18,7 @@ export const canvasQuizKeys = { }; export const useCanvasQuizzesQuery = () => { - const { data: settings } = useLocalCourseSettingsQuery(); + const [settings] = useLocalCourseSettingsQuery(); return useSuspenseQuery({ queryKey: canvasQuizKeys.quizzes(settings.canvasId), @@ -24,7 +27,7 @@ export const useCanvasQuizzesQuery = () => { }; export const useAddQuizToCanvasMutation = () => { - const { data: settings } = useLocalCourseSettingsQuery(); + const [settings] = useLocalCourseSettingsQuery(); const queryClient = useQueryClient(); const { data: canvasModules } = useCanvasModulesQuery(); const addModule = useAddCanvasModuleMutation(); @@ -68,7 +71,7 @@ export const useAddQuizToCanvasMutation = () => { }; export const useDeleteQuizFromCanvasMutation = () => { - const { data: settings } = useLocalCourseSettingsQuery(); + const [settings] = useLocalCourseSettingsQuery(); const queryClient = useQueryClient(); return useMutation({ mutationFn: async (canvasQuizId: number) => { diff --git a/nextjs/src/hooks/localCourse/lectureHooks.ts b/nextjs/src/hooks/localCourse/lectureHooks.ts index c1f991b..67bddf8 100644 --- a/nextjs/src/hooks/localCourse/lectureHooks.ts +++ b/nextjs/src/hooks/localCourse/lectureHooks.ts @@ -26,7 +26,7 @@ import { useLocalCourseSettingsQuery } from "./localCoursesHooks"; export const useLectureUpdateMutation = () => { const { courseName } = useCourseContext(); - const { data: settings } = useLocalCourseSettingsQuery(); + const [settings] = useLocalCourseSettingsQuery(); const queryClient = useQueryClient(); return useMutation({ mutationFn: async ({ diff --git a/nextjs/src/hooks/localCourse/localCoursesHooks.ts b/nextjs/src/hooks/localCourse/localCoursesHooks.ts index eefa4b0..c778778 100644 --- a/nextjs/src/hooks/localCourse/localCoursesHooks.ts +++ b/nextjs/src/hooks/localCourse/localCoursesHooks.ts @@ -9,33 +9,35 @@ import { localCourseKeys } from "./localCourseKeys"; import { useCourseContext } from "@/app/course/[courseName]/context/courseContext"; import { createCourseOnServer, - getAllCoursesSettingsFromServer, updateCourseSettingsOnServer, } from "./localCoursesServerActions"; +import { trpc } from "@/services/trpc/utils"; export const useLocalCoursesSettingsQuery = () => - useSuspenseQuery({ - queryKey: localCourseKeys.allCoursesSettings, - queryFn: async () => { - return await getAllCoursesSettingsFromServer(); - }, - }); + trpc.settings.allCoursesSettings.useSuspenseQuery(); +// useSuspenseQuery({ +// queryKey: localCourseKeys.allCoursesSettings, +// queryFn: async () => { +// return await getAllCoursesSettingsFromServer(); +// }, +// }); export const useLocalCourseSettingsQuery = () => { const { courseName } = useCourseContext(); // const { data: settingsList } = useLocalCoursesSettingsQuery(); - return useSuspenseQuery({ - queryKey: localCourseKeys.settings(courseName), - queryFn: async () => { - const settingsList = await getAllCoursesSettingsFromServer(); - const s = settingsList.find((s) => s.name === courseName); - if (!s) { - console.log(courseName, settingsList); - throw Error("Could not find settings for course " + courseName); - } - return s; - }, - }); + return trpc.settings.courseSettings.useSuspenseQuery({ courseName }); + // return useSuspenseQuery({ + // queryKey: localCourseKeys.settings(courseName), + // queryFn: async () => { + // const settingsList = await getAllCoursesSettingsFromServer(); + // const s = settingsList.find((s) => s.name === courseName); + // if (!s) { + // console.log(courseName, settingsList); + // throw Error("Could not find settings for course " + courseName); + // } + // return s; + // }, + // }); }; export const useCreateLocalCourseMutation = () => { diff --git a/nextjs/src/services/trpc/router/app.ts b/nextjs/src/services/trpc/router/app.ts index 2bc507c..e231cc0 100644 --- a/nextjs/src/services/trpc/router/app.ts +++ b/nextjs/src/services/trpc/router/app.ts @@ -3,6 +3,7 @@ import publicProcedure from "../procedures/public"; import { createCallerFactory, router } from "../trpc"; import { assignmentRouter } from "./assignmentRouter"; import { lectureRouter } from "./lectureRouter"; +import { settingsRouter } from "./settingsRouter"; export const helloRouter = router({ sayHello: publicProcedure.query(() => { @@ -16,6 +17,7 @@ export const trpcAppRouter = router({ hello: helloRouter, assignment: assignmentRouter, lectures: lectureRouter, + settings: settingsRouter, }); export const createCaller = createCallerFactory(trpcAppRouter); diff --git a/nextjs/src/services/trpc/router/settingsRouter.ts b/nextjs/src/services/trpc/router/settingsRouter.ts new file mode 100644 index 0000000..061b2ea --- /dev/null +++ b/nextjs/src/services/trpc/router/settingsRouter.ts @@ -0,0 +1,26 @@ +import publicProcedure from "../procedures/public"; +import { z } from "zod"; +import { router } from "../trpc"; +import { fileStorageService } from "@/services/fileStorage/fileStorageService"; + +export const settingsRouter = router({ + allCoursesSettings: publicProcedure.query(async () => { + return await fileStorageService.settings.getAllCoursesSettings(); + }), + courseSettings: publicProcedure + .input( + z.object({ + courseName: z.string(), + }) + ) + .query(async ({ input: { courseName } }) => { + const settingsList = + await fileStorageService.settings.getAllCoursesSettings(); + const s = settingsList.find((s) => s.name === courseName); + if (!s) { + console.log(courseName, settingsList); + throw Error("Could not find settings for course " + courseName); + } + return s; + }), +});