feat: persistir selección de compañía mediante cookies y SSR
This commit is contained in:
@@ -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();
|
||||
|
||||
@@ -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
|
||||
};
|
||||
|
||||
@@ -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 ─────────────────────
|
||||
|
||||
Reference in New Issue
Block a user