diff --git a/frontend/src/lib/stores/company.svelte.ts b/frontend/src/lib/stores/company.svelte.ts index c90d0261..0714482d 100644 --- a/frontend/src/lib/stores/company.svelte.ts +++ b/frontend/src/lib/stores/company.svelte.ts @@ -3,6 +3,8 @@ * Permite cambiar entre las compañías que pertenecen al tenant */ +import { browser } from '$app/environment'; + interface Company { id: number; name: string; @@ -67,6 +69,11 @@ class CompanyStore { } // Si no hay datos pre-cargados, hacer fetch (fallback) + // Solo en el navegador, nunca durante SSR + if (!browser) { + return; + } + this._loading = true; try { const response = await fetch('/api/v1/a76/company/my-companies'); diff --git a/frontend/src/routes/dashboard/general_catalogs/company_information/+page.server.ts b/frontend/src/routes/dashboard/general_catalogs/company_information/+page.server.ts index ba0683aa..c774b40c 100644 --- a/frontend/src/routes/dashboard/general_catalogs/company_information/+page.server.ts +++ b/frontend/src/routes/dashboard/general_catalogs/company_information/+page.server.ts @@ -1,20 +1,79 @@ -import { getCompanies } from '$lib/api/dashboard/a76/company'; import type { PageServerLoad } from './$types'; +import { getAuthTokens, authenticatedFetch } from '$lib/server/api'; -export const load: PageServerLoad = async ({ url }) => { - const page = Number(url.searchParams.get('page')) || 1; - const pageSize = Number(url.searchParams.get('pageSize')) || 50; - - const filters: Record = {}; - const name = url.searchParams.get('name'); - const rfc = url.searchParams.get('rfc'); +export const load: PageServerLoad = async ({ cookies, fetch, url, parent }) => { + // Esperar a que el layout padre valide/refresque el token + const parentData = await parent(); - if (name) filters.name = name; - if (rfc) filters.rfc = rfc; + const { accessToken } = getAuthTokens(cookies); - const response = await getCompanies(page, pageSize, filters); - - return { - companies: response.data - }; + if (!accessToken) { + return { + error: 'No authenticated', + companies: { + items: [], + total: 0, + page: 1, + page_size: 50, + pages: 0 + } + }; + } + + try { + const page = Number(url.searchParams.get('page')) || 1; + const pageSize = Number(url.searchParams.get('pageSize')) || 50; + + const filters: Record = {}; + const name = url.searchParams.get('name'); + const rfc = url.searchParams.get('rfc'); + + if (name) filters.name = name; + if (rfc) filters.rfc = rfc; + + // Construir URL con parámetros + const queryParams = new URLSearchParams({ + page: page.toString(), + page_size: pageSize.toString(), + ...filters + }); + + const response = await authenticatedFetch( + `v1/a76/company?${queryParams.toString()}`, + { method: 'GET' }, + cookies, + fetch + ); + + if (!response.ok) { + return { + error: 'Failed to load companies', + companies: { + items: [], + total: 0, + page: page, + page_size: pageSize, + pages: 0 + } + }; + } + + const data = await response.json(); + + return { + companies: data + }; + } catch (error) { + console.error('Error loading companies:', error); + return { + error: 'Error loading companies', + companies: { + items: [], + total: 0, + page: 1, + page_size: 50, + pages: 0 + } + }; + } };