feat: Enhance company loading logic with authentication and error handling
This commit is contained in:
@@ -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');
|
||||
|
||||
@@ -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
|
||||
}
|
||||
};
|
||||
}
|
||||
};
|
||||
|
||||
Reference in New Issue
Block a user