diff --git a/worklenz-frontend/public/locales/en/kanban-board.json b/worklenz-frontend/public/locales/en/kanban-board.json index bc9b372a..e295a6c6 100644 --- a/worklenz-frontend/public/locales/en/kanban-board.json +++ b/worklenz-frontend/public/locales/en/kanban-board.json @@ -26,5 +26,8 @@ "noDueDate": "No due date", "save": "Save", "clear": "Clear", - "nextWeek": "Next week" + "nextWeek": "Next week", + "noSubtasks": "No subtasks", + "showSubtasks": "Show subtasks", + "hideSubtasks": "Hide subtasks" } diff --git a/worklenz-frontend/src/components/task-drawer/shared/info-tab/subtask-table.tsx b/worklenz-frontend/src/components/task-drawer/shared/info-tab/subtask-table.tsx index 35073fab..d8ca806b 100644 --- a/worklenz-frontend/src/components/task-drawer/shared/info-tab/subtask-table.tsx +++ b/worklenz-frontend/src/components/task-drawer/shared/info-tab/subtask-table.tsx @@ -30,6 +30,7 @@ import { fetchTask, } from '@/features/task-drawer/task-drawer.slice'; import { updateSubtask } from '@/features/board/board-slice'; +import { updateEnhancedKanbanSubtask } from '@/features/enhanced-kanban/enhanced-kanban.slice'; type SubTaskTableProps = { subTasks: ISubTask[]; @@ -111,6 +112,13 @@ const SubTaskTable = ({ subTasks, loadingSubTasks, refreshSubTasks, t }: SubTask try { await tasksApiService.deleteTask(taskId); + dispatch( + updateEnhancedKanbanSubtask({ + sectionId: '', + subtask: { id: taskId, parent_task_id: selectedTaskId || '', manual_progress: false }, + mode: 'delete', + }) + ); dispatch( updateSubtask({ sectionId: '', @@ -118,10 +126,7 @@ const SubTaskTable = ({ subTasks, loadingSubTasks, refreshSubTasks, t }: SubTask mode: 'delete', }) ); - - // Note: Enhanced kanban updates are now handled by the global socket handler - // No need to dispatch here as it will be handled by useTaskSocketHandlers - + refreshSubTasks(); } catch (error) { logger.error('Error deleting subtask:', error); diff --git a/worklenz-frontend/src/components/task-drawer/task-drawer-header/task-drawer-header.tsx b/worklenz-frontend/src/components/task-drawer/task-drawer-header/task-drawer-header.tsx index 735544ea..d87732cc 100644 --- a/worklenz-frontend/src/components/task-drawer/task-drawer-header/task-drawer-header.tsx +++ b/worklenz-frontend/src/components/task-drawer/task-drawer-header/task-drawer-header.tsx @@ -16,7 +16,7 @@ import { SocketEvents } from '@/shared/socket-events'; import useTaskDrawerUrlSync from '@/hooks/useTaskDrawerUrlSync'; import { deleteTask } from '@/features/tasks/tasks.slice'; import { deleteBoardTask, updateTaskName } from '@/features/board/board-slice'; -import { updateEnhancedKanbanTaskName } from '@/features/enhanced-kanban/enhanced-kanban.slice'; +import { updateEnhancedKanbanTaskName, deleteTask as deleteKanbanTask, updateEnhancedKanbanSubtask } from '@/features/enhanced-kanban/enhanced-kanban.slice'; import useTabSearchParam from '@/hooks/useTabSearchParam'; import { IProjectTask } from '@/types/project/projectTasksViewModel.types'; @@ -60,7 +60,15 @@ const TaskDrawerHeader = ({ inputRef, t }: TaskDrawerHeaderProps) => { dispatch(setSelectedTaskId(null)); dispatch(deleteTask({ taskId: selectedTaskId })); dispatch(deleteBoardTask({ sectionId: '', taskId: selectedTaskId })); - + if (taskFormViewModel?.task?.is_sub_task) { + dispatch(updateEnhancedKanbanSubtask({ + sectionId: '', + subtask: { id: selectedTaskId, parent_task_id: taskFormViewModel?.task?.parent_task_id || '', manual_progress: false }, + mode: 'delete', + })); + } else { + dispatch(deleteKanbanTask(selectedTaskId)); // <-- Add this line + } // Reset the flag after a short delay setTimeout(() => { isDeleting.current = false;