starting to move over settings

This commit is contained in:
2024-11-08 16:01:41 -07:00
parent 6fd5053ac5
commit 026ca3846f
35 changed files with 188 additions and 155 deletions

View File

@@ -1,16 +1,14 @@
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("/");
@@ -19,7 +17,8 @@ const getUrl = (params: { rest: string[] }, req: NextRequest) => {
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);

View File

@@ -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 (
<div className="pb-1 ps-5 flex flex-row gap-3">
<Link href={"/"} className="btn">

View File

@@ -7,12 +7,16 @@ import { getCourseSettingsUrl } from "@/services/urlUtils";
export default function CourseSettingsLink() {
const { courseName } = useCourseContext();
const { data: settings } = useLocalCourseSettingsQuery();
const [settings] = useLocalCourseSettingsQuery();
return (
<div>
{settings.name}
<Link className="mx-3 underline" href={getCourseSettingsUrl(courseName)} shallow={true}>
<Link
className="mx-3 underline"
href={getCourseSettingsUrl(courseName)}
shallow={true}
>
Course Settings
</Link>
</div>

View File

@@ -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"

View File

@@ -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"),

View File

@@ -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);

View File

@@ -32,7 +32,7 @@ export function useItemDropOnDay({
setIsLoading: Dispatch<SetStateAction<boolean>>;
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,

View File

@@ -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 (
<div className="flex justify-between sm:flex-row flex-col">
<div className="my-auto">
<Link
className="btn hidden sm:inline"
href={getCourseUrl(courseName)}
>
<Link className="btn hidden sm:inline" href={getCourseUrl(courseName)}>
{courseName}
</Link>
</div>

View File

@@ -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();

View File

@@ -7,9 +7,9 @@ export default function ModuleList() {
const { data: moduleNames } = useModuleNamesQuery();
return (
<div>
{moduleNames.map((m) => (
{/* {moduleNames.map((m) => (
<ExpandableModule key={m} moduleName={m} />
))}
))} */}
<div className="flex flex-col justify-center">
<CreateModule />
</div>

View File

@@ -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">(

View File

@@ -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,

View File

@@ -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();

View File

@@ -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;

View File

@@ -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();

View File

@@ -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();

View File

@@ -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

View File

@@ -8,7 +8,7 @@ import {
import React from "react";
export default function DaysOfWeekSettings() {
const { data: settings } = useLocalCourseSettingsQuery();
const [settings] = useLocalCourseSettingsQuery();
const updateSettings = useUpdateLocalCourseSettingsMutation();
return (

View File

@@ -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

View File

@@ -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);

View File

@@ -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"

View File

@@ -62,7 +62,7 @@ export default function HolidayConfig() {
);
}
function InnerHolidayConfig() {
const { data: settings } = useLocalCourseSettingsQuery();
const [settings] = useLocalCourseSettingsQuery();
console.log(settings.holidays);
const updateSettings = useUpdateLocalCourseSettingsMutation();

View File

@@ -7,23 +7,20 @@ import { useCourseContext } from "../context/courseContext";
export default function SettingsHeader() {
const { courseName } = useCourseContext();
const { data: settings } = useLocalCourseSettingsQuery();
const [settings] = useLocalCourseSettingsQuery();
return (
<>
<div className="flex flex-row justify-between">
<div className="my-auto">
<Link className="btn" href={getCourseUrl(courseName)}>
Back To Course
</Link>
<Link className="btn" href={getCourseUrl(courseName)}>
Back To Course
</Link>
</div>
<h3 className="text-center mb-3">
{settings.name}{" "}
<span className="text-slate-500 text-xl"> settings</span>
</h3>
<div>
</div>
<div></div>
</div>
<hr />
</>

View File

@@ -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 (

View File

@@ -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 (
<div className="border w-fit p-3 m-3 rounded-md">
<div className="text-center">Default Assignment Submission Type</div>

View File

@@ -33,7 +33,7 @@ export default async function RootLayout({
<MyToaster />
<Suspense>
<Providers>
{children}
<DataHydration>{children}</DataHydration>
</Providers>
</Suspense>
</div>
@@ -41,3 +41,52 @@ export default async function RootLayout({
</html>
);
}
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 (
<HydrationBoundary state={dehydratedState}>{children}</HydrationBoundary>
);
}

View File

@@ -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 (
<HydrationBoundary state={dehydratedState}>
<main className="h-full flex justify-center overflow-auto">
<div className="xl:w-[900px] mx-auto">
<br />
<br />
<br />
<br />
<div className=" flex justify-center">
<CourseList />
</div>
<br />
<br />
<TodaysLectures />
<br />
<br />
<AddNewCourse />
<main className="h-full flex justify-center overflow-auto">
<div className="xl:w-[900px] mx-auto">
<br />
<br />
<br />
<br />
<div className=" flex justify-center">
<CourseList />
</div>
</main>
</HydrationBoundary>
<br />
<br />
<TodaysLectures />
<br />
<br />
<AddNewCourse />
</div>
</main>
);
}

View File

@@ -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 ({

View File

@@ -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) =>

View File

@@ -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) =>

View File

@@ -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) => {

View File

@@ -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 ({

View File

@@ -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 = () => {

View File

@@ -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);

View File

@@ -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;
}),
});