From f58885911f7a94a1104f435f02a1f077977df84c Mon Sep 17 00:00:00 2001 From: Claude Date: Fri, 7 Nov 2025 22:40:08 +0000 Subject: [PATCH] fix: Add useTenantInitializer to App.tsx to ensure tenantId is populated MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit CRITICAL FIX: This resolves the root cause of dashboard loading state issue. Problem: - Dashboard components stayed in loading state even with API 200 OK responses - React Query hooks had `enabled: !!tenantId` flag (from previous fix) - But tenantId was always empty string because useTenantInitializer was never called Root Cause: The useTenantInitializer hook was only called in UnifiedOnboardingWizard, not at the app level. This hook is responsible for: 1. Loading user tenants when authenticated (loadUserTenants) 2. Automatically setting first tenant as current if none is set 3. Creating mock tenant for demo mode with proper tenantId Fix: Added useTenantInitializer() call to AppContent component in App.tsx. Now it runs on every app load, ensuring: - Authenticated users: tenants loaded from API, first one set as current - Demo mode: mock tenant created with valid demo-tenant-id - tenantId is available before dashboard queries execute Flow after fix: 1. App loads → useTenantInitializer runs 2. Tenant loaded/created → tenantId populated 3. Dashboard loads → React Query hooks enabled (tenantId exists) 4. Queries execute → Data fetched → Components render Related files: - frontend/src/stores/useTenantInitializer.ts (hook definition) - frontend/src/stores/tenant.store.ts (tenant state management) - frontend/src/pages/app/DashboardPage.tsx (uses currentTenant.id) --- frontend/src/App.tsx | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/frontend/src/App.tsx b/frontend/src/App.tsx index f8cf22c1..3c03c70f 100644 --- a/frontend/src/App.tsx +++ b/frontend/src/App.tsx @@ -13,6 +13,7 @@ import { SSEProvider } from './contexts/SSEContext'; import { SubscriptionEventsProvider } from './contexts/SubscriptionEventsContext'; import GlobalSubscriptionHandler from './components/auth/GlobalSubscriptionHandler'; import { CookieBanner } from './components/ui/CookieConsent'; +import { useTenantInitializer } from './stores/useTenantInitializer'; import i18n from './i18n'; const queryClient = new QueryClient({ @@ -29,6 +30,9 @@ const queryClient = new QueryClient({ function AppContent() { const navigate = useNavigate(); + // Initialize tenant data when user is authenticated or in demo mode + useTenantInitializer(); + return ( <> }>