preserve lock date offset in drag and drop

This commit is contained in:
2024-10-01 14:21:33 -06:00
parent b14c12d462
commit d1fc5a5701

View File

@@ -130,7 +130,11 @@ export default function DraggingContextProvider({
const quiz: LocalQuiz = { const quiz: LocalQuiz = {
...previousQuiz, ...previousQuiz,
dueAt: dateToMarkdownString(dayAsDate), dueAt: dateToMarkdownString(dayAsDate),
lockAt: getLaterDate(previousQuiz.lockAt, dayAsDate), lockAt: getNewLockDate(
previousQuiz.dueAt,
previousQuiz.lockAt,
dayAsDate
),
}; };
updateQuizMutation.mutate({ updateQuizMutation.mutate({
item: quiz, item: quiz,
@@ -198,14 +202,27 @@ export default function DraggingContextProvider({
</DraggingContext.Provider> </DraggingContext.Provider>
); );
} }
function getLaterDate( function getNewLockDate(
firstDate: string | undefined, originalDueDate: string,
originalLockDate: string | undefined,
dayAsDate: Date dayAsDate: Date
): string | undefined { ): string | undefined {
return ( // todo: preserve previous due date / lock date offset
firstDate && const dueDate = getDateFromStringOrThrow(originalDueDate, "dueat date");
(getDateFromStringOrThrow(firstDate, "lockAt date") > dayAsDate const lockDate =
? firstDate originalLockDate === undefined
: dateToMarkdownString(dayAsDate)) ? undefined
); : getDateFromStringOrThrow(originalLockDate, "lockAt date");
const originalOffset =
lockDate === undefined ? undefined : lockDate.getTime() - dueDate.getTime();
const newLockDate =
originalOffset === undefined
? undefined
: new Date(dayAsDate.getTime() + originalOffset);
return newLockDate === undefined
? undefined
: dateToMarkdownString(newLockDate);
} }