Skip to content

Commit c869883

Browse files
committed
useCallback from react added to avoid loading loop
1 parent aafb080 commit c869883

File tree

1 file changed

+30
-25
lines changed

1 file changed

+30
-25
lines changed

src/features/projects/view/ProjectsContextProvider.tsx

Lines changed: 30 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
"use client";
22

3-
import { useState, useEffect, useRef } from "react";
3+
import { useState, useEffect, useRef, useCallback } from "react";
44
import { ProjectsContext } from "@/common";
55
import { Project } from "@/features/projects/domain";
66

@@ -15,38 +15,43 @@ const ProjectsContextProvider = ({
1515
const [refreshing, setRefreshing] = useState(false);
1616
const isLoadingRef = useRef(false);
1717

18+
1819
const setProjectsAndRefreshed = (value: Project[]) => {
1920
setProjects(value);
2021
};
2122

22-
const refreshProjects = () => {
23-
if (isLoadingRef.current) return;
24-
isLoadingRef.current = true;
25-
setRefreshing(true);
26-
fetch("/api/refresh-projects", { method: "POST" })
27-
.then((res) => res.json())
28-
.then(({ projects }) => {
29-
if (projects) setProjectsAndRefreshed(projects);
30-
})
31-
.catch((error) => console.error("Failed to refresh projects", error))
32-
.finally(() => {
33-
isLoadingRef.current = false;
34-
setRefreshing(false);
35-
});
36-
};
23+
const refreshProjects = useCallback(() => {
24+
if (isLoadingRef.current) return;
25+
isLoadingRef.current = true;
26+
setRefreshing(true);
27+
fetch("/api/refresh-projects", { method: "POST" })
28+
.then((res) => res.json())
29+
.then(({ projects }) => {
30+
if (projects) setProjectsAndRefreshed(projects);
31+
})
32+
.catch((error) => console.error("Failed to refresh projects", error))
33+
.finally(() => {
34+
isLoadingRef.current = false;
35+
setRefreshing(false);
36+
});
37+
}, []);
3738

3839
// Trigger background refresh after initial mount
39-
useEffect(() => {
40-
refreshProjects();
41-
const handleVisibilityChange = () => {
42-
if (!document.hidden) refreshProjects();
43-
};
44-
document.addEventListener("visibilitychange", handleVisibilityChange);
45-
return () => document.removeEventListener("visibilitychange", handleVisibilityChange);
46-
}, []);
40+
41+
useEffect(() => {
42+
// Initial refresh
43+
refreshProjects();
44+
const handleVisibilityChange = () => {
45+
if (!document.hidden) refreshProjects();
46+
};
47+
document.addEventListener("visibilitychange", handleVisibilityChange);
48+
return () => {
49+
document.removeEventListener("visibilitychange", handleVisibilityChange);
50+
};
51+
}, [refreshProjects]);
4752

4853
return (
49-
<ProjectsContext.Provider value={{ projects, refreshing,refreshProjects }}>
54+
<ProjectsContext.Provider value={{ projects, refreshing, refreshProjects }}>
5055
{children}
5156
</ProjectsContext.Provider>
5257
);

0 commit comments

Comments
 (0)