updating page name and quiz name

This commit is contained in:
2024-09-23 08:35:16 -06:00
parent 158a5d82a2
commit 7af9cab7f0
6 changed files with 122 additions and 42 deletions

View File

@@ -16,27 +16,48 @@ export const GET = async (
return Response.json(settings); return Response.json(settings);
}); });
export const PUT = async ( export const PUT = async (
request: Request, request: Request,
{ {
params: { courseName, moduleName, pageName }, params: { courseName, moduleName, pageName },
}: { params: { courseName: string; moduleName: string; pageName: string } } }: { params: { courseName: string; moduleName: string; pageName: string } }
) => ) =>
await withErrorHandling(async () => { await withErrorHandling(async () => {
const page = await request.json(); const { page, previousModuleName, previousPageName } = await request.json();
await fileStorageService.pages.updatePage(courseName, moduleName, pageName, page); await fileStorageService.pages.updatePage(
courseName,
moduleName,
pageName,
page
);
if (
previousModuleName &&
previousPageName &&
(page.name !== previousPageName || moduleName !== previousModuleName)
) {
fileStorageService.pages.delete({
courseName,
moduleName: previousModuleName,
pageName: previousPageName,
});
}
return Response.json({}); return Response.json({});
}); });
export const POST = async ( export const POST = async (
request: Request, request: Request,
{ {
params: { courseName, moduleName, pageName }, params: { courseName, moduleName, pageName },
}: { params: { courseName: string; moduleName: string; pageName: string } } }: { params: { courseName: string; moduleName: string; pageName: string } }
) => ) =>
await withErrorHandling(async () => { await withErrorHandling(async () => {
const page = await request.json(); const page = await request.json();
await fileStorageService.pages.updatePage(courseName, moduleName, pageName, page); await fileStorageService.pages.updatePage(
courseName,
moduleName,
pageName,
page
);
return Response.json({}); return Response.json({});
}); });

View File

