fix: prever 401 Unauthorized do Supabase no cache offline verificando a sessao

This commit is contained in:
2026-02-20 07:46:55 -03:00
parent b7415f0586
commit c9a628abe8

View File

@@ -48,7 +48,7 @@ export const useOffline = () => {
setIsSyncing(true);
try {
const operations = await OfflineManager.getPendingOperations();
for (const operation of operations) {
try {
await processPendingOperation(operation);
@@ -61,13 +61,13 @@ export const useOffline = () => {
);
}
}
// Recarregar operações pendentes
await loadPendingOperations();
// Invalidar queries para atualizar dados
invalidateQueries.all();
console.log('Sincronização concluída');
} catch (error) {
console.error('Error syncing pending operations:', error);
@@ -121,12 +121,16 @@ export const useOffline = () => {
if (!isOnline) return;
try {
// Prevenir 401 chamando o cache apenas se o usuário estiver logado
const { data: { session } } = await supabase.auth.getSession();
if (!session) return;
// Cache usuários
const { data: usuarios } = await supabase
.from('usuarios')
.select('*')
.eq('ativo', true);
if (usuarios) {
await OfflineManager.cacheData('usuarios', usuarios);
}
@@ -135,7 +139,7 @@ export const useOffline = () => {
const { data: obras } = await supabase
.from('obras')
.select('*');
if (obras) {
await OfflineManager.cacheData('obras', obras);
}
@@ -143,19 +147,19 @@ export const useOffline = () => {
// Cache RDOs (últimos 30 dias)
const thirtyDaysAgo = new Date();
thirtyDaysAgo.setDate(thirtyDaysAgo.getDate() - 30);
const { data: rdos } = await supabase
.from('rdos')
.select('*')
.gte('created_at', thirtyDaysAgo.toISOString());
if (rdos) {
await OfflineManager.cacheData('rdos', rdos);
}
// Salvar timestamp da última sincronização
await OfflineManager.setConfig('lastFullSync', Date.now());
console.log('Dados cacheados para uso offline');
} catch (error) {
console.error('Error caching data for offline:', error);
@@ -460,10 +464,10 @@ export const useOfflineStats = () => {
useEffect(() => {
loadStats();
// Atualizar estatísticas a cada 30 segundos
const interval = setInterval(loadStats, 30000);
return () => clearInterval(interval);
}, [loadStats]);