can drag and drop quizzes and assignments

This commit is contained in:
2024-09-02 14:26:48 -06:00
parent 4f44349db3
commit 13f20b5970
7 changed files with 204 additions and 20 deletions

View File

@@ -15,3 +15,19 @@ export async function GET(
);
return Response.json(settings);
}
export async function PUT(
request: Request,
{
params: { courseName, moduleName, assignmentName },
}: { params: { courseName: string; moduleName: string; assignmentName: string } }
) {
const assignment = await request.json()
await fileStorageService.updateAssignment(
courseName,
moduleName,
assignmentName,
assignment
);
return Response.json({});
}

View File

@@ -13,3 +13,19 @@ export async function GET(
);
return Response.json(settings);
}
export async function PUT(
request: Request,
{
params: { courseName, moduleName, pageName },
}: { params: { courseName: string; moduleName: string; pageName: string } }
) {
const page = await request.json()
await fileStorageService.updatePage(
courseName,
moduleName,
pageName,
page
);
return Response.json({});
}

View File

@@ -4,7 +4,14 @@ import { DraggingContext } from "./draggingContext";
import { useUpdateQuizMutation } from "@/hooks/localCourse/quizHooks";
import { useLocalCourseSettingsQuery } from "@/hooks/localCourse/localCoursesHooks";
import { LocalQuiz } from "@/models/local/quiz/localQuiz";
import { getDateFromStringOrThrow, dateToMarkdownString } from "@/models/local/timeUtils";
import {
getDateFromStringOrThrow,
dateToMarkdownString,
} from "@/models/local/timeUtils";
import { LocalAssignment } from "@/models/local/assignment/localAssignment";
import { useUpdateAssignmentMutation } from "@/hooks/localCourse/assignmentHooks";
import { useUpdatePageMutation } from "@/hooks/localCourse/pageHooks";
import { LocalCoursePage } from "@/models/local/page/localCoursePage";
export default function DraggingContextProvider({
children,
@@ -13,6 +20,8 @@ export default function DraggingContextProvider({
localCourseName: string;
}) {
const updateQuizMutation = useUpdateQuizMutation();
const updateAssignmentMutation = useUpdateAssignmentMutation();
const updatePageMutation = useUpdatePageMutation();
const { data: settings } = useLocalCourseSettingsQuery();
const itemDrop = useCallback(
@@ -35,12 +44,7 @@ export default function DraggingContextProvider({
const quiz: LocalQuiz = {
...previousQuiz,
dueAt: dateToMarkdownString(dayAsDate),
lockAt:
previousQuiz.lockAt &&
(getDateFromStringOrThrow(previousQuiz.lockAt, "lockAt date") >
dayAsDate
? previousQuiz.lockAt
: dateToMarkdownString(dayAsDate)),
lockAt: getLaterDate(previousQuiz.lockAt, dayAsDate),
};
updateQuizMutation.mutate({
quiz: quiz,
@@ -48,15 +52,46 @@ export default function DraggingContextProvider({
moduleName: itemBeingDragged.sourceModuleName,
});
} else if (itemBeingDragged.type === "assignment") {
console.log("dropped assignment");
updateAssignment(dayAsDate);
} else if (itemBeingDragged.type === "page") {
console.log("dropped page");
const previousPage = itemBeingDragged.item as LocalCoursePage;
const page: LocalCoursePage = {
...previousPage,
dueAt: dateToMarkdownString(dayAsDate),
};
updatePageMutation.mutate({
page,
moduleName: itemBeingDragged.sourceModuleName,
pageName: page.name,
});
}
}
function updateAssignment(dayAsDate: Date) {
const previousAssignment = itemBeingDragged.item as LocalAssignment;
const assignment: LocalAssignment = {
...previousAssignment,
dueAt: dateToMarkdownString(dayAsDate),
lockAt: previousAssignment.lockAt &&
(getDateFromStringOrThrow(
previousAssignment.lockAt,
"lockAt date"
) > dayAsDate
? previousAssignment.lockAt
: dateToMarkdownString(dayAsDate)),
};
updateAssignmentMutation.mutate({
assignment,
moduleName: itemBeingDragged.sourceModuleName,
assignmentName: assignment.name,
});
}
},
[
settings.defaultDueTime.hour,
settings.defaultDueTime.minute,
updateAssignmentMutation,
updateQuizMutation,
]
);
@@ -71,3 +106,14 @@ export default function DraggingContextProvider({
</DraggingContext.Provider>
);
}
function getLaterDate(
firstDate: string | undefined,
dayAsDate: Date
): string | undefined {
return (
firstDate &&
(getDateFromStringOrThrow(firstDate, "lockAt date") > dayAsDate
? firstDate
: dateToMarkdownString(dayAsDate))
);
}