feat: Enhance company loading logic with authentication and error handling

This commit is contained in:
2025-12-08 14:37:45 -06:00
parent 9b9d6470be
commit 648197b171
2 changed files with 81 additions and 15 deletions

View File

@@ -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');

View File

@@ -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<string, any> = {};
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<string, string> = {};
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
}
};
}
};