11"use client" ;
22
3- import { useState , useEffect , useRef } from "react" ;
3+ import { useState , useEffect , useRef , useCallback } from "react" ;
44import { ProjectsContext } from "@/common" ;
55import { 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