Se corrigio el bug de eliminacion de regsitros
This commit is contained in:
@@ -13,9 +13,6 @@
|
||||
|
||||
let { data, columns }: DataTableProps<TData, TValue> = $props();
|
||||
|
||||
/* =========================
|
||||
TABLA REACTIVA (RUNES)
|
||||
========================= */
|
||||
|
||||
const table = $derived(
|
||||
createSvelteTable({
|
||||
|
||||
@@ -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>
|
||||
|
||||
Reference in New Issue
Block a user