@@ -33,19 +33,22 @@ export default function TasksProvider({ children }) {
3333 deleteRecord : deleteTaskIDB ,
3434 getByID : getTaskIDB ,
3535 } = useIndexedDB ( "tasks" ) ;
36- const [ syncing , setSyncing ] = useState ( false ) ;
3736
3837 const [ tasks , setTasks ] = useState ( [ ] ) ;
3938 const [ _selectedTask , setSelectedTask ] = useState ( ) ;
4039 const { authUsername, afterSignUp } = useAuth ( ) ;
4140 const [ updating , setUpdating ] = useState ( false ) ;
4241 const [ deleting , setDeleting ] = useState ( false ) ;
4342 const [ adding , setAdding ] = useState ( false ) ;
43+ const syncRef = useRef ( null ) ;
4444
4545 const syncTasks = useCallback (
4646 async ( username ) => {
47+ if ( syncRef . current ) return ;
4748 if ( ! username ) return ;
48- setSyncing ( true ) ;
49+
50+ syncRef . current = true ;
51+
4952 toastSyncRef . current = toast ( {
5053 title : "Syncing tasks..." ,
5154 status : "loading" ,
@@ -174,7 +177,8 @@ export default function TasksProvider({ children }) {
174177 } ) ;
175178 }
176179
177- setSyncing ( false ) ;
180+ syncRef . current = false ;
181+
178182 toast . close ( toastSyncRef . current ) ;
179183 } ,
180184 [ addTaskIDB , deleteTaskIDB , editTaskIDB , getAllTasksIDB , toast ]
@@ -200,15 +204,13 @@ export default function TasksProvider({ children }) {
200204 . sort ( ( a , b ) => new Date ( a . createdAt ) - new Date ( b . createdAt ) )
201205 ) ;
202206
203- if ( ! syncing && username !== GUEST_USERNAME && navigator . onLine )
204- syncTasks ( username ) ;
207+ if ( username !== GUEST_USERNAME && navigator . onLine ) syncTasks ( username ) ;
205208 } ,
206- [ getAllTasksIDB , syncTasks , syncing ]
209+ [ getAllTasksIDB , syncTasks ]
207210 ) ;
208211
209212 const syncAfterSignUp = useCallback (
210213 async ( username ) => {
211- setSyncing ( true ) ;
212214 toastSyncRef . current = toast ( {
213215 title : "Syncing tasks..." ,
214216 status : "loading" ,
@@ -259,7 +261,6 @@ export default function TasksProvider({ children }) {
259261 . sort ( ( a , b ) => new Date ( a . createdAt ) - new Date ( b . createdAt ) )
260262 ) ;
261263
262- setSyncing ( false ) ;
263264 toast . close ( toastSyncRef . current ) ;
264265 } ,
265266 [ addTaskIDB , deleteTaskIDB , getAllTasksIDB , toast ]
@@ -447,8 +448,8 @@ export default function TasksProvider({ children }) {
447448 } , [ toast ] ) ;
448449
449450 const handleSync = useCallback ( ( ) => {
450- if ( ! syncing && authUsername && navigator . onLine ) syncTasks ( authUsername ) ;
451- } , [ authUsername , syncing , syncTasks ] ) ;
451+ if ( authUsername && navigator . onLine ) syncTasks ( authUsername ) ;
452+ } , [ authUsername , syncTasks ] ) ;
452453
453454 useEffect ( ( ) => {
454455 window . addEventListener ( "online" , handleSync ) ;
0 commit comments