diff --git a/views/escrituras.html b/views/escrituras.html index b6860f8..2af115f 100644 --- a/views/escrituras.html +++ b/views/escrituras.html @@ -561,9 +561,15 @@ async function loadAll(showOverlay=false) { const rows = await apiFetch('GET','list'); if (rows === null) return; allRows = rows || []; - setSyncState('ok','Sincronizado'); - // No re-renderizar si el usuario está escribiendo una fila nueva - if (!isEditing) render(); + // No re-renderizar si el usuario está editando (fila nueva o existente). + // Los datos quedan en memoria; se aplicarán al salir de edición. + if (isEditing || editingRows.size > 0) { + pendingRefresh = true; + setSyncState('ok','Edición en curso · refresco pausado'); + } else { + render(); + setSyncState('ok','Sincronizado'); + } } catch(e) { setSyncState('error','Sin conexión'); toast('Error al cargar datos: '+e.message,'error'); @@ -572,6 +578,15 @@ async function loadAll(showOverlay=false) { } } +// Si el poll trajo datos mientras se estaba editando, aplicarlos al terminar +function maybeFlushRefresh() { + if (pendingRefresh && !isEditing && editingRows.size === 0) { + pendingRefresh = false; + render(); + setSyncState('ok','Sincronizado'); + } +} + async function saveRow(row) { try { setSyncState('syncing','Guardando…'); @@ -805,7 +820,8 @@ function onKeydown(e) { }); // ── ROW ACTIONS ────────────────────────────────────────────────────────── -let editingRows = new Set(); // track which rows are in edit mode +let editingRows = new Set(); // track which rows are in edit mode +let pendingRefresh = false; // poll trajo datos mientras alguien editaba function toggleEditRow(id, btn) { const tr = document.querySelector(`tr[data-id="${id}"]`); @@ -830,6 +846,8 @@ function toggleEditRow(id, btn) { btn.title = 'Editar fila'; btn.style.background = ''; btn.style.borderColor = ''; + // Aplicar cambios remotos pendientes si los hubo + maybeFlushRefresh(); } else { // Enter edit mode editingRows.add(id); @@ -866,6 +884,8 @@ function saveExistingRow(id) { tr.classList.remove('editing-row'); const saveBtn = tr.querySelector('.ra-save'); if (saveBtn) saveBtn.classList.remove('pending'); + // saveRow llama a render() al terminar, lo que aplica también cambios remotos + pendingRefresh = false; saveRow(Object.assign({}, base, fields, { id })); }