diff --git a/frontend/src/components/tasks/partials/SingleTaskInProject.vue b/frontend/src/components/tasks/partials/SingleTaskInProject.vue index 48eb3d7a8..9f52364b1 100644 --- a/frontend/src/components/tasks/partials/SingleTaskInProject.vue +++ b/frontend/src/components/tasks/partials/SingleTaskInProject.vue @@ -296,11 +296,21 @@ useIntervalFn(updateDueDate, 60_000, { }) onMounted(updateDueDate) +let oldTask -async function markAsDone(checked: boolean) { +async function markAsDone(checked: boolean, wasReverted: boolean = false) { const updateFunc = async () => { + oldTask = {...task.value} const newTask = await taskStore.update(task.value) task.value = newTask + + updateDueDate() + + if (wasReverted) { + success({message: t('task.revertSuccess')}) + return + } + if (checked && useAuthStore().settings.frontendSettings.playSoundWhenDone) { playPopSound() } @@ -315,7 +325,6 @@ async function markAsDone(checked: boolean) { title: t('task.undo'), callback: () => undoDone(checked), }]) - updateDueDate() } if (checked) { @@ -326,8 +335,11 @@ async function markAsDone(checked: boolean) { } function undoDone(checked: boolean) { + if (isRepeating.value) { + task.value = {...oldTask} + } task.value.done = !task.value.done - markAsDone(!checked) + markAsDone(!checked, true) } async function toggleFavorite() { diff --git a/frontend/src/i18n/lang/en.json b/frontend/src/i18n/lang/en.json index da7805764..5082cace6 100644 --- a/frontend/src/i18n/lang/en.json +++ b/frontend/src/i18n/lang/en.json @@ -733,6 +733,7 @@ "addReminder": "Add a reminder…", "doneSuccess": "The task was successfully marked as done.", "undoneSuccess": "The task was successfully un-marked as done.", + "revertSuccess": "The task change was successfully undone.", "undo": "Undo", "openDetail": "Open task detail view", "checklistTotal": "{checked} of {total} tasks",