workign on file upload

This commit is contained in:
2025-01-27 08:27:56 -07:00
parent f0c147cd6a
commit 3ce0eff2f8
4 changed files with 44 additions and 8603 deletions

8552
package-lock.json generated

File diff suppressed because it is too large Load Diff

View File

@@ -18,6 +18,7 @@ export default function AssignmentPreview({
(sum, cur) => (rubricItemIsExtraCredit(cur) ? sum + cur.points : sum), (sum, cur) => (rubricItemIsExtraCredit(cur) ? sum + cur.points : sum),
0 0
); );
const htmlPreview = markdownToHTMLSafe(assignment.description, settings);
return ( return (
<div className="h-full overflow-y-auto"> <div className="h-full overflow-y-auto">
<section> <section>
@@ -61,7 +62,7 @@ export default function AssignmentPreview({
<div <div
className="markdownPreview" className="markdownPreview"
dangerouslySetInnerHTML={{ dangerouslySetInnerHTML={{
__html: markdownToHTMLSafe(assignment.description, settings), __html: htmlPreview,
}} }}
></div> ></div>
</section> </section>

View File

@@ -83,21 +83,6 @@ export default function EditAssignment({
previousAssignmentName: assignmentName, previousAssignmentName: assignmentName,
courseName, courseName,
}); });
// .then(async () => {
// // await new Promise(resolve => setTimeout(resolve, 1000));
// if (updatedAssignment.name !== assignmentName)
// router.replace(
// getModuleItemUrl(
// courseName,
// moduleName,
// "assignment",
// updatedAssignment.name
// ), {
// }
// );
// });
} else { } else {
console.log( console.log(
"client not authoritative, updating client with server assignment", "client not authoritative, updating client with server assignment",

View File

@@ -9,7 +9,8 @@ import {
extractImageSources, extractImageSources,
markdownToHtmlNoImages, markdownToHtmlNoImages,
} from "@/services/htmlMarkdownUtils"; } from "@/services/htmlMarkdownUtils";
import { useActionState, useEffect, useState } from "react"; import { useEffect, useState } from "react";
import { useMutation } from "@tanstack/react-query";
export const useAssignmentQuery = ( export const useAssignmentQuery = (
moduleName: string, moduleName: string,
@@ -32,12 +33,9 @@ export const useUpdateImageSettingsForAssignment = ({
moduleName: string; moduleName: string;
assignmentName: string; assignmentName: string;
}) => { }) => {
const [settings] = useLocalCourseSettingsQuery();
const [assignment] = useAssignmentQuery(moduleName, assignmentName); const [assignment] = useAssignmentQuery(moduleName, assignmentName);
const updateSettings = useUpdateLocalCourseSettingsMutation();
const [isPending, setIsPending] = useState(false); const [isPending, setIsPending] = useState(false);
const createCanvasUrlMutation = const addNewImagesToCanvasMutation = useAddNewImagesToCanvasMutation();
trpc.canvasFile.getCanvasFileUrl.useMutation();
useEffect(() => { useEffect(() => {
if (!enable_images) { if (!enable_images) {
@@ -52,17 +50,38 @@ export const useUpdateImageSettingsForAssignment = ({
setIsPending(true); setIsPending(true);
const assignmentMarkdown = markdownToHtmlNoImages(assignment.description); const assignmentMarkdown = markdownToHtmlNoImages(assignment.description);
const imageSources = extractImageSources(assignmentMarkdown); addNewImagesToCanvasMutation
const imagesToUpdate = imageSources.filter((source) => .mutateAsync({
settings.assets.every((a) => a.sourceUrl !== source) markdownString: assignmentMarkdown,
); })
.then(() => setIsPending(false));
// not sure why mutation reference changes...
// eslint-disable-next-line react-hooks/exhaustive-deps
}, [assignment.description, isPending]);
return { isPending };
};
if (imagesToUpdate.length) { export const useAddNewImagesToCanvasMutation = () => {
Promise.all( const [settings] = useLocalCourseSettingsQuery();
imagesToUpdate.map(async (source) => { const createCanvasUrlMutation =
// todo: get canvas url trpc.canvasFile.getCanvasFileUrl.useMutation();
// const canvasUrl = ""; const updateSettings = useUpdateLocalCourseSettingsMutation();
console.log(source);
return useMutation({
mutationFn: async ({ markdownString }: { markdownString: string }) => {
const imageSources = extractImageSources(markdownString);
const newImages = imageSources.filter((source) =>
settings.assets.every((a) => a.sourceUrl !== source)
);
if (newImages.length === 0) {
console.log("no new images to upload");
return;
}
const newAssets = await Promise.all(
newImages.map(async (source) => {
console.log("uploading image to canvas", source);
const canvasUrl = await createCanvasUrlMutation.mutateAsync({ const canvasUrl = await createCanvasUrlMutation.mutateAsync({
sourceUrl: source, sourceUrl: source,
canvasCourseId: settings.canvasId, canvasCourseId: settings.canvasId,
@@ -70,27 +89,15 @@ export const useUpdateImageSettingsForAssignment = ({
console.log("got canvas url", source, canvasUrl); console.log("got canvas url", source, canvasUrl);
return { sourceUrl: source, canvasUrl }; return { sourceUrl: source, canvasUrl };
}) })
).then(async (newAssets) => { );
await updateSettings.mutateAsync({ await updateSettings.mutateAsync({
settings: { settings: {
...settings, ...settings,
assets: [...settings.assets, ...newAssets], assets: [...settings.assets, ...newAssets],
}, },
});
setIsPending(false);
}); });
} else { },
setIsPending(false) });
}
}, [
assignment.description,
createCanvasUrlMutation,
isPending,
settings,
settings.assets,
updateSettings,
]);
return { isPending };
}; };
export const useAssignmentNamesQuery = (moduleName: string) => { export const useAssignmentNamesQuery = (moduleName: string) => {