diff --git a/frontend/src/lib/stores/company.svelte.ts b/frontend/src/lib/stores/company.svelte.ts index ddcbf4b9..833d2ab0 100644 --- a/frontend/src/lib/stores/company.svelte.ts +++ b/frontend/src/lib/stores/company.svelte.ts @@ -35,7 +35,7 @@ class CompanyStore { * Carga las compañías del tenant del usuario desde el backend * @param preloadedCompanies - Compañías pre-cargadas desde el servidor (SSR) */ - async loadCompanies(preloadedCompanies?: Company[]) { + async loadCompanies(preloadedCompanies?: Company[], activeCompanyId?: number) { // Si tenemos compañías pre-cargadas, usarlas directamente if (preloadedCompanies && preloadedCompanies.length > 0) { // Detectar si el tenant ha cambiado @@ -49,9 +49,18 @@ class CompanyStore { this._currentTenantId = newTenantId; this._companies = preloadedCompanies; - // Si hay compañías y no hay una activa, seleccionar la primera o la guardada + // Si hay compañías y no hay una activa, seleccionar la correcta if (this._companies.length > 0 && !this._activeCompany) { - // Intentar restaurar la compañía guardada + // Prioridad 1: ID pasado por parámetro (desde SSR/Cookie) + if (activeCompanyId) { + const company = this._companies.find(c => c.id === activeCompanyId); + if (company) { + this.setActiveCompany(company, true); + return; + } + } + + // Prioridad 2: Intentar restaurar de localStorage (Browser only) if (typeof window !== 'undefined') { const savedId = localStorage.getItem('activeCompanyId'); if (savedId) { @@ -62,7 +71,7 @@ class CompanyStore { } } } - // Si no hay guardada, seleccionar la primera + // Prioridad 3: Si no hay nada, seleccionar la primera this.setActiveCompany(this._companies[0], true); // silent=true para inicialización } return; @@ -219,8 +228,8 @@ class CompanyStore { * Inicializa el store cargando las compañías * @param preloadedCompanies - Compañías pre-cargadas desde el servidor (SSR) */ - async initialize(preloadedCompanies?: Company[]) { - await this.loadCompanies(preloadedCompanies); + async initialize(preloadedCompanies?: Company[], activeCompanyId?: number) { + await this.loadCompanies(preloadedCompanies, activeCompanyId); // Si no hay compañías pre-cargadas, intentar restaurar de localStorage if (!preloadedCompanies) { this.restoreActiveCompany(); diff --git a/frontend/src/routes/dashboard/+layout.server.ts b/frontend/src/routes/dashboard/+layout.server.ts index efbab4ed..159b309c 100644 --- a/frontend/src/routes/dashboard/+layout.server.ts +++ b/frontend/src/routes/dashboard/+layout.server.ts @@ -45,10 +45,14 @@ export const load: LayoutServerLoad = async ({ cookies, url, fetch }) => { // No bloquear el dashboard si falla la carga de tenants } + // Obtener la compañía activa de la cookie para persistencia + const activeCompanyId = cookies.get('active_company_id'); + return { authenticated: true, user: { ...userData, token: accessToken }, companies, + activeCompanyId: activeCompanyId ? parseInt(activeCompanyId) : undefined, userTenants, error: undefined }; diff --git a/frontend/src/routes/dashboard/+layout.svelte b/frontend/src/routes/dashboard/+layout.svelte index 2e7cbafe..4294fe73 100644 --- a/frontend/src/routes/dashboard/+layout.svelte +++ b/frontend/src/routes/dashboard/+layout.svelte @@ -96,7 +96,7 @@ // ── Inicializar compañías ───────────────────────────────────────────── if (data.companies) { - companyStore.initialize(data.companies); + companyStore.initialize(data.companies, data.activeCompanyId); } // ── Escuchar cambios de compañía y recargar datos ─────────────────────