feat: associated task status with task list not space
All checks were successful
Build and Push App Image / build-and-push (push) Successful in 1m52s

This commit is contained in:
domrichardson
2026-04-01 14:29:15 +01:00
parent 74d8899eec
commit 503d2415e6
12 changed files with 520 additions and 342 deletions

View File

@@ -202,7 +202,6 @@
:tasks="tasks"
:task-statuses="taskStatuses"
:selected-task-list="selectedTaskList"
:can-delete-tasks="canDeleteTasks"
:is-search-route="isSearchRoute"
:search-items="searchItems"
:search-query="searchQuery"
@@ -220,12 +219,8 @@
:is-loading-more-main-notes="spaceStore.notesLoading"
@select-task="openTaskDetail"
@filter-change="applyTaskFilters"
@reorder-status="reorderTaskStatuses"
@create-status="createTaskStatus"
@rename-status="renameTaskStatus"
@delete-status="requestDeleteTaskStatus"
@update-task-status="updateTaskStatusFromBoard"
@delete-task-list="requestRemoveTaskList"
@edit-task-list="showEditTaskListModal = true"
@select-note="selectSearchResultNote"
@select-task-list="selectTaskList"
@page-change="setSearchPage"
@@ -319,6 +314,21 @@
<div v-if="showUnlockModal" class="modal-backdrop fade show"></div>
</teleport>
<EditTaskListModal
v-if="showEditTaskListModal && selectedTaskList"
:task-list="selectedTaskList"
:statuses="taskStatuses"
:category-options="categoryOptions"
:can-delete-task-list="canDeleteTasks"
@close="showEditTaskListModal = false"
@update-task-list="updateTaskListFromModal"
@reorder-status="reorderTaskStatuses"
@create-status="createTaskStatus"
@rename-status="renameTaskStatus"
@delete-status="requestDeleteTaskStatus"
@delete-task-list="requestRemoveTaskList"
/>
<ConfirmActionModal
:visible="showTaskDeleteConfirmModal"
:title="taskDeleteConfirmTitle"
@@ -339,6 +349,7 @@ import CategoryTree from "../components/CategoryTree.vue";
import AppWorkspaceContent from "../components/app/AppWorkspaceContent.vue";
import AppModalHost from "../components/app/AppModalHost.vue";
import ConfirmActionModal from "../components/ConfirmActionModal.vue";
import EditTaskListModal from "../components/EditTaskListModal.vue";
import { sortNotesByPriority } from "../utils/noteSort";
import apiClient from "../services/apiClient";
@@ -354,6 +365,7 @@ const showCreateSpaceModal = ref(false);
const showCreateCategoryModal = ref(false);
const showCreateNoteModal = ref(false);
const showCreateTaskListModal = ref(false);
const showEditTaskListModal = ref(false);
const showSidebar = ref(false);
const navbarRef = ref(null);
const navbarHeight = ref(56);
@@ -819,6 +831,7 @@ watch(
isEditingNote.value = false;
selectedCategory.value = null;
selectedTaskList.value = taskLists.value.find((list) => list.id === taskListId) || null;
await spaceStore.fetchTaskStatuses(currentSpace.value?.id, taskListId);
await applyTaskFilters({ taskListId });
return;
}
@@ -1056,6 +1069,7 @@ const selectTaskList = async (taskList) => {
showSidebar.value = false;
if (currentSpace.value?.id && taskList?.id) {
await router.push(dashboardTaskRoute(currentSpace.value.id, taskList.id));
await spaceStore.fetchTaskStatuses(currentSpace.value.id, taskList.id);
}
await applyTaskFilters({
@@ -1253,22 +1267,22 @@ const createSubtask = (parentTask) => {
};
const createTaskStatus = async (payload) => {
if (!currentSpace.value?.id) {
if (!currentSpace.value?.id || !selectedTaskList.value?.id) {
return;
}
try {
await spaceStore.createTaskStatus(currentSpace.value.id, payload);
await spaceStore.createTaskStatus(currentSpace.value.id, selectedTaskList.value.id, payload);
} catch (error) {
alert(error?.response?.data || "Unable to create status.");
}
};
const renameTaskStatus = async (status) => {
if (!currentSpace.value?.id || !status?.id) {
if (!currentSpace.value?.id || !selectedTaskList.value?.id || !status?.id) {
return;
}
try {
await spaceStore.updateTaskStatus(currentSpace.value.id, status.id, {
await spaceStore.updateTaskStatus(currentSpace.value.id, selectedTaskList.value.id, status.id, {
name: status.name,
color: status.color,
});
@@ -1300,12 +1314,12 @@ const requestDeleteTaskStatus = (status) => {
};
const deleteTaskStatus = async (status) => {
if (!currentSpace.value?.id || !status?.id) {
if (!currentSpace.value?.id || !selectedTaskList.value?.id || !status?.id) {
return;
}
try {
await spaceStore.deleteTaskStatus(currentSpace.value.id, status.id);
await spaceStore.deleteTaskStatus(currentSpace.value.id, selectedTaskList.value.id, status.id);
} catch (error) {
alert(error?.response?.data || "Unable to delete status.");
throw error;
@@ -1313,11 +1327,11 @@ const deleteTaskStatus = async (status) => {
};
const reorderTaskStatuses = async (orderedIds) => {
if (!currentSpace.value?.id) {
if (!currentSpace.value?.id || !selectedTaskList.value?.id) {
return;
}
try {
await spaceStore.reorderTaskStatuses(currentSpace.value.id, orderedIds);
await spaceStore.reorderTaskStatuses(currentSpace.value.id, selectedTaskList.value.id, orderedIds);
} catch (error) {
alert(error?.response?.data || "Unable to reorder statuses.");
}
@@ -1390,10 +1404,25 @@ const createTaskList = async (taskListData) => {
}
};
const updateTaskListFromModal = async (payload) => {
if (!currentSpace.value?.id || !selectedTaskList.value?.id) return;
try {
await spaceStore.updateTaskList(currentSpace.value.id, selectedTaskList.value.id, {
name: payload.name,
description: payload.description,
category_id: payload.category_id,
});
selectedTaskList.value = { ...selectedTaskList.value, name: payload.name, category_id: payload.category_id };
} catch (error) {
alert(error?.response?.data || "Unable to update task list.");
}
};
const requestRemoveTaskList = (taskList) => {
if (!currentSpace.value?.id || !taskList?.id || !canDeleteTasks.value) {
return;
}
showEditTaskListModal.value = false;
taskDeleteIntent.value = {
type: "task-list",
payload: taskList,