mirror of
https://github.com/alexmickelson/canvasManagement.git
synced 2026-03-25 23:28:33 -06:00
updating page name and quiz name
This commit is contained in:
@@ -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,
|
||||
});
|
||||
|
||||
}
|
||||
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({});
|
||||
});
|
||||
|
||||
@@ -122,6 +122,7 @@ export default function ExpandableModule({
|
||||
<div className="grid grid-cols-[auto_1fr]">
|
||||
{moduleItems.map(({ type, item }) => (
|
||||
<ExpandableModuleItem
|
||||
key={item.name + type}
|
||||
type={type}
|
||||
item={item}
|
||||
moduleName={moduleName}
|
||||
|
||||
@@ -11,6 +11,9 @@ import PagePreview from "./PagePreview";
|
||||
import { useLocalCourseSettingsQuery } from "@/hooks/localCourse/localCoursesHooks";
|
||||
import EditPageButtons from "./EditPageButtons";
|
||||
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({
|
||||
moduleName,
|
||||
@@ -19,6 +22,8 @@ export default function EditPage({
|
||||
pageName: string;
|
||||
moduleName: string;
|
||||
}) {
|
||||
const router = useRouter();
|
||||
const { courseName } = useCourseContext();
|
||||
const { data: page } = usePageQuery(moduleName, pageName);
|
||||
const updatePage = useUpdatePageMutation();
|
||||
const [pageText, setPageText] = useState(
|
||||
@@ -37,11 +42,25 @@ export default function EditPage({
|
||||
localPageMarkdownUtils.toMarkdown(updatedPage)
|
||||
) {
|
||||
console.log("updating page");
|
||||
updatePage.mutate({
|
||||
page: updatedPage,
|
||||
moduleName,
|
||||
pageName,
|
||||
});
|
||||
updatePage
|
||||
.mutateAsync({
|
||||
page: updatedPage,
|
||||
moduleName,
|
||||
pageName: updatedPage.name,
|
||||
previousModuleName: moduleName,
|
||||
previousPageName: pageName,
|
||||
})
|
||||
.then(() => {
|
||||
if (updatedPage.name !== pageName)
|
||||
router.push(
|
||||
getModuleItemUrl(
|
||||
courseName,
|
||||
moduleName,
|
||||
"page",
|
||||
updatedPage.name
|
||||
)
|
||||
);
|
||||
});
|
||||
}
|
||||
setError("");
|
||||
} catch (e: any) {
|
||||
@@ -70,10 +89,7 @@ export default function EditPage({
|
||||
</div>
|
||||
{settings.canvasId && (
|
||||
<ClientOnly>
|
||||
<EditPageButtons
|
||||
pageName={pageName}
|
||||
moduleName={moduleName}
|
||||
/>
|
||||
<EditPageButtons pageName={pageName} moduleName={moduleName} />
|
||||
</ClientOnly>
|
||||
)}
|
||||
</div>
|
||||
|
||||
@@ -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 (
|
||||
<div className="h-full flex flex-col align-middle px-1">
|
||||
|
||||
@@ -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),
|
||||
// });
|
||||
},
|
||||
});
|
||||
};
|
||||
|
||||
@@ -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)
|
||||
}
|
||||
};
|
||||
Reference in New Issue
Block a user