Se corrigio el bug de eliminacion de regsitros

This commit is contained in:
2026-01-06 09:10:51 -06:00
parent fac675533c
commit 2c1beffef8
2 changed files with 17 additions and 37 deletions

View File

@@ -13,9 +13,6 @@
let { data, columns }: DataTableProps<TData, TValue> = $props();
/* =========================
TABLA REACTIVA (RUNES)
========================= */
const table = $derived(
createSvelteTable({

View File

@@ -13,13 +13,9 @@
import { companyStore } from '$lib/stores/company.svelte';
import { Plus, Search, Trash2, Loader2 } from 'lucide-svelte';
// Los datos iniciales vienen del servidor
let { data }: { data: PageData } = $props();
// Estado para el diálogo de crear
let showCreateDialog = $state(false);
// Estado para la lista de agentes aduanales
let brokersList = $state<CustomsBroker[]>(data.brokers || []);
let listLoading = $state(false);
let listError = $state<string | null>(data.error || null);
@@ -30,29 +26,16 @@
let searchLoading = $state(false);
let searchError = $state<string | null>(null);
// Control para evitar bucles de recarga
let lastLoadedCompanyId = $state<string>("");
// --- REACTIVIDAD AUTOMÁTICA ---
// 1. Sincronizar si cambia la data del servidor (navegación)
$effect(() => {
if (data.brokers) {
brokersList = data.brokers;
if (data.currentCompanyId) {
lastLoadedCompanyId = data.currentCompanyId.toString();
}
}
});
let lastLoadedCompanyId = $state<string>(data.currentCompanyId?.toString() || "");
// 2. Sincronizar si cambia el store de la empresa
$effect(() => {
const currentId = companyStore.activeCompany?.id?.toString();
// Solo recargamos si hay ID, si es diferente al último y estamos en el navegador
if (browser && currentId && currentId !== lastLoadedCompanyId) {
lastLoadedCompanyId = currentId;
// Recarga normal (false), muestra loading porque cambiamos de empresa
reloadData(false);
}
});
@@ -115,7 +98,7 @@
/**
* Recarga los datos.
* @param silent Si es true, NO bloquea la tabla con el spinner (ideal para delete/create).
* @param silent Si es true, NO bloquea la tabla con el spinner
*/
async function reloadData(silent = false) {
searchKey = '';
@@ -124,7 +107,6 @@
if (!companyStore.activeCompany) return;
// Solo mostramos el spinner visual si NO es silencioso
if (!silent) {
listLoading = true;
}
@@ -146,7 +128,14 @@
}
if (response.data) {
brokersList = response.data;
if (Array.isArray(response.data)) {
brokersList = response.data;
} else if (response.data.items && Array.isArray(response.data.items)) {
brokersList = response.data.items;
} else {
console.error("⚠️ Estructura de datos inesperada:", response.data);
brokersList = [];
}
}
} catch (e) {
listError = 'Error recargando datos';
@@ -161,10 +150,7 @@
}
function handleSuccess() {
// Esperamos 300ms a la DB y recargamos "en silencio" (sin bloquear la tabla)
setTimeout(() => {
reloadData(true);
}, 300);
reloadData(false);
}
const columns = createColumns(handleSuccess);
@@ -275,13 +261,10 @@
{/if}
<div class={listLoading ? 'opacity-50 transition-opacity duration-300' : 'transition-opacity duration-300'}>
{#key brokers}
<DataTable
data={brokers}
{columns}
/>
{/key}
<DataTable
data={brokers}
{columns}
/>
</div>
{/if}
</Card.Content>