Se arreglo el catalogo de UM

This commit is contained in:
2026-01-22 11:44:54 -06:00
parent e338236a1c
commit 587dfed2f2
3 changed files with 32 additions and 56 deletions

View File

@@ -17,6 +17,7 @@ ace_router = TenantCRUDRoutes(
id_name="id", id_name="id",
enable_list=True, enable_list=True,
enable_filters=True, enable_filters=True,
max_page_size=10000,
).router ).router
router.include_router(ace_router) router.include_router(ace_router)
@@ -32,6 +33,7 @@ oma_router = TenantCRUDRoutes(
id_name="id", id_name="id",
enable_list=True, enable_list=True,
enable_filters=True, enable_filters=True,
max_page_size=10000,
).router ).router
router.include_router(oma_router) router.include_router(oma_router)
@@ -47,6 +49,7 @@ american_router = TenantCRUDRoutes(
id_name="id", id_name="id",
enable_list=True, enable_list=True,
enable_filters=True, enable_filters=True,
max_page_size=10000,
).router ).router
router.include_router(american_router) router.include_router(american_router)
@@ -62,6 +65,7 @@ customs_router = TenantCRUDRoutes(
id_name="id", id_name="id",
enable_list=True, enable_list=True,
enable_filters=True, enable_filters=True,
max_page_size=10000,
).router ).router
router.include_router(customs_router) router.include_router(customs_router)
@@ -77,6 +81,7 @@ general_router = TenantCRUDRoutes(
id_name="id", id_name="id",
enable_list=True, enable_list=True,
enable_filters=True, enable_filters=True,
max_page_size=10000,
).router ).router
router.include_router(general_router) router.include_router(general_router)
@@ -93,5 +98,6 @@ main_router = TenantCRUDRoutes(
id_name="id", id_name="id",
enable_list=True, enable_list=True,
enable_filters=True, enable_filters=True,
max_page_size=10000,
).router ).router
router.include_router(main_router) router.include_router(main_router)

View File

@@ -295,7 +295,7 @@ export interface UnitOfMeasureListResponse {
export async function getUnitsOfMeasure( export async function getUnitsOfMeasure(
page: number = 1, page: number = 1,
pageSize: number = 50, pageSize: number = 1000,
companyId: number, companyId: number,
filters: Record<string, any> = {} filters: Record<string, any> = {}
): Promise<ApiResponse<UnitOfMeasureListResponse>> { ): Promise<ApiResponse<UnitOfMeasureListResponse>> {

View File

@@ -16,15 +16,27 @@
} = $props(); } = $props();
let items = $state<UnitOfMeasure[]>([]); let items = $state<UnitOfMeasure[]>([]);
let allItems = $state<UnitOfMeasure[]>([]); // Store full dataset
let loading = $state(false); let loading = $state(false);
let searchTerm = $state(""); let searchTerm = $state("");
let page = $state(1);
let totalPages = $state(1); // Derived state for filtering
let searchTimeout: NodeJS.Timeout; $effect(() => {
if (!searchTerm) {
items = allItems;
} else {
const lowerTerm = searchTerm.toLowerCase();
items = allItems.filter(item =>
item.code.toLowerCase().includes(lowerTerm) ||
(item.description && item.description.toLowerCase().includes(lowerTerm)) ||
(item.description_en && item.description_en.toLowerCase().includes(lowerTerm))
);
}
});
// Cargar datos al abrir // Cargar datos al abrir
$effect(() => { $effect(() => {
if (open && companyStore.activeCompany) { if (open && companyStore.activeCompany && allItems.length === 0) {
loadData(); loadData();
} }
}); });
@@ -34,17 +46,12 @@
loading = true; loading = true;
try { try {
const filters = searchTerm ? { code: searchTerm } : {}; // Fetch everything once using the high limit
// Nota: Si tu backend soporta búsqueda por descripción, úsalo aquí. const response = await getUnitsOfMeasure(1, 1000, companyStore.activeCompany.id, {});
// Por ahora asumo búsqueda por 'code' o 'description' según tu filtro backend.
const response = await getUnitsOfMeasure(page, 10, companyStore.activeCompany.id, {
q: searchTerm // Asumiendo que tu backend tiene un filtro genérico 'q' o usa 'code'/'description'
});
if (response.data) { if (response.data) {
items = response.data.items; allItems = response.data.items;
totalPages = response.data.pages; items = allItems; // Initialize view
} }
} catch (error) { } catch (error) {
console.error("Error cargando unidades:", error); console.error("Error cargando unidades:", error);
@@ -56,32 +63,13 @@
function handleSearch(e: Event) { function handleSearch(e: Event) {
const value = (e.target as HTMLInputElement).value; const value = (e.target as HTMLInputElement).value;
searchTerm = value; searchTerm = value;
page = 1; // No network call needed, $effect handles filtering
clearTimeout(searchTimeout);
searchTimeout = setTimeout(() => {
loadData();
}, 500);
} }
function handleSelect(item: UnitOfMeasure) { function handleSelect(item: UnitOfMeasure) {
onSelect(item); onSelect(item);
open = false; open = false;
} }
function nextPage() {
if (page < totalPages) {
page++;
loadData();
}
}
function prevPage() {
if (page > 1) {
page--;
loadData();
}
}
</script> </script>
<Dialog.Root bind:open> <Dialog.Root bind:open>
@@ -104,7 +92,7 @@
/> />
</div> </div>
<div class="rounded-md border h-[300px] overflow-auto relative"> <div class="rounded-md border h-[400px] overflow-auto relative">
{#if loading} {#if loading}
<div class="absolute inset-0 bg-background/50 flex items-center justify-center z-10"> <div class="absolute inset-0 bg-background/50 flex items-center justify-center z-10">
<Loader2 class="h-6 w-6 animate-spin text-primary" /> <Loader2 class="h-6 w-6 animate-spin text-primary" />
@@ -146,27 +134,9 @@
</Table.Body> </Table.Body>
</Table.Root> </Table.Root>
</div> </div>
<div class="flex items-center justify-between"> <div class="text-xs text-muted-foreground text-center">
<span class="text-xs text-muted-foreground">Página {page} de {totalPages}</span> Mostrando {items.length} registros
<div class="flex gap-2">
<Button
variant="outline"
size="sm"
disabled={page === 1 || loading}
onclick={prevPage}
>
Anterior
</Button>
<Button
variant="outline"
size="sm"
disabled={page >= totalPages || loading}
onclick={nextPage}
>
Siguiente
</Button>
</div>
</div> </div>
</div> </div>
</Dialog.Content> </Dialog.Content>