From 44527f68cfdcbf9b3c58e19c962575fdce61efbd Mon Sep 17 00:00:00 2001 From: chamikaJ Date: Wed, 25 Jun 2025 17:08:40 +0530 Subject: [PATCH 1/6] feat(assignee-selector, suspense-fallback, project-view): optimize component loading and enhance user experience - Integrated synchronous imports for TaskListFilters and filter dropdowns to improve performance and reduce loading times. - Refactored AssigneeSelector to include a new invite member drawer functionality, enhancing user interaction. - Simplified SuspenseFallback components for better loading experiences, ensuring they do not block the main UI. - Updated project view constants to utilize InlineSuspenseFallback for lazy-loaded components, improving rendering efficiency. --- .../src/components/AssigneeSelector.tsx | 13 +++- .../suspense-fallback/suspense-fallback.tsx | 76 +++++++++---------- .../src/lib/project/project-view-constants.ts | 31 ++++++-- .../projectView/board/project-view-board.tsx | 9 +-- .../taskList/project-view-task-list.tsx | 70 +++++++++-------- .../task-list-filters/task-list-filters.tsx | 65 ++++++++-------- 6 files changed, 144 insertions(+), 120 deletions(-) diff --git a/worklenz-frontend/src/components/AssigneeSelector.tsx b/worklenz-frontend/src/components/AssigneeSelector.tsx index a609f523..261588b9 100644 --- a/worklenz-frontend/src/components/AssigneeSelector.tsx +++ b/worklenz-frontend/src/components/AssigneeSelector.tsx @@ -10,6 +10,8 @@ import { SocketEvents } from '@/shared/socket-events'; import { useAuthService } from '@/hooks/useAuth'; import { Avatar, Button, Checkbox } from '@/components'; import { sortTeamMembers } from '@/utils/sort-team-members'; +import { useAppDispatch } from '@/hooks/useAppDispatch'; +import { toggleProjectMemberDrawer } from '@/features/projects/singleProject/members/projectMembersSlice'; interface AssigneeSelectorProps { task: IProjectTask; @@ -34,6 +36,7 @@ const AssigneeSelector: React.FC = ({ const members = useSelector((state: RootState) => state.teamMembersReducer.teamMembers); const currentSession = useAuthService().getCurrentSession(); const { socket } = useSocket(); + const dispatch = useAppDispatch(); const filteredMembers = useMemo(() => { return teamMembers?.data?.filter(member => @@ -149,6 +152,11 @@ const AssigneeSelector: React.FC = ({ return assignees?.includes(memberId) || false; }; + const handleInviteProjectMemberDrawer = () => { + setIsOpen(false); // Close the assignee dropdown first + dispatch(toggleProjectMemberDrawer()); // Then open the invite drawer + }; + return ( <> )} @@ -865,7 +962,19 @@ const ImprovedTaskFilters: React.FC = ({ "{searchValue}"