mirror of
https://github.com/alexmickelson/canvasManagement.git
synced 2026-03-25 15:18:32 -06:00
166 lines
4.6 KiB
TypeScript
166 lines
4.6 KiB
TypeScript
"use client";
|
|
import { trpc } from "@/services/serverFunctions/trpcClient";
|
|
import { useCourseContext } from "@/app/course/[courseName]/context/courseContext";
|
|
import {
|
|
useLocalCourseSettingsQuery,
|
|
useUpdateLocalCourseSettingsMutation,
|
|
} from "./localCoursesHooks";
|
|
import {
|
|
extractImageSources,
|
|
markdownToHtmlNoImages,
|
|
} from "@/services/htmlMarkdownUtils";
|
|
import { useActionState, useEffect, useState } from "react";
|
|
|
|
export const useAssignmentQuery = (
|
|
moduleName: string,
|
|
assignmentName: string
|
|
) => {
|
|
const { courseName } = useCourseContext();
|
|
return trpc.assignment.getAssignment.useSuspenseQuery({
|
|
moduleName,
|
|
courseName,
|
|
assignmentName,
|
|
});
|
|
};
|
|
|
|
export const useUpdateImageSettingsForAssignment = ({
|
|
moduleName,
|
|
assignmentName,
|
|
}: {
|
|
moduleName: string;
|
|
assignmentName: string;
|
|
}) => {
|
|
const [settings] = useLocalCourseSettingsQuery();
|
|
const [assignment] = useAssignmentQuery(moduleName, assignmentName);
|
|
const updateSettings = useUpdateLocalCourseSettingsMutation();
|
|
const [isUpdatingSettings, setIsUpdatingSettings] = useState(false);
|
|
const createCanvasUrlMutation =
|
|
trpc.canvasFile.getCanvasFileUrl.useMutation();
|
|
|
|
// useEffect(() => {
|
|
// if (isUpdatingSettings) {
|
|
// console.log("not updating image assets, still loading");
|
|
// return;
|
|
// }
|
|
// setIsUpdatingSettings(true);
|
|
// const assignmentMarkdown = markdownToHtmlNoImages(assignment.description);
|
|
|
|
// const imageSources = extractImageSources(assignmentMarkdown);
|
|
// const imagesToUpdate = imageSources.filter((source) =>
|
|
// settings.assets.every((a) => a.sourceUrl !== source)
|
|
// );
|
|
// console.log("images to update", imagesToUpdate);
|
|
|
|
// if (imagesToUpdate.length) {
|
|
// Promise.all(
|
|
// imagesToUpdate.map(async (source) => {
|
|
// // todo: get canvas url
|
|
// // const canvasUrl = "";
|
|
// const canvasUrl = await createCanvasUrlMutation.mutateAsync({
|
|
// sourceUrl: source,
|
|
// canvasCourseId: settings.canvasId,
|
|
// });
|
|
// console.log("got canvas url", source, canvasUrl);
|
|
// return { sourceUrl: source, canvasUrl };
|
|
// })
|
|
// ).then(async (newAssets) => {
|
|
// await updateSettings.mutateAsync({
|
|
// settings: {
|
|
// ...settings,
|
|
// assets: [...settings.assets, ...newAssets],
|
|
// },
|
|
// });
|
|
// setIsUpdatingSettings(false);
|
|
// });
|
|
// }
|
|
// }, [
|
|
// assignment.description,
|
|
// createCanvasUrlMutation,
|
|
// isUpdatingSettings,
|
|
// settings,
|
|
// settings.assets,
|
|
// updateSettings,
|
|
// ]);
|
|
};
|
|
|
|
export const useAssignmentNamesQuery = (moduleName: string) => {
|
|
const { courseName } = useCourseContext();
|
|
return trpc.assignment.getAllAssignments.useSuspenseQuery(
|
|
{
|
|
moduleName,
|
|
courseName,
|
|
},
|
|
{
|
|
select: (assignments) => assignments.map((a) => a.name),
|
|
}
|
|
);
|
|
};
|
|
|
|
export const useUpdateAssignmentMutation = () => {
|
|
const utils = trpc.useUtils();
|
|
return trpc.assignment.updateAssignment.useMutation({
|
|
onSuccess: (
|
|
_,
|
|
{
|
|
courseName,
|
|
moduleName,
|
|
assignmentName,
|
|
previousAssignmentName,
|
|
previousModuleName,
|
|
}
|
|
) => {
|
|
if (moduleName !== previousModuleName) {
|
|
utils.assignment.getAllAssignments.invalidate(
|
|
{
|
|
courseName,
|
|
moduleName: previousModuleName,
|
|
},
|
|
{ refetchType: "all" }
|
|
);
|
|
}
|
|
utils.assignment.getAllAssignments.invalidate(
|
|
{ courseName, moduleName },
|
|
{ refetchType: "all" }
|
|
);
|
|
utils.assignment.getAssignment.invalidate({
|
|
courseName,
|
|
moduleName,
|
|
assignmentName,
|
|
});
|
|
utils.assignment.getAssignment.invalidate({
|
|
courseName,
|
|
moduleName,
|
|
assignmentName: previousAssignmentName,
|
|
});
|
|
},
|
|
});
|
|
};
|
|
|
|
export const useCreateAssignmentMutation = () => {
|
|
const utils = trpc.useUtils();
|
|
return trpc.assignment.createAssignment.useMutation({
|
|
onSuccess: (_, { courseName, moduleName }) => {
|
|
utils.assignment.getAllAssignments.invalidate({ courseName, moduleName });
|
|
},
|
|
});
|
|
};
|
|
|
|
export const useDeleteAssignmentMutation = () => {
|
|
const utils = trpc.useUtils();
|
|
return trpc.assignment.deleteAssignment.useMutation({
|
|
onSuccess: (_, { courseName, moduleName, assignmentName }) => {
|
|
utils.assignment.getAllAssignments.invalidate({ courseName, moduleName });
|
|
utils.assignment.getAssignment.invalidate(
|
|
{
|
|
courseName,
|
|
moduleName,
|
|
assignmentName,
|
|
},
|
|
{
|
|
refetchType: "all",
|
|
}
|
|
);
|
|
},
|
|
});
|
|
};
|