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 4777257a..61190bb1 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 @@ -10,7 +10,7 @@ import { useAuthService } from '@/hooks/useAuth'; import TaskDrawerStatusDropdown from '../task-drawer-status-dropdown/task-drawer-status-dropdown'; import { tasksApiService } from '@/api/tasks/tasks.api.service'; import { useAppDispatch } from '@/hooks/useAppDispatch'; -import { setSelectedTaskId, setShowTaskDrawer } from '@/features/task-drawer/task-drawer.slice'; +import { setSelectedTaskId } from '@/features/task-drawer/task-drawer.slice'; import { useSocket } from '@/socket/socketContext'; import { SocketEvents } from '@/shared/socket-events'; import useTaskDrawerUrlSync from '@/hooks/useTaskDrawerUrlSync'; @@ -18,6 +18,7 @@ import { deleteTask } from '@/features/tasks/tasks.slice'; import { deleteTask as deleteTaskFromManagement } from '@/features/task-management/task-management.slice'; import { deselectTask } from '@/features/task-management/selection.slice'; import { deleteBoardTask } from '@/features/board/board-slice'; +import { deleteTask as deleteKanbanTask, updateEnhancedKanbanSubtask } from '@/features/enhanced-kanban/enhanced-kanban.slice'; import useTabSearchParam from '@/hooks/useTabSearchParam'; import { ITaskViewModel } from '@/types/tasks/task.types'; @@ -61,9 +62,18 @@ const TaskDrawerHeader = ({ inputRef, t }: TaskDrawerHeaderProps) => { // Clear the task drawer state and URL dispatch(setSelectedTaskId(null)); - dispatch(setShowTaskDrawer(false)); - - // Clear the URL parameter last to avoid race conditions + 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(() => { clearTaskFromUrl(); isDeleting.current = false;