Move project filtering logic into useProjects hook; remove redundant UI filtering
This commit is contained in:
parent
bbb02009b2
commit
d34ccfb33c
@ -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 };
|
||||||
};
|
};
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user