From f76df498f2f249f3aa42046a0f10d1928d83def0 Mon Sep 17 00:00:00 2001 From: tapframe Date: Fri, 19 Sep 2025 17:39:31 +0530 Subject: [PATCH] small cahnges --- src/contexts/AccountContext.tsx | 23 ++++++++++++++++++++++- src/contexts/CatalogContext.tsx | 1 - src/screens/CatalogSettingsScreen.tsx | 6 +++++- src/screens/SettingsScreen.tsx | 8 +++++--- 4 files changed, 32 insertions(+), 6 deletions(-) diff --git a/src/contexts/AccountContext.tsx b/src/contexts/AccountContext.tsx index 67b6d56..d71676c 100644 --- a/src/contexts/AccountContext.tsx +++ b/src/contexts/AccountContext.tsx @@ -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 accountService, { AuthUser } from '../services/AccountService'; import supabase from '../services/supabaseClient'; @@ -19,6 +19,7 @@ const AccountContext = createContext(undefined) export const AccountProvider: React.FC<{ children: React.ReactNode }> = ({ children }) => { const [user, setUser] = useState(null); const [loading, setLoading] = useState(true); + const loadingTimeoutRef = useRef(null); useEffect(() => { // Initial session (load full profile) @@ -69,6 +70,10 @@ export const AccountProvider: React.FC<{ children: React.ReactNode }> = ({ child return () => { subscription.subscription.unsubscribe(); 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); }, refreshCurrentUser: async () => { + // Don't set loading if already loading to avoid conflicts + if (loading) return; + 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 { const u = await accountService.getCurrentUser(); setUser(u); + } catch (error) { + console.error('Failed to refresh current user:', error); } finally { + if (loadingTimeoutRef.current) { + clearTimeout(loadingTimeoutRef.current); + loadingTimeoutRef.current = null; + } setLoading(false); } }, diff --git a/src/contexts/CatalogContext.tsx b/src/contexts/CatalogContext.tsx index 41e734c..2f70b2c 100644 --- a/src/contexts/CatalogContext.tsx +++ b/src/contexts/CatalogContext.tsx @@ -27,7 +27,6 @@ export const CatalogProvider: React.FC<{ children: React.ReactNode }> = ({ child const refreshCatalogs = useCallback(() => { setLastUpdate(Date.now()); - logger.info('Refreshing catalogs, timestamp:', Date.now()); }, []); // Listen for addon changes to update catalog data diff --git a/src/screens/CatalogSettingsScreen.tsx b/src/screens/CatalogSettingsScreen.tsx index d58583a..3461e14 100644 --- a/src/screens/CatalogSettingsScreen.tsx +++ b/src/screens/CatalogSettingsScreen.tsx @@ -377,7 +377,11 @@ const CatalogSettingsScreen = () => { settingsObj[key] = setting.enabled; }); 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) { logger.error('Failed to save catalog enabled settings:', error); } diff --git a/src/screens/SettingsScreen.tsx b/src/screens/SettingsScreen.tsx index a385d27..235b000 100644 --- a/src/screens/SettingsScreen.tsx +++ b/src/screens/SettingsScreen.tsx @@ -261,12 +261,14 @@ const SettingsScreen: React.FC = () => { if (__DEV__) console.log('SettingsScreen focused, refreshing auth status. Current state:', { isAuthenticated, userProfile: userProfile?.username }); } refreshAuthStatus(); - // Also refresh account user in case we returned from auth flow - refreshCurrentUser(); + // Only refresh account user if we don't have a user or if we're not already loading + if (!user && !accountLoading) { + refreshCurrentUser(); + } }); return unsubscribe; - }, [navigation, isAuthenticated, userProfile, refreshAuthStatus, refreshCurrentUser]); + }, [navigation, isAuthenticated, userProfile, refreshAuthStatus, refreshCurrentUser, user, accountLoading]); // States for dynamic content const [addonCount, setAddonCount] = useState(0);