small cahnges

This commit is contained in:
tapframe 2025-09-19 17:39:31 +05:30
parent de6c74bee9
commit f76df498f2
4 changed files with 32 additions and 6 deletions

View file

@ -1,4 +1,4 @@
import React, { createContext, useContext, useEffect, useMemo, useState } from 'react'; import React, { createContext, useContext, useEffect, useMemo, useState, useRef } from 'react';
import { InteractionManager } from 'react-native'; import { InteractionManager } from 'react-native';
import accountService, { AuthUser } from '../services/AccountService'; import accountService, { AuthUser } from '../services/AccountService';
import supabase from '../services/supabaseClient'; import supabase from '../services/supabaseClient';
@ -19,6 +19,7 @@ const AccountContext = createContext<AccountContextValue | undefined>(undefined)
export const AccountProvider: React.FC<{ children: React.ReactNode }> = ({ children }) => { export const AccountProvider: React.FC<{ children: React.ReactNode }> = ({ children }) => {
const [user, setUser] = useState<AuthUser | null>(null); const [user, setUser] = useState<AuthUser | null>(null);
const [loading, setLoading] = useState(true); const [loading, setLoading] = useState(true);
const loadingTimeoutRef = useRef<NodeJS.Timeout | null>(null);
useEffect(() => { useEffect(() => {
// Initial session (load full profile) // Initial session (load full profile)
@ -69,6 +70,10 @@ export const AccountProvider: React.FC<{ children: React.ReactNode }> = ({ child
return () => { return () => {
subscription.subscription.unsubscribe(); subscription.subscription.unsubscribe();
task.cancel(); task.cancel();
if (loadingTimeoutRef.current) {
clearTimeout(loadingTimeoutRef.current);
loadingTimeoutRef.current = null;
}
}; };
}, []); }, []);
@ -88,11 +93,27 @@ export const AccountProvider: React.FC<{ children: React.ReactNode }> = ({ child
setUser(null); setUser(null);
}, },
refreshCurrentUser: async () => { refreshCurrentUser: async () => {
// Don't set loading if already loading to avoid conflicts
if (loading) return;
setLoading(true); setLoading(true);
// Set a timeout to prevent loading from getting stuck
loadingTimeoutRef.current = setTimeout(() => {
console.warn('Account loading timeout, forcing loading to false');
setLoading(false);
}, 10000); // 10 second timeout
try { try {
const u = await accountService.getCurrentUser(); const u = await accountService.getCurrentUser();
setUser(u); setUser(u);
} catch (error) {
console.error('Failed to refresh current user:', error);
} finally { } finally {
if (loadingTimeoutRef.current) {
clearTimeout(loadingTimeoutRef.current);
loadingTimeoutRef.current = null;
}
setLoading(false); setLoading(false);
} }
}, },

View file

@ -27,7 +27,6 @@ export const CatalogProvider: React.FC<{ children: React.ReactNode }> = ({ child
const refreshCatalogs = useCallback(() => { const refreshCatalogs = useCallback(() => {
setLastUpdate(Date.now()); setLastUpdate(Date.now());
logger.info('Refreshing catalogs, timestamp:', Date.now());
}, []); }, []);
// Listen for addon changes to update catalog data // Listen for addon changes to update catalog data

View file

@ -377,7 +377,11 @@ const CatalogSettingsScreen = () => {
settingsObj[key] = setting.enabled; settingsObj[key] = setting.enabled;
}); });
await AsyncStorage.setItem(CATALOG_SETTINGS_KEY, JSON.stringify(settingsObj)); await AsyncStorage.setItem(CATALOG_SETTINGS_KEY, JSON.stringify(settingsObj));
refreshCatalogs(); // Trigger catalog refresh after saving settings
// Small delay to ensure AsyncStorage has fully persisted before triggering refresh
setTimeout(() => {
refreshCatalogs(); // Trigger catalog refresh after saving settings
}, 100);
} catch (error) { } catch (error) {
logger.error('Failed to save catalog enabled settings:', error); logger.error('Failed to save catalog enabled settings:', error);
} }

View file

@ -261,12 +261,14 @@ const SettingsScreen: React.FC = () => {
if (__DEV__) console.log('SettingsScreen focused, refreshing auth status. Current state:', { isAuthenticated, userProfile: userProfile?.username }); if (__DEV__) console.log('SettingsScreen focused, refreshing auth status. Current state:', { isAuthenticated, userProfile: userProfile?.username });
} }
refreshAuthStatus(); refreshAuthStatus();
// Also refresh account user in case we returned from auth flow // Only refresh account user if we don't have a user or if we're not already loading
refreshCurrentUser(); if (!user && !accountLoading) {
refreshCurrentUser();
}
}); });
return unsubscribe; return unsubscribe;
}, [navigation, isAuthenticated, userProfile, refreshAuthStatus, refreshCurrentUser]); }, [navigation, isAuthenticated, userProfile, refreshAuthStatus, refreshCurrentUser, user, accountLoading]);
// States for dynamic content // States for dynamic content
const [addonCount, setAddonCount] = useState<number>(0); const [addonCount, setAddonCount] = useState<number>(0);