feat: implement server API route to set active company in cookie and update setActiveCompany method
This commit is contained in:
@@ -120,7 +120,7 @@ class CompanyStore {
|
||||
* @param company - La compañía a establecer como activa
|
||||
* @param silent - Si es true, no dispara el evento companyChanged (para inicialización)
|
||||
*/
|
||||
setActiveCompany(company: Company, silent: boolean = false) {
|
||||
async setActiveCompany(company: Company, silent: boolean = false) {
|
||||
const previousCompanyId = this._activeCompany?.id;
|
||||
this._activeCompany = company;
|
||||
|
||||
@@ -130,8 +130,21 @@ class CompanyStore {
|
||||
}
|
||||
|
||||
// Guardar en cookie para acceso desde el servidor (SSR)
|
||||
if (typeof document !== 'undefined') {
|
||||
document.cookie = `active_company_id=${company.id}; path=/; max-age=${60 * 60 * 24 * 30}; SameSite=Lax`;
|
||||
// Usar el endpoint del servidor para garantizar que la cookie esté disponible en SSR
|
||||
if (browser) {
|
||||
try {
|
||||
await fetch('/api-sveltekit/company/set-active', {
|
||||
method: 'POST',
|
||||
headers: {
|
||||
'Content-Type': 'application/json'
|
||||
},
|
||||
body: JSON.stringify({ companyId: company.id }),
|
||||
credentials: 'include'
|
||||
});
|
||||
console.log('Cookie set via server:', `active_company_id=${company.id}`);
|
||||
} catch (error) {
|
||||
console.error('Error setting active company cookie:', error);
|
||||
}
|
||||
}
|
||||
|
||||
// Despachar evento personalizado solo si:
|
||||
|
||||
@@ -0,0 +1,29 @@
|
||||
/**
|
||||
* API route para establecer la compañía activa en una cookie
|
||||
*/
|
||||
import { json } from '@sveltejs/kit';
|
||||
import type { RequestHandler } from './$types';
|
||||
|
||||
export const POST: RequestHandler = async ({ cookies, request }) => {
|
||||
try {
|
||||
const { companyId } = await request.json();
|
||||
|
||||
if (!companyId || typeof companyId !== 'number') {
|
||||
return json({ error: 'Invalid company ID' }, { status: 400 });
|
||||
}
|
||||
|
||||
// Establecer la cookie desde el servidor
|
||||
cookies.set('active_company_id', companyId.toString(), {
|
||||
path: '/',
|
||||
maxAge: 60 * 60 * 24 * 30, // 30 días
|
||||
sameSite: 'lax',
|
||||
httpOnly: false, // Permitir acceso desde JavaScript
|
||||
secure: process.env.NODE_ENV === 'production'
|
||||
});
|
||||
|
||||
return json({ success: true, companyId });
|
||||
} catch (error) {
|
||||
console.error('Error setting active company:', error);
|
||||
return json({ error: 'Internal server error' }, { status: 500 });
|
||||
}
|
||||
};
|
||||
Reference in New Issue
Block a user