From 87f73ee4c2bbf9f00406c1de1eade93f0d4bc7f4 Mon Sep 17 00:00:00 2001 From: shancds Date: Tue, 1 Jul 2025 18:21:52 +0530 Subject: [PATCH] feat(assignee-selector): enhance real-time updates and UI interactions - Added socket event handling for quick assignee updates, dispatching changes to the enhanced Kanban state. - Updated AssigneeSelector component to prevent event propagation on dropdown interactions. - Integrated AvatarGroup and LazyAssigneeSelectorWrapper in EnhancedKanbanTaskCard for improved assignee display and selection. --- .../src/components/AssigneeSelector.tsx | 22 ++++++++++++++----- .../EnhancedKanbanTaskCard.tsx | 14 +++++++++--- 2 files changed, 27 insertions(+), 9 deletions(-) diff --git a/worklenz-frontend/src/components/AssigneeSelector.tsx b/worklenz-frontend/src/components/AssigneeSelector.tsx index 177e0e73..50cabbab 100644 --- a/worklenz-frontend/src/components/AssigneeSelector.tsx +++ b/worklenz-frontend/src/components/AssigneeSelector.tsx @@ -14,6 +14,7 @@ import { sortTeamMembers } from '@/utils/sort-team-members'; import { useAppDispatch } from '@/hooks/useAppDispatch'; import { toggleProjectMemberDrawer } from '@/features/projects/singleProject/members/projectMembersSlice'; import { updateTask } from '@/features/task-management/task-management.slice'; +import { updateEnhancedKanbanTaskAssignees } from '@/features/enhanced-kanban/enhanced-kanban.slice'; interface AssigneeSelectorProps { task: IProjectTask; @@ -177,6 +178,12 @@ const AssigneeSelector: React.FC = ({ // Emit socket event - the socket handler will update Redux with proper types socket?.emit(SocketEvents.QUICK_ASSIGNEES_UPDATE.toString(), JSON.stringify(body)); + socket?.once( + SocketEvents.QUICK_ASSIGNEES_UPDATE.toString(), + (data: any) => { + dispatch(updateEnhancedKanbanTaskAssignees(data)); + } + ); // Remove from pending changes after a short delay (optimistic) setTimeout(() => { @@ -226,6 +233,7 @@ const AssigneeSelector: React.FC = ({ {isOpen && createPortal(
e.stopPropagation()} className={` fixed z-9999 w-72 rounded-md shadow-lg border ${isDarkMode @@ -284,12 +292,14 @@ const AssigneeSelector: React.FC = ({ }} >
- handleMemberToggle(member.id || '', checked)} - disabled={member.pending_invitation || pendingChanges.has(member.id || '')} - isDarkMode={isDarkMode} - /> + e.stopPropagation()}> + handleMemberToggle(member.id || '', checked)} + disabled={member.pending_invitation || pendingChanges.has(member.id || '')} + isDarkMode={isDarkMode} + /> + {pendingChanges.has(member.id || '') && (
= React.memo marginBlock: 8, }} > - {task && } - + + + +