diff --git a/worklenz-frontend/src/components/task-drawer/shared/info-tab/details/task-drawer-progress/task-drawer-progress.tsx b/worklenz-frontend/src/components/task-drawer/shared/info-tab/details/task-drawer-progress/task-drawer-progress.tsx index df1ce2ea..f6b025d4 100644 --- a/worklenz-frontend/src/components/task-drawer/shared/info-tab/details/task-drawer-progress/task-drawer-progress.tsx +++ b/worklenz-frontend/src/components/task-drawer/shared/info-tab/details/task-drawer-progress/task-drawer-progress.tsx @@ -14,6 +14,7 @@ import { setTaskStatus } from '@/features/task-drawer/task-drawer.slice'; import { useAppDispatch } from '@/hooks/useAppDispatch'; import { updateBoardTaskStatus } from '@/features/board/board-slice'; import { updateTaskProgress, updateTaskStatus } from '@/features/tasks/tasks.slice'; +import { updateEnhancedKanbanTaskStatus, updateEnhancedKanbanTaskProgress } from '@/features/enhanced-kanban/enhanced-kanban.slice'; import useTabSearchParam from '@/hooks/useTabSearchParam'; interface TaskDrawerProgressProps { @@ -102,14 +103,27 @@ const TaskDrawerProgress = ({ task, form }: TaskDrawerProgressProps) => { ); socket?.once(SocketEvents.GET_TASK_PROGRESS.toString(), (data: any) => { - dispatch( - updateTaskProgress({ - taskId: task.id, - progress: data.complete_ratio, - totalTasksCount: data.total_tasks_count, - completedCount: data.completed_count, - }) - ); + if (tab === 'tasks-list') { + dispatch( + updateTaskProgress({ + taskId: task.id, + progress: data.complete_ratio, + totalTasksCount: data.total_tasks_count, + completedCount: data.completed_count, + }) + ); + } + if (tab === 'board') { + dispatch( + updateEnhancedKanbanTaskProgress({ + id: task.id, + complete_ratio: data.complete_ratio, + completed_count: data.completed_count, + total_tasks_count: data.total_tasks_count, + parent_task: task.parent_task_id || null, + }) + ); + } }); if (task.id) { @@ -185,7 +199,7 @@ const TaskDrawerProgress = ({ task, form }: TaskDrawerProgressProps) => { dispatch(updateTaskStatus(data)); } if (tab === 'board') { - dispatch(updateBoardTaskStatus(data)); + dispatch(updateEnhancedKanbanTaskStatus(data)); } if (data.parent_task) socket?.emit(SocketEvents.GET_TASK_PROGRESS.toString(), data.parent_task); 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 0bc322f3..15cd2cca 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,6 +16,9 @@ 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 useTabSearchParam from '@/hooks/useTabSearchParam'; +import { IProjectTask } from '@/types/project/projectTasksViewModel.types'; type TaskDrawerHeaderProps = { inputRef: React.RefObject; @@ -26,6 +29,7 @@ const TaskDrawerHeader = ({ inputRef, t }: TaskDrawerHeaderProps) => { const dispatch = useAppDispatch(); const { socket, connected } = useSocket(); const { clearTaskFromUrl } = useTaskDrawerUrlSync(); + const { tab } = useTabSearchParam(); const isDeleting = useRef(false); const [isEditing, setIsEditing] = useState(false); @@ -84,7 +88,13 @@ const TaskDrawerHeader = ({ inputRef, t }: TaskDrawerHeaderProps) => { const handleReceivedTaskNameChange = (data: { id: string; parent_task: string; name: string }) => { if (data.id === selectedTaskId) { - dispatch(updateTaskName({ task: data })); + const taskData = { ...data, manual_progress: false } as IProjectTask; + dispatch(updateTaskName({ task: taskData })); + + // Also update enhanced kanban if on board tab + if (tab === 'board') { + dispatch(updateEnhancedKanbanTaskName({ task: taskData })); + } } }; @@ -152,7 +162,7 @@ const TaskDrawerHeader = ({ inputRef, t }: TaskDrawerHeaderProps) => { diff --git a/worklenz-frontend/src/features/enhanced-kanban/enhanced-kanban.slice.ts b/worklenz-frontend/src/features/enhanced-kanban/enhanced-kanban.slice.ts index 90303e71..f4974f0f 100644 --- a/worklenz-frontend/src/features/enhanced-kanban/enhanced-kanban.slice.ts +++ b/worklenz-frontend/src/features/enhanced-kanban/enhanced-kanban.slice.ts @@ -694,6 +694,24 @@ const enhancedKanbanSlice = createSlice({ state.taskCache[parent_task || id] = task; }, + // Enhanced Kanban task name update (for use in task drawer header) + updateEnhancedKanbanTaskName: ( + state, + action: PayloadAction<{ + task: IProjectTask; + }> + ) => { + const { task } = action.payload; + + // Find the task and update it + const result = findTaskInAllGroups(state.taskGroups, task.id || ''); + if (result) { + result.task.name = task.name; + // Update cache + state.taskCache[task.id!] = result.task; + } + }, + updateTaskPriority: (state, action: PayloadAction) => { const { id: task_id, priority_id } = action.payload; @@ -907,6 +925,7 @@ export const { updateEnhancedKanbanTaskAssignees, updateEnhancedKanbanTaskLabels, updateEnhancedKanbanTaskProgress, + updateEnhancedKanbanTaskName, } = enhancedKanbanSlice.actions; export default enhancedKanbanSlice.reducer; \ No newline at end of file