Move project filtering logic into useProjects hook; remove redundant UI filtering

This commit is contained in:
Pramod Mahajan 2025-05-04 02:47:50 +05:30
parent bbb02009b2
commit d34ccfb33c

View File

@ -14,54 +14,46 @@ export const useProjects = () =>
const [error, setError] = useState(""); const [error, setError] = useState("");
const fetchData = async () => { const fetchData = async () => {
const projectIds = profile?.projects || [];
const filterProjects = (projectsList) => {
return projectsList
.filter((proj) => projectIds.includes(String(proj.id)))
.sort((a, b) => a.name.localeCompare(b.name));
};
const projects_cache = getCachedData("projectslist"); const projects_cache = getCachedData("projectslist");
if (!projects_cache) { if (!projects_cache) {
setLoading(true); setLoading(true);
ProjectRepository.getProjectList() try {
.then((response) => { const response = await ProjectRepository.getProjectList();
let projects = response.data; const allProjects = response.data;
const sortedProject = [...projects].sort((a, b) => const filtered = filterProjects(allProjects);
a.name.localeCompare(b.name) setProjects(filtered);
); cacheData("projectslist", allProjects);
} catch (err) {
setProjects(sortedProject); setError("Failed to fetch data.");
cacheData( "projectslist", sortedProject ); } finally {
setLoading(false); setLoading(false);
}) }
.catch((error) => {
setLoading(false);
setError("Failed to fetch data.");
});
} else { } else {
if (!projects.length) { if (!projects.length) {
let projects = projects_cache; const filtered = filterProjects(projects_cache);
const sortedProject = [...projects].sort((a, b) => setProjects(filtered);
a.name.localeCompare(b.name)
);
setProjects( sortedProject );
} }
} }
}; };
useEffect(() => { useEffect( () =>
{
if ( profile )
{
fetchData(); fetchData();
}, []);
}
// useEffect( () => }, [profile]);
// {
// if (projects )
// {
// if ( profile?.projects && profile?.projects?.length > 0 )
// {
// dispatch(setProjectId(profile?.projects[0]))
// } else
// {
// dispatch(setProjectId(1))
// }
// }
// }, [profile]);
return { projects, loading, error, refetch: fetchData }; return { projects, loading, error, refetch: fetchData };
}; };