mirror of
https://github.com/alexmickelson/canvasManagement.git
synced 2026-03-25 23:28:33 -06:00
starting to move over settings
This commit is contained in:
@@ -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);
|
||||
|
||||
@@ -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">
|
||||
|
||||
@@ -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>
|
||||
|
||||
@@ -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"
|
||||
|
||||
@@ -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"),
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -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>
|
||||
|
||||
@@ -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();
|
||||
|
||||
@@ -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>
|
||||
|
||||
@@ -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">(
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -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();
|
||||
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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();
|
||||
|
||||
@@ -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();
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
@@ -8,7 +8,7 @@ import {
|
||||
import React from "react";
|
||||
|
||||
export default function DaysOfWeekSettings() {
|
||||
const { data: settings } = useLocalCourseSettingsQuery();
|
||||
const [settings] = useLocalCourseSettingsQuery();
|
||||
const updateSettings = useUpdateLocalCourseSettingsMutation();
|
||||
|
||||
return (
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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"
|
||||
|
||||
@@ -62,7 +62,7 @@ export default function HolidayConfig() {
|
||||
);
|
||||
}
|
||||
function InnerHolidayConfig() {
|
||||
const { data: settings } = useLocalCourseSettingsQuery();
|
||||
const [settings] = useLocalCourseSettingsQuery();
|
||||
console.log(settings.holidays);
|
||||
const updateSettings = useUpdateLocalCourseSettingsMutation();
|
||||
|
||||
|
||||
@@ -7,12 +7,11 @@ 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>
|
||||
@@ -21,9 +20,7 @@ export default function SettingsHeader() {
|
||||
{settings.name}{" "}
|
||||
<span className="text-slate-500 text-xl"> settings</span>
|
||||
</h3>
|
||||
<div>
|
||||
|
||||
</div>
|
||||
<div></div>
|
||||
</div>
|
||||
<hr />
|
||||
</>
|
||||
|
||||
@@ -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 (
|
||||
|
||||
@@ -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>
|
||||
|
||||
@@ -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>
|
||||
);
|
||||
}
|
||||
|
||||
@@ -1,53 +1,9 @@
|
||||
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 />
|
||||
@@ -65,6 +21,5 @@ export default async function Home() {
|
||||
<AddNewCourse />
|
||||
</div>
|
||||
</main>
|
||||
</HydrationBoundary>
|
||||
);
|
||||
}
|
||||
|
||||
@@ -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 ({
|
||||
|
||||
@@ -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) =>
|
||||
|
||||
@@ -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) =>
|
||||
|
||||
@@ -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) => {
|
||||
|
||||
@@ -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 ({
|
||||
|
||||
@@ -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 = () => {
|
||||
|
||||
@@ -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);
|
||||
|
||||
26
nextjs/src/services/trpc/router/settingsRouter.ts
Normal file
26
nextjs/src/services/trpc/router/settingsRouter.ts
Normal 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;
|
||||
}),
|
||||
});
|
||||
Reference in New Issue
Block a user