diff --git a/nextjs/src/app/api/courses/[courseName]/modules/[moduleName]/pages/[pageName]/route.ts b/nextjs/src/app/api/courses/[courseName]/modules/[moduleName]/pages/[pageName]/route.ts
index 5f5eb3a..9544ee3 100644
--- a/nextjs/src/app/api/courses/[courseName]/modules/[moduleName]/pages/[pageName]/route.ts
+++ b/nextjs/src/app/api/courses/[courseName]/modules/[moduleName]/pages/[pageName]/route.ts
@@ -16,27 +16,48 @@ export const GET = async (
return Response.json(settings);
});
- export const PUT = async (
- request: Request,
- {
- params: { courseName, moduleName, pageName },
- }: { params: { courseName: string; moduleName: string; pageName: string } }
- ) =>
- await withErrorHandling(async () => {
- const page = await request.json();
- await fileStorageService.pages.updatePage(courseName, moduleName, pageName, page);
- return Response.json({});
- });
+export const PUT = async (
+ request: Request,
+ {
+ params: { courseName, moduleName, pageName },
+ }: { params: { courseName: string; moduleName: string; pageName: string } }
+) =>
+ await withErrorHandling(async () => {
+ const { page, previousModuleName, previousPageName } = await request.json();
+ await fileStorageService.pages.updatePage(
+ courseName,
+ moduleName,
+ pageName,
+ page
+ );
- export const POST = async (
- request: Request,
- {
- params: { courseName, moduleName, pageName },
- }: { params: { courseName: string; moduleName: string; pageName: string } }
- ) =>
- await withErrorHandling(async () => {
- const page = await request.json();
- await fileStorageService.pages.updatePage(courseName, moduleName, pageName, page);
- return Response.json({});
+ if (
+ previousModuleName &&
+ previousPageName &&
+ (page.name !== previousPageName || moduleName !== previousModuleName)
+ ) {
+ fileStorageService.pages.delete({
+ courseName,
+ moduleName: previousModuleName,
+ pageName: previousPageName,
});
-
\ No newline at end of file
+ }
+ return Response.json({});
+ });
+
+export const POST = async (
+ request: Request,
+ {
+ params: { courseName, moduleName, pageName },
+ }: { params: { courseName: string; moduleName: string; pageName: string } }
+) =>
+ await withErrorHandling(async () => {
+ const page = await request.json();
+ await fileStorageService.pages.updatePage(
+ courseName,
+ moduleName,
+ pageName,
+ page
+ );
+ return Response.json({});
+ });
diff --git a/nextjs/src/app/course/[courseName]/modules/ExpandableModule.tsx b/nextjs/src/app/course/[courseName]/modules/ExpandableModule.tsx
index a24d02a..f6ea7df 100644
--- a/nextjs/src/app/course/[courseName]/modules/ExpandableModule.tsx
+++ b/nextjs/src/app/course/[courseName]/modules/ExpandableModule.tsx
@@ -122,6 +122,7 @@ export default function ExpandableModule({
{moduleItems.map(({ type, item }) => (
{
+ if (updatedPage.name !== pageName)
+ router.push(
+ getModuleItemUrl(
+ courseName,
+ moduleName,
+ "page",
+ updatedPage.name
+ )
+ );
+ });
}
setError("");
} catch (e: any) {
@@ -70,10 +89,7 @@ export default function EditPage({
{settings.canvasId && (
-
+
)}
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 f95932a..34b92ab 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
@@ -10,6 +10,9 @@ import QuizPreview from "./QuizPreview";
import { QuizButtons } from "./QuizButton";
import ClientOnly from "@/components/ClientOnly";
import { SuspenseAndErrorHandling } from "@/components/SuspenseAndErrorHandling";
+import { useRouter } from "next/navigation";
+import { getModuleItemUrl } from "@/services/urlUtils";
+import { useCourseContext } from "@/app/course/[courseName]/context/courseContext";
const helpString = `QUESTION REFERENCE
---
@@ -59,6 +62,8 @@ export default function EditQuiz({
quizName: string;
moduleName: string;
}) {
+ const router = useRouter();
+ const { courseName } = useCourseContext();
const { data: quiz } = useQuizQuery(moduleName, quizName);
const updateQuizMutation = useUpdateQuizMutation();
const [quizText, setQuizText] = useState(quizMarkdownUtils.toMarkdown(quiz));
@@ -67,7 +72,7 @@ export default function EditQuiz({
useEffect(() => {
const delay = 1000;
- const handler = setTimeout(() => {
+ const handler = setTimeout(async () => {
try {
console.log("checking if the same...");
if (
@@ -77,11 +82,25 @@ export default function EditQuiz({
)
) {
const updatedQuiz = quizMarkdownUtils.parseMarkdown(quizText);
- updateQuizMutation.mutate({
- quiz: updatedQuiz,
- moduleName,
- quizName,
- });
+ updateQuizMutation
+ .mutateAsync({
+ quiz: updatedQuiz,
+ moduleName,
+ quizName: updatedQuiz.name,
+ previousModuleName: moduleName,
+ previousQuizName: quizName,
+ })
+ .then(() => {
+ if (updatedQuiz.name !== quizName)
+ router.push(
+ getModuleItemUrl(
+ courseName,
+ moduleName,
+ "quiz",
+ updatedQuiz.name
+ )
+ );
+ });
}
setError("");
} catch (e: any) {
@@ -92,7 +111,7 @@ export default function EditQuiz({
return () => {
clearTimeout(handler);
};
- }, [moduleName, quiz, quizName, quizText, updateQuizMutation]);
+ }, [courseName, moduleName, quiz, quizName, quizText, router, updateQuizMutation]);
return (
diff --git a/nextjs/src/hooks/localCourse/pageHooks.ts b/nextjs/src/hooks/localCourse/pageHooks.ts
index 5877748..51e6898 100644
--- a/nextjs/src/hooks/localCourse/pageHooks.ts
+++ b/nextjs/src/hooks/localCourse/pageHooks.ts
@@ -123,15 +123,19 @@ export const useUpdatePageMutation = () => {
encodeURIComponent(moduleName) +
"/pages/" +
encodeURIComponent(pageName);
- await axiosClient.put(url, page);
+ await axiosClient.put(url, {
+ page,
+ previousModuleName,
+ previousPageName,
+ });
},
onSuccess: (_, { moduleName, pageName }) => {
queryClient.invalidateQueries({
queryKey: localCourseKeys.page(courseName, moduleName, pageName),
});
- queryClient.invalidateQueries({
- queryKey: localCourseKeys.pageNames(courseName, moduleName),
- });
+ // queryClient.invalidateQueries({
+ // queryKey: localCourseKeys.pageNames(courseName, moduleName),
+ // });
},
});
};
diff --git a/nextjs/src/services/fileStorage/pageFileStorageService.ts b/nextjs/src/services/fileStorage/pageFileStorageService.ts
index 01cc56c..1568c60 100644
--- a/nextjs/src/services/fileStorage/pageFileStorageService.ts
+++ b/nextjs/src/services/fileStorage/pageFileStorageService.ts
@@ -65,4 +65,23 @@ export const pageFileStorageService = {
await fs.unlink(oldFilePath);
}
},
+ async delete({
+ courseName,
+ moduleName,
+ pageName,
+ }: {
+ courseName: string;
+ moduleName: string;
+ pageName: string;
+ }) {
+ const filePath = path.join(
+ basePath,
+ courseName,
+ moduleName,
+ "pages",
+ pageName + ".md"
+ );
+ console.log("removing page", filePath);
+ await fs.unlink(filePath)
+ }
};
\ No newline at end of file