diff --git a/nextjs/src/app/course/[courseName]/modules/NewItemForm.tsx b/nextjs/src/app/course/[courseName]/modules/NewItemForm.tsx index 77031b7..bf58ef7 100644 --- a/nextjs/src/app/course/[courseName]/modules/NewItemForm.tsx +++ b/nextjs/src/app/course/[courseName]/modules/NewItemForm.tsx @@ -73,7 +73,7 @@ export default function NewItemForm({ } if (type === "Assignment") { createAssignment.mutate({ - assignment: { + item: { name, description: "", dueAt, @@ -85,11 +85,11 @@ export default function NewItemForm({ rubric: [], }, moduleName: moduleName, - assignmentName: name, + itemName: name, }); } else if (type === "Quiz") { createQuiz.mutate({ - quiz: { + item: { name, description: "", dueAt, @@ -100,17 +100,17 @@ export default function NewItemForm({ questions: [], }, moduleName: moduleName, - quizName: name, + itemName: name, }); } else if (type === "Page") { createPage.mutate({ - page: { + item: { name, text: "", dueAt, }, moduleName: moduleName, - pageName: name, + itemName: name, }); } onCreate(); diff --git a/nextjs/src/hooks/localCourse/assignmentHooks.ts b/nextjs/src/hooks/localCourse/assignmentHooks.ts index 7c45d93..fc8b93b 100644 --- a/nextjs/src/hooks/localCourse/assignmentHooks.ts +++ b/nextjs/src/hooks/localCourse/assignmentHooks.ts @@ -12,6 +12,7 @@ import { axiosClient } from "@/services/axiosUtils"; import { getAllItemsQueryConfig, getItemQueryConfig, + useCreateItemMutation, useItemQuery, useItemsQueries, useUpdateItemMutation, @@ -39,56 +40,8 @@ export const useAssignmentsQueries = (moduleName: string) => export const useUpdateAssignmentMutation = () => useUpdateItemMutation("Assignment"); -export const useCreateAssignmentMutation = () => { - const { courseName } = useCourseContext(); - const queryClient = useQueryClient(); - return useMutation({ - mutationFn: async ({ - assignment, - moduleName, - assignmentName, - }: { - assignment: LocalAssignment; - moduleName: string; - assignmentName: string; - }) => { - queryClient.setQueryData( - localCourseKeys.itemOfType( - courseName, - moduleName, - assignmentName, - "Assignment" - ), - assignment - ); - const url = - "/api/courses/" + - encodeURIComponent(courseName) + - "/modules/" + - encodeURIComponent(moduleName) + - "/assignments/" + - encodeURIComponent(assignmentName); - await axiosClient.post(url, assignment); - }, - onSuccess: async (_, { moduleName, assignmentName }) => { - await queryClient.invalidateQueries({ - queryKey: localCourseKeys.allItemsOfType( - courseName, - moduleName, - "Assignment" - ), - }); - await queryClient.invalidateQueries({ - queryKey: localCourseKeys.itemOfType( - courseName, - moduleName, - assignmentName, - "Assignment" - ), - }); - }, - }); -}; +export const useCreateAssignmentMutation = () => + useCreateItemMutation("Assignment"); export const useDeleteAssignmentMutation = () => { const { courseName } = useCourseContext(); diff --git a/nextjs/src/hooks/localCourse/courseItemHooks.ts b/nextjs/src/hooks/localCourse/courseItemHooks.ts index 65a6a84..59dc176 100644 --- a/nextjs/src/hooks/localCourse/courseItemHooks.ts +++ b/nextjs/src/hooks/localCourse/courseItemHooks.ts @@ -175,3 +175,47 @@ export const useUpdateItemMutation = (type: T) => { }, }); }; + +export const useCreateItemMutation = (type: T) => { + const { courseName } = useCourseContext(); + const queryClient = useQueryClient(); + return useMutation({ + mutationFn: async ({ + item, + moduleName, + itemName, + }: { + item: CourseItemReturnType; + moduleName: string; + itemName: string; + }) => { + queryClient.setQueryData( + localCourseKeys.itemOfType(courseName, moduleName, itemName, type), + item + ); + const url = + "/api/courses/" + + encodeURIComponent(courseName) + + "/modules/" + + encodeURIComponent(moduleName) + + "/" + + typeToFolder[type] + + "/" + + encodeURIComponent(itemName); + await axiosClient.post(url, item); + }, + onSuccess: async (_, { moduleName, itemName: assignmentName }) => { + await queryClient.invalidateQueries({ + queryKey: localCourseKeys.allItemsOfType(courseName, moduleName, type), + }); + await queryClient.invalidateQueries({ + queryKey: localCourseKeys.itemOfType( + courseName, + moduleName, + assignmentName, + type + ), + }); + }, + }); +}; diff --git a/nextjs/src/hooks/localCourse/pageHooks.ts b/nextjs/src/hooks/localCourse/pageHooks.ts index 34fb669..e9fb28d 100644 --- a/nextjs/src/hooks/localCourse/pageHooks.ts +++ b/nextjs/src/hooks/localCourse/pageHooks.ts @@ -7,6 +7,7 @@ import { axiosClient } from "@/services/axiosUtils"; import { getAllItemsQueryConfig, getItemQueryConfig, + useCreateItemMutation, useItemQuery, useItemsQueries, useUpdateItemMutation, @@ -32,52 +33,7 @@ export const usePagesQueries = (moduleName: string) => export const useUpdatePageMutation = () => useUpdateItemMutation("Page"); -export const useCreatePageMutation = () => { - const { courseName } = useCourseContext(); - const queryClient = useQueryClient(); - return useMutation({ - mutationFn: async ({ - page, - moduleName, - pageName, - }: { - page: LocalCoursePage; - moduleName: string; - pageName: string; - }) => { - queryClient.setQueryData( - localCourseKeys.itemOfType(courseName, moduleName, pageName, "Page"), - page - ); - const url = - "/api/courses/" + - encodeURIComponent(courseName) + - "/modules/" + - encodeURIComponent(moduleName) + - "/pages/" + - encodeURIComponent(pageName); - await axiosClient.post(url, page); - }, - onSuccess: (_, { moduleName, pageName }) => { - queryClient.invalidateQueries({ - queryKey: localCourseKeys.itemOfType( - courseName, - moduleName, - pageName, - "Page" - ), - }); - queryClient.invalidateQueries({ - queryKey: localCourseKeys.itemOfType( - courseName, - moduleName, - pageName, - "Page" - ), - }); - }, - }); -}; +export const useCreatePageMutation = () => useCreateItemMutation("Page"); export const useDeletePageMutation = () => { const { courseName } = useCourseContext(); diff --git a/nextjs/src/hooks/localCourse/quizHooks.ts b/nextjs/src/hooks/localCourse/quizHooks.ts index 72327da..6c35ff3 100644 --- a/nextjs/src/hooks/localCourse/quizHooks.ts +++ b/nextjs/src/hooks/localCourse/quizHooks.ts @@ -1,5 +1,4 @@ "use client"; -import { LocalQuiz } from "@/models/local/quiz/localQuiz"; import { useMutation, useQueryClient, @@ -10,6 +9,7 @@ import { axiosClient } from "@/services/axiosUtils"; import { getAllItemsQueryConfig, getItemQueryConfig, + useCreateItemMutation, useItemQuery, useItemsQueries, useUpdateItemMutation, @@ -38,51 +38,7 @@ export const useQuizzesQueries = (moduleName: string) => export const useUpdateQuizMutation = () => useUpdateItemMutation("Quiz") -export const useCreateQuizMutation = () => { - const { courseName } = useCourseContext(); - const queryClient = useQueryClient(); - return useMutation({ - mutationFn: async ({ - quiz, - moduleName, - quizName, - }: { - quiz: LocalQuiz; - moduleName: string; - quizName: string; - }) => { - queryClient.setQueryData( - localCourseKeys.itemOfType(courseName, moduleName, quizName, "Quiz"), - quiz - ); - const url = - "/api/courses/" + - encodeURIComponent(courseName) + - "/modules/" + - encodeURIComponent(moduleName) + - "/quizzes/" + - encodeURIComponent(quizName); - await axiosClient.post(url, quiz); - }, - onSuccess: async (_, { moduleName, quizName }) => { - await queryClient.invalidateQueries({ - queryKey: localCourseKeys.allItemsOfType( - courseName, - moduleName, - "Quiz" - ), - }); - await queryClient.invalidateQueries({ - queryKey: localCourseKeys.itemOfType( - courseName, - moduleName, - quizName, - "Quiz" - ), - }); - }, - }); -}; +export const useCreateQuizMutation = () => useCreateItemMutation("Quiz") export const useDeleteQuizMutation = () => { const { courseName } = useCourseContext();