From 2c4ad2ba4acc41b0b461052edf4f75f44abd5e13 Mon Sep 17 00:00:00 2001 From: Pramod Mahajan Date: Tue, 8 Jul 2025 13:30:11 +0530 Subject: [PATCH] optimized to prevented for maximum deep rendering --- src/pages/project/ProjectList.jsx | 49 ++++++++++++++++--------------- 1 file changed, 26 insertions(+), 23 deletions(-) diff --git a/src/pages/project/ProjectList.jsx b/src/pages/project/ProjectList.jsx index a19079b7..21d8d4ce 100644 --- a/src/pages/project/ProjectList.jsx +++ b/src/pages/project/ProjectList.jsx @@ -25,12 +25,13 @@ const ProjectList = () => { const { profile: loginUser } = useProfile(); const [listView, setListView] = useState(false); const [showModal, setShowModal] = useState(false); + const { projects, loading, error, refetch } = useProjects(); const [projectList, setProjectList] = useState([]); + const HasManageProjectPermission = useHasUserPermission(MANAGE_PROJECT); - const [HasManageProject, setHasManageProject] = useState( - HasManageProjectPermission - ); + const [HasManageProject, setHasManageProject] = useState(HasManageProjectPermission); + const { mutate: createProject } = useCreateProject({ onSuccessCallback: () => { setShowModal(false); @@ -43,7 +44,7 @@ const ProjectList = () => { "603e994b-a27f-4e5d-a251-f3d69b0498ba", "ef1c356e-0fe0-42df-a5d3-8daee355492d", "cdad86aa-8a56-4ff4-b633-9c629057dfef", - "33deaef9-9af1-4f2a-b443-681ea0d04f81", + "33deaef9-9af1-4f2a-b443-681ea0d04f81", ]); const handleShow = () => setShowModal(true); @@ -62,32 +63,32 @@ const ProjectList = () => { .filter((statusId) => grouped[statusId]) .flatMap((statusId) => grouped[statusId].sort((a, b) => - a.name.toLowerCase()?.localeCompare(b.name.toLowerCase()) + a.name.toLowerCase().localeCompare(b.name.toLowerCase()) ) ); - setProjectList(sortedGrouped); + + setProjectList((prev) => { + const isSame = JSON.stringify(prev) === JSON.stringify(sortedGrouped); + return isSame ? prev : sortedGrouped; + }); } }; useEffect(() => { - sortingProject(projects); - }, [projects, loginUser?.projects, loading]); + if (!loading && projects) { + sortingProject(projects); + } + }, [projects, loading, selectedStatuses]); // Include selectedStatuses if it changes filtering useEffect(() => { - if (loginUser) { - setHasManageProject(HasManageProjectPermission); - } else { - setHasManageProject(false); - } + setHasManageProject(loginUser ? HasManageProjectPermission : false); }, [loginUser, HasManageProjectPermission]); - - - const handleSubmitForm = (newProject, setloading, reset) => { - setloading(true); + const handleSubmitForm = (newProject, setLoading, reset) => { + setLoading(true); createProject(newProject, { onSettled: () => { - setloading(false); + setLoading(false); reset(); }, }); @@ -114,11 +115,15 @@ const ProjectList = () => { return matchesStatus && matchesSearch; }); + const totalPages = Math.ceil(filteredProjects.length / ITEMS_PER_PAGE); - const totalPages = Math.ceil( filteredProjects.length / ITEMS_PER_PAGE ); + const { + currentItems, + currentPage, + paginate, + setCurrentPage, + } = usePagination(filteredProjects, ITEMS_PER_PAGE); - const {currentItems,currentPage,paginate,setCurrentPage} = usePagination(filteredProjects, ITEMS_PER_PAGE) - useEffect(() => { const tooltipTriggerList = Array.from( document.querySelectorAll('[data-bs-toggle="tooltip"]') @@ -126,8 +131,6 @@ const ProjectList = () => { tooltipTriggerList.forEach((el) => new bootstrap.Tooltip(el)); }, []); - - return ( <>