add network listener management and enhance sync on reconnect functionality

This commit is contained in:
Mo Tarbin
2026-05-16 19:33:07 -04:00
parent 07c31ebde1
commit d618a09f6d
8 changed files with 92 additions and 36 deletions

View File

@@ -1,5 +1,10 @@
import { useQuery, useMutation, useQueryClient } from '@tanstack/react-query'
import { GetProjects, CreateProject, UpdateProject, DeleteProject } from '../../utils/Fetcher'
import { useMutation, useQuery, useQueryClient } from '@tanstack/react-query'
import {
CreateProject,
DeleteProject,
GetProjects,
UpdateProject,
} from '../../utils/Fetcher'
import { offlineDB } from '../../utils/OfflineDB'
// Query hook for fetching all projects
@@ -33,7 +38,7 @@ export const useCreateProject = () => {
const queryClient = useQueryClient()
return useMutation({
mutationFn: async (projectData) => {
mutationFn: async projectData => {
try {
const response = await CreateProject(projectData)
if (response.ok) {
@@ -53,7 +58,7 @@ export const useCreateProject = () => {
return localProject
}
},
onSuccess: (newProject) => {
onSuccess: newProject => {
// Update the projects cache
queryClient.setQueryData(['projects'], (oldProjects = []) => {
const updatedProjects = [...oldProjects, newProject]
@@ -63,7 +68,7 @@ export const useCreateProject = () => {
// Invalidate and refetch
queryClient.invalidateQueries(['projects'])
},
onError: (error) => {
onError: error => {
console.error('Create project mutation failed:', error)
},
})
@@ -92,18 +97,18 @@ export const useUpdateProject = () => {
}
}
},
onSuccess: (updatedProject) => {
onSuccess: updatedProject => {
// Update the projects cache
queryClient.setQueryData(['projects'], (oldProjects = []) => {
return oldProjects.map(project =>
project.id === updatedProject.id ? updatedProject : project
project.id === updatedProject.id ? updatedProject : project,
)
})
// Invalidate and refetch
queryClient.invalidateQueries(['projects'])
},
onError: (error) => {
onError: error => {
console.error('Update project mutation failed:', error)
},
})
@@ -114,7 +119,7 @@ export const useDeleteProject = () => {
const queryClient = useQueryClient()
return useMutation({
mutationFn: async (projectId) => {
mutationFn: async projectId => {
try {
// Prevent deletion of default project
if (projectId === 'default') {
@@ -141,14 +146,14 @@ export const useDeleteProject = () => {
// Invalidate and refetch
queryClient.invalidateQueries(['projects'])
},
onError: (error) => {
onError: error => {
console.error('Delete project mutation failed:', error)
},
})
}
// Hook to get a specific project by ID
export const useProject = (projectId) => {
export const useProject = projectId => {
return useQuery({
queryKey: ['projects', projectId],
queryFn: async () => {
@@ -179,4 +184,4 @@ export const useProject = (projectId) => {
staleTime: 5 * 60 * 1000,
cacheTime: 10 * 60 * 1000,
})
}
}