diff --git a/frontend/src/views/tasks/TaskDetailView.vue b/frontend/src/views/tasks/TaskDetailView.vue index 184c48e9e..d907f1680 100644 --- a/frontend/src/views/tasks/TaskDetailView.vue +++ b/frontend/src/views/tasks/TaskDetailView.vue @@ -14,7 +14,7 @@ {{ $t('task.detail.back') }} @@ -691,6 +691,24 @@ function saveTaskViaHotkey(event) { saveTask() } +const lastProject = computed(() => { + const backRoute = router.options.history.state?.back + if (!backRoute || typeof backRoute !== 'string') { + return null + } + + const projectMatch = backRoute.match(/\/projects\/(-?\d+)/) + if (!projectMatch || !projectMatch[1]) { + return null + } + + const id = parseInt(projectMatch[1]) + + return projectStore.projects[id] ?? null +}) + +const lastProjectOrTaskProject = computed(() => lastProject.value ?? project.value) + onMounted(() => { document.addEventListener('keydown', saveTaskViaHotkey) }) @@ -704,14 +722,14 @@ onBeforeRouteLeave(async () => { return } - if (!project.value) { + if (!lastProjectOrTaskProject.value) { await new Promise((resolve) => { const timeout = setTimeout(() => { stop() resolve() }, 5000) // 5 second timeout - const stop = watch(project, (p) => { + const stop = watch(lastProjectOrTaskProject, (p) => { if (p) { clearTimeout(timeout) stop() @@ -721,8 +739,8 @@ onBeforeRouteLeave(async () => { }) } - if (project.value) { - await baseStore.handleSetCurrentProjectIfNotSet(project.value) + if (lastProjectOrTaskProject.value) { + await baseStore.handleSetCurrentProjectIfNotSet(lastProjectOrTaskProject.value) } }) @@ -788,8 +806,8 @@ watch( taskColor.value = task.value.hexColor setActiveFields() - if (project.value) { - await baseStore.handleSetCurrentProjectIfNotSet(project.value) + if (lastProject.value) { + await baseStore.handleSetCurrentProjectIfNotSet(lastProject.value) } } catch (e) { if (e?.response?.status === 404) {