diff --git a/nextjs/src/app/api/courses/[courseName]/modules/[moduleName]/assignments/[assignmentName]/route.ts b/nextjs/src/app/api/courses/[courseName]/modules/[moduleName]/assignments/[assignmentName]/route.ts index f14c5e2..6d773a2 100644 --- a/nextjs/src/app/api/courses/[courseName]/modules/[moduleName]/assignments/[assignmentName]/route.ts +++ b/nextjs/src/app/api/courses/[courseName]/modules/[moduleName]/assignments/[assignmentName]/route.ts @@ -31,8 +31,8 @@ export const PUT = async ( const { assignment, previousModuleName, previousAssignmentName } = (await request.json()) as { assignment: LocalAssignment; - previousModuleName?: string; - previousAssignmentName?: string; + previousModuleName: string; + previousAssignmentName: string; }; await fileStorageService.assignments.updateOrCreateAssignment({ @@ -43,10 +43,8 @@ export const PUT = async ( }); if ( - previousModuleName && - previousAssignmentName && - (assignment.name !== previousAssignmentName || - moduleName !== previousModuleName) + assignment.name !== previousAssignmentName || + moduleName !== previousModuleName ) { fileStorageService.assignments.delete({ courseName, 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 6af2900..68f19bd 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 @@ -7,7 +7,7 @@ import { import { localAssignmentMarkdown } from "@/models/local/assignment/localAssignment"; import { useEffect, useState } from "react"; import AssignmentPreview from "./AssignmentPreview"; -import { getCourseUrl } from "@/services/urlUtils"; +import { getCourseUrl, getModuleItemUrl } from "@/services/urlUtils"; import Link from "next/link"; import { useCourseContext } from "@/app/course/[courseName]/context/courseContext"; import { useLocalCourseSettingsQuery } from "@/hooks/localCourse/localCoursesHooks"; @@ -23,6 +23,7 @@ import ClientOnly from "@/components/ClientOnly"; import { SuspenseAndErrorHandling } from "@/components/SuspenseAndErrorHandling"; import { AssignmentSubmissionType } from "@/models/local/assignment/assignmentSubmissionType"; import { LocalCourseSettings } from "@/models/local/localCourse"; +import { useRouter } from "next/navigation"; export default function EditAssignment({ moduleName, @@ -31,6 +32,8 @@ export default function EditAssignment({ assignmentName: string; moduleName: string; }) { + const router = useRouter(); + const { courseName } = useCourseContext(); const { data: settings } = useLocalCourseSettingsQuery(); const { data: assignment } = useAssignmentQuery(moduleName, assignmentName); const updateAssignment = useUpdateAssignmentMutation(); @@ -52,13 +55,25 @@ export default function EditAssignment({ localAssignmentMarkdown.toMarkdown(updatedAssignment) ) { console.log("updating assignment"); - updateAssignment.mutate({ - assignment: updatedAssignment, - moduleName, - assignmentName, - previousModuleName: moduleName, - previousAssignmentName: assignment.name, - }); + updateAssignment + .mutateAsync({ + assignment: updatedAssignment, + moduleName, + assignmentName: updatedAssignment.name, + previousModuleName: moduleName, + previousAssignmentName: assignmentName, + }) + .then(() => { + if (updatedAssignment.name !== assignmentName) + router.replace( + getModuleItemUrl( + courseName, + moduleName, + "assignment", + updatedAssignment.name + ) + ); + }); } setError(""); } catch (e: any) { @@ -73,7 +88,9 @@ export default function EditAssignment({ assignment, assignmentName, assignmentText, + courseName, moduleName, + router, updateAssignment, ]); 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 64da0b1..3271d06 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 @@ -52,7 +52,7 @@ export default function EditPage({ }) .then(() => { if (updatedPage.name !== pageName) - router.push( + router.replace( getModuleItemUrl( courseName, moduleName, @@ -71,7 +71,7 @@ export default function EditPage({ return () => { clearTimeout(handler); }; - }, [moduleName, page, pageName, pageText, updatePage]); + }, [courseName, moduleName, page, pageName, pageText, router, updatePage]); return (
diff --git a/nextjs/src/app/course/[courseName]/modules/[moduleName]/quiz/[quizName]/EditQuiz.tsx b/nextjs/src/app/course/[courseName]/modules/[moduleName]/quiz/[quizName]/EditQuiz.tsx index 34b92ab..764ed8c 100644 --- a/nextjs/src/app/course/[courseName]/modules/[moduleName]/quiz/[quizName]/EditQuiz.tsx +++ b/nextjs/src/app/course/[courseName]/modules/[moduleName]/quiz/[quizName]/EditQuiz.tsx @@ -92,7 +92,7 @@ export default function EditQuiz({ }) .then(() => { if (updatedQuiz.name !== quizName) - router.push( + router.replace( getModuleItemUrl( courseName, moduleName, diff --git a/nextjs/src/hooks/localCourse/assignmentHooks.ts b/nextjs/src/hooks/localCourse/assignmentHooks.ts index 8cbf1d4..29189e5 100644 --- a/nextjs/src/hooks/localCourse/assignmentHooks.ts +++ b/nextjs/src/hooks/localCourse/assignmentHooks.ts @@ -105,10 +105,8 @@ export const useUpdateAssignmentMutation = () => { assignmentName: string; }) => { if ( - previousAssignmentName && - previousModuleName && - (previousAssignmentName !== assignment.name || - previousModuleName !== moduleName) + previousAssignmentName !== assignment.name || + previousModuleName !== moduleName ) { queryClient.removeQueries({ queryKey: localCourseKeys.assignment( @@ -124,7 +122,7 @@ export const useUpdateAssignmentMutation = () => { ), }); } - + queryClient.setQueryData( localCourseKeys.assignment(courseName, moduleName, assignmentName), assignment