@@ -122,6 +122,7 @@ export default function ExpandableModule({
<div className="grid grid-cols-[auto_1fr]"> <div className="grid grid-cols-[auto_1fr]">
{moduleItems.map(({ type, item }) => ( {moduleItems.map(({ type, item }) => (
<ExpandableModuleItem <ExpandableModuleItem
key={item.name + type}
type={type} type={type}
item={item} item={item}
moduleName={moduleName} moduleName={moduleName}

View File

@@ -11,6 +11,9 @@ import PagePreview from "./PagePreview";
import { useLocalCourseSettingsQuery } from "@/hooks/localCourse/localCoursesHooks"; import { useLocalCourseSettingsQuery } from "@/hooks/localCourse/localCoursesHooks";
import EditPageButtons from "./EditPageButtons"; import EditPageButtons from "./EditPageButtons";
import ClientOnly from "@/components/ClientOnly"; import ClientOnly from "@/components/ClientOnly";
import { getModuleItemUrl } from "@/services/urlUtils";
import { useRouter } from "next/navigation";
import { useCourseContext } from "@/app/course/[courseName]/context/courseContext";
export default function EditPage({ export default function EditPage({
moduleName, moduleName,
@@ -19,6 +22,8 @@ export default function EditPage({
pageName: string; pageName: string;
moduleName: string; moduleName: string;
}) { }) {
const router = useRouter();
const { courseName } = useCourseContext();
const { data: page } = usePageQuery(moduleName, pageName); const { data: page } = usePageQuery(moduleName, pageName);
const updatePage = useUpdatePageMutation(); const updatePage = useUpdatePageMutation();
const [pageText, setPageText] = useState( const [pageText, setPageText] = useState(
@@ -37,10 +42,24 @@ export default function EditPage({
localPageMarkdownUtils.toMarkdown(updatedPage) localPageMarkdownUtils.toMarkdown(updatedPage)
) { ) {
console.log("updating page"); console.log("updating page");
updatePage.mutate({ updatePage
.mutateAsync({
page: updatedPage, page: updatedPage,
moduleName, moduleName,
pageName, pageName: updatedPage.name,
previousModuleName: moduleName,
previousPageName: pageName,
})
.then(() => {
if (updatedPage.name !== pageName)
router.push(
getModuleItemUrl(
courseName,
moduleName,
"page",
updatedPage.name
)
);
}); });
} }
setError(""); setError("");
@@ -70,10 +89,7 @@ export default function EditPage({
</div> </div>
{settings.canvasId && ( {settings.canvasId && (
<ClientOnly> <ClientOnly>
<EditPageButtons <EditPageButtons pageName={pageName} moduleName={moduleName} />
pageName={pageName}
moduleName={moduleName}
/>
</ClientOnly> </ClientOnly>
)} )}
</div> </div>

View File

@@ -10,6 +10,9 @@ import QuizPreview from "./QuizPreview";
import { QuizButtons } from "./QuizButton"; import { QuizButtons } from "./QuizButton";
import ClientOnly from "@/components/ClientOnly"; import ClientOnly from "@/components/ClientOnly";
import { SuspenseAndErrorHandling } from "@/components/SuspenseAndErrorHandling"; 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 const helpString = `QUESTION REFERENCE
--- ---
@@ -59,6 +62,8 @@ export default function EditQuiz({
quizName: string; quizName: string;
moduleName: string; moduleName: string;
}) { }) {
const router = useRouter();
const { courseName } = useCourseContext();
const { data: quiz } = useQuizQuery(moduleName, quizName); const { data: quiz } = useQuizQuery(moduleName, quizName);
const updateQuizMutation = useUpdateQuizMutation(); const updateQuizMutation = useUpdateQuizMutation();
const [quizText, setQuizText] = useState(quizMarkdownUtils.toMarkdown(quiz)); const [quizText, setQuizText] = useState(quizMarkdownUtils.toMarkdown(quiz));
@@ -67,7 +72,7 @@ export default function EditQuiz({
useEffect(() => { useEffect(() => {
const delay = 1000; const delay = 1000;
const handler = setTimeout(() => { const handler = setTimeout(async () => {
try { try {
console.log("checking if the same..."); console.log("checking if the same...");
if ( if (
@@ -77,10 +82,24 @@ export default function EditQuiz({
) )
) { ) {
const updatedQuiz = quizMarkdownUtils.parseMarkdown(quizText); const updatedQuiz = quizMarkdownUtils.parseMarkdown(quizText);
updateQuizMutation.mutate({ updateQuizMutation
.mutateAsync({
quiz: updatedQuiz, quiz: updatedQuiz,
moduleName, moduleName,
quizName, quizName: updatedQuiz.name,
previousModuleName: moduleName,
previousQuizName: quizName,
})
.then(() => {
if (updatedQuiz.name !== quizName)
router.push(
getModuleItemUrl(
courseName,
moduleName,
"quiz",
updatedQuiz.name
)
);
}); });
} }
setError(""); setError("");
@@ -92,7 +111,7 @@ export default function EditQuiz({
return () => { return () => {
clearTimeout(handler); clearTimeout(handler);
}; };
}, [moduleName, quiz, quizName, quizText, updateQuizMutation]); }, [courseName, moduleName, quiz, quizName, quizText, router, updateQuizMutation]);
return ( return (
<div className="h-full flex flex-col align-middle px-1"> <div className="h-full flex flex-col align-middle px-1">

View File

@@ -123,15 +123,19 @@ export const useUpdatePageMutation = () => {
encodeURIComponent(moduleName) + encodeURIComponent(moduleName) +
"/pages/" + "/pages/" +
encodeURIComponent(pageName); encodeURIComponent(pageName);
await axiosClient.put(url, page); await axiosClient.put(url, {
page,
previousModuleName,
previousPageName,
});
}, },
onSuccess: (_, { moduleName, pageName }) => { onSuccess: (_, { moduleName, pageName }) => {
queryClient.invalidateQueries({ queryClient.invalidateQueries({
queryKey: localCourseKeys.page(courseName, moduleName, pageName), queryKey: localCourseKeys.page(courseName, moduleName, pageName),
}); });
queryClient.invalidateQueries({ // queryClient.invalidateQueries({
queryKey: localCourseKeys.pageNames(courseName, moduleName), // queryKey: localCourseKeys.pageNames(courseName, moduleName),
}); // });
}, },
}); });
}; };

View File

@@ -65,4 +65,23 @@ export const pageFileStorageService = {
await fs.unlink(oldFilePath); 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)
}
}; };