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 }));
}