mirror of
https://github.com/alexmickelson/canvasManagement.git
synced 2026-03-26 15:48:32 -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);
|
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({});
|
||||||
});
|
});
|
||||||
|
|
||||||
@@ -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}
|
||||||
|
|||||||
@@ -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>
|
||||||
|
|||||||
@@ -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">
|
||||||
|
|||||||
@@ -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),
|
||||||
});
|
// });
|
||||||
},
|
},
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -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)
|
||||||
|
}
|
||||||
};
|
};
|
||||||
Reference in New Issue
Block a user