diff --git a/frontend/src/components/tasks/partials/SingleTaskInProject.vue b/frontend/src/components/tasks/partials/SingleTaskInProject.vue index 57a115b85..fa9dce3d1 100644 --- a/frontend/src/components/tasks/partials/SingleTaskInProject.vue +++ b/frontend/src/components/tasks/partials/SingleTaskInProject.vue @@ -13,12 +13,12 @@ @keyup.enter="openTaskDetail" > ( task.value.dueDate.getTime() <= now.value.getTime() )) +const isBlockedByIncomplete = computed(() => + task.value.relatedTasks?.[RELATION_KIND.BLOCKED]?.some(t => !t.done) ?? false +) + let oldTask async function markAsDone(checked: boolean, wasReverted: boolean = false) { const updateFunc = async () => { oldTask = {...task.value} - const newTask = await taskStore.update(task.value) - task.value = newTask + try { + const newTask = await taskStore.update(task.value) + task.value = newTask + } catch (e) { + task.value.done = !checked + error(e) + return + } updateDueDate() @@ -340,7 +351,7 @@ async function markAsDone(checked: boolean, wasReverted: boolean = false) { if (checked) { playPopSound() } - emit('taskUpdated', newTask) + emit('taskUpdated', task.value) let message = t('task.doneSuccess') if (!task.value.done && !isRepeating.value) { diff --git a/frontend/src/i18n/lang/en.json b/frontend/src/i18n/lang/en.json index a48d793ac..a1d70902f 100644 --- a/frontend/src/i18n/lang/en.json +++ b/frontend/src/i18n/lang/en.json @@ -939,6 +939,7 @@ "doneSuccess": "The task was successfully marked as done.", "undoneSuccess": "The task was successfully un-marked as done.", "readOnlyCheckbox": "You only have read access to this task and cannot mark it as done.", + "blockedCheckbox": "This task is blocked by incomplete tasks and cannot be marked as done.", "movedToProject": "The task was moved to {project}.", "undo": "Undo", "checklistTotal": "{checked} of {total} tasks", @@ -1457,7 +1458,8 @@ "13002": "The provided link share password is invalid.", "13003": "The provided link share token is invalid.", "14001": "The provided api token is invalid.", - "14002": "The permission {permission} of group {group} is invalid." + "14002": "The permission {permission} of group {group} is invalid.", + "20001": "This task is blocked by incomplete tasks and cannot be marked as done." }, "about": { "title": "About", diff --git a/frontend/src/views/tasks/TaskDetailView.vue b/frontend/src/views/tasks/TaskDetailView.vue index 5396bc797..946d87aa4 100644 --- a/frontend/src/views/tasks/TaskDetailView.vue +++ b/frontend/src/views/tasks/TaskDetailView.vue @@ -441,7 +441,9 @@