Merge pull request #13 from EuskadiTech/copilot/disable-button-during-save
Prevent duplicate transactions by disabling save buttons during async operations
This commit is contained in:
@@ -199,6 +199,13 @@ PAGES.aulas = {
|
||||
}
|
||||
})();
|
||||
document.getElementById(btn_guardar).onclick = () => {
|
||||
// Disable button to prevent double-clicking
|
||||
var guardarBtn = document.getElementById(btn_guardar);
|
||||
if (guardarBtn.disabled) return;
|
||||
|
||||
guardarBtn.disabled = true;
|
||||
guardarBtn.style.opacity = "0.5";
|
||||
|
||||
var data = {
|
||||
Solicitante: document.getElementById(field_autor).value,
|
||||
Contenido: document.getElementById(field_contenido).value,
|
||||
@@ -211,7 +218,13 @@ PAGES.aulas = {
|
||||
document.getElementById("actionStatus").style.display = "none";
|
||||
setUrlHash("aulas,solicitudes");
|
||||
}, SAVE_WAIT);
|
||||
}).catch((e) => { console.warn('DB.put error', e); });
|
||||
}).catch((e) => {
|
||||
console.warn('DB.put error', e);
|
||||
guardarBtn.disabled = false;
|
||||
guardarBtn.style.opacity = "1";
|
||||
document.getElementById("actionStatus").style.display = "none";
|
||||
toastr.error("Error al guardar la solicitud");
|
||||
});
|
||||
};
|
||||
document.getElementById(btn_borrar).onclick = () => {
|
||||
if (confirm("¿Quieres borrar esta solicitud?") == true) {
|
||||
@@ -330,6 +343,13 @@ PAGES.aulas = {
|
||||
}
|
||||
})();
|
||||
document.getElementById(btn_guardar).onclick = () => {
|
||||
// Disable button to prevent double-clicking
|
||||
var guardarBtn = document.getElementById(btn_guardar);
|
||||
if (guardarBtn.disabled) return;
|
||||
|
||||
guardarBtn.disabled = true;
|
||||
guardarBtn.style.opacity = "0.5";
|
||||
|
||||
var data = {
|
||||
Autor: document.getElementById(field_autor).value,
|
||||
Contenido: document.getElementById(field_contenido).value,
|
||||
@@ -343,7 +363,13 @@ PAGES.aulas = {
|
||||
document.getElementById("actionStatus").style.display = "none";
|
||||
setUrlHash("aulas,informes");
|
||||
}, SAVE_WAIT);
|
||||
}).catch((e) => { console.warn('DB.put error', e); });
|
||||
}).catch((e) => {
|
||||
console.warn('DB.put error', e);
|
||||
guardarBtn.disabled = false;
|
||||
guardarBtn.style.opacity = "1";
|
||||
document.getElementById("actionStatus").style.display = "none";
|
||||
toastr.error("Error al guardar el informe");
|
||||
});
|
||||
};
|
||||
document.getElementById(btn_borrar).onclick = () => {
|
||||
if (confirm("¿Quieres borrar este informe?") == true) {
|
||||
|
||||
@@ -122,6 +122,11 @@ PAGES.avisos = {
|
||||
}
|
||||
})();
|
||||
document.getElementById(btn_guardar).onclick = () => {
|
||||
// Check if button is already disabled to prevent double-clicking
|
||||
var guardarBtn = document.getElementById(btn_guardar);
|
||||
if (guardarBtn.disabled) return;
|
||||
|
||||
// Validate before disabling button
|
||||
if (document.getElementById(field_origen).value == "") {
|
||||
alert("¡Hay que elegir una persona de origen!");
|
||||
return;
|
||||
@@ -130,6 +135,11 @@ PAGES.avisos = {
|
||||
alert("¡Hay que elegir una persona de origen!");
|
||||
return;
|
||||
}
|
||||
|
||||
// Disable button after validation passes
|
||||
guardarBtn.disabled = true;
|
||||
guardarBtn.style.opacity = "0.5";
|
||||
|
||||
var data = {
|
||||
Fecha: document.getElementById(field_fecha).value,
|
||||
Origen: document.getElementById(field_origen).value,
|
||||
@@ -148,7 +158,13 @@ PAGES.avisos = {
|
||||
document.getElementById("actionStatus").style.display = "none";
|
||||
setUrlHash("avisos");
|
||||
}, SAVE_WAIT);
|
||||
}).catch((e) => { console.warn('DB.put error', e); });
|
||||
}).catch((e) => {
|
||||
console.warn('DB.put error', e);
|
||||
guardarBtn.disabled = false;
|
||||
guardarBtn.style.opacity = "1";
|
||||
document.getElementById("actionStatus").style.display = "none";
|
||||
toastr.error("Error al guardar la notificación");
|
||||
});
|
||||
};
|
||||
document.getElementById(btn_borrar).onclick = () => {
|
||||
if (confirm("¿Quieres borrar esta notificación?") == true) {
|
||||
|
||||
@@ -44,6 +44,13 @@ PAGES.comedor = {
|
||||
}
|
||||
});
|
||||
document.getElementById(btn_guardar).onclick = () => {
|
||||
// Disable button to prevent double-clicking
|
||||
var guardarBtn = document.getElementById(btn_guardar);
|
||||
if (guardarBtn.disabled) return;
|
||||
|
||||
guardarBtn.disabled = true;
|
||||
guardarBtn.style.opacity = "0.5";
|
||||
|
||||
const newDate = document.getElementById(field_fecha).value;
|
||||
var data = {
|
||||
Fecha: newDate,
|
||||
@@ -62,7 +69,13 @@ PAGES.comedor = {
|
||||
document.getElementById("actionStatus").style.display = "none";
|
||||
setUrlHash("comedor");
|
||||
}, SAVE_WAIT);
|
||||
}).catch((e) => { console.warn('DB.put error', e); });
|
||||
}).catch((e) => {
|
||||
console.warn('DB.put error', e);
|
||||
guardarBtn.disabled = false;
|
||||
guardarBtn.style.opacity = "1";
|
||||
document.getElementById("actionStatus").style.display = "none";
|
||||
toastr.error("Error al guardar el menú");
|
||||
});
|
||||
};
|
||||
document.getElementById(btn_borrar).onclick = () => {
|
||||
if (confirm("¿Quieres borrar esta entrada?") == true) {
|
||||
|
||||
@@ -82,6 +82,13 @@ PAGES.materiales = {
|
||||
}
|
||||
});
|
||||
document.getElementById(btn_guardar).onclick = () => {
|
||||
// Disable button to prevent double-clicking
|
||||
var guardarBtn = document.getElementById(btn_guardar);
|
||||
if (guardarBtn.disabled) return;
|
||||
|
||||
guardarBtn.disabled = true;
|
||||
guardarBtn.style.opacity = "0.5";
|
||||
|
||||
var data = {
|
||||
Nombre: document.getElementById(field_nombre).value,
|
||||
Unidad: document.getElementById(field_unidad).value,
|
||||
@@ -98,7 +105,13 @@ PAGES.materiales = {
|
||||
document.getElementById("actionStatus").style.display = "none";
|
||||
setUrlHash("materiales");
|
||||
}, SAVE_WAIT);
|
||||
}).catch((e) => { console.warn('DB.put error', e); });
|
||||
}).catch((e) => {
|
||||
console.warn('DB.put error', e);
|
||||
guardarBtn.disabled = false;
|
||||
guardarBtn.style.opacity = "1";
|
||||
document.getElementById("actionStatus").style.display = "none";
|
||||
toastr.error("Error al guardar el material");
|
||||
});
|
||||
};
|
||||
document.getElementById(btn_borrar).onclick = () => {
|
||||
if (confirm("¿Quieres borrar este material?") == true) {
|
||||
|
||||
@@ -136,6 +136,13 @@ PAGES.notas = {
|
||||
e.target.value = '';
|
||||
});
|
||||
document.getElementById(btn_guardar).onclick = () => {
|
||||
// Disable button to prevent double-clicking
|
||||
var guardarBtn = document.getElementById(btn_guardar);
|
||||
if (guardarBtn.disabled) return;
|
||||
|
||||
guardarBtn.disabled = true;
|
||||
guardarBtn.style.opacity = "0.5";
|
||||
|
||||
var data = {
|
||||
Autor: document.getElementById(field_autor).value,
|
||||
Contenido: document.getElementById(field_contenido).value,
|
||||
@@ -180,8 +187,20 @@ PAGES.notas = {
|
||||
document.getElementById("actionStatus").style.display = "none";
|
||||
setUrlHash("notas");
|
||||
}, SAVE_WAIT);
|
||||
}).catch((e) => { console.warn('Attachment upload error', e); document.getElementById("actionStatus").style.display = "none"; });
|
||||
}).catch((e) => { console.warn('DB.put error', e); document.getElementById("actionStatus").style.display = "none"; });
|
||||
}).catch((e) => {
|
||||
console.warn('Attachment upload error', e);
|
||||
document.getElementById("actionStatus").style.display = "none";
|
||||
guardarBtn.disabled = false;
|
||||
guardarBtn.style.opacity = "1";
|
||||
toastr.error("Error al guardar los adjuntos");
|
||||
});
|
||||
}).catch((e) => {
|
||||
console.warn('DB.put error', e);
|
||||
document.getElementById("actionStatus").style.display = "none";
|
||||
guardarBtn.disabled = false;
|
||||
guardarBtn.style.opacity = "1";
|
||||
toastr.error("Error al guardar la nota");
|
||||
});
|
||||
};
|
||||
document.getElementById(btn_borrar).onclick = () => {
|
||||
if (confirm("¿Quieres borrar esta nota?") == true) {
|
||||
|
||||
@@ -320,6 +320,11 @@ PAGES.pagos = {
|
||||
|
||||
// Confirm final transaction button
|
||||
document.getElementById(btn_confirm + "2").onclick = () => {
|
||||
// Disable button to prevent double-clicking
|
||||
var confirmBtn = document.getElementById(btn_confirm + "2");
|
||||
if (confirmBtn.disabled) return;
|
||||
confirmBtn.disabled = true;
|
||||
confirmBtn.style.opacity = "0.5";
|
||||
processTransaction();
|
||||
};
|
||||
|
||||
@@ -502,6 +507,16 @@ PAGES.pagos = {
|
||||
document.getElementById("actionStatus").style.display = "none";
|
||||
setUrlHash("pagos," + ticketId);
|
||||
}, SAVE_WAIT);
|
||||
}).catch((e) => {
|
||||
console.warn('DB.put error', e);
|
||||
// Re-enable confirm button on error
|
||||
var confirmBtn = document.getElementById(btn_confirm + "2");
|
||||
if (confirmBtn) {
|
||||
confirmBtn.disabled = false;
|
||||
confirmBtn.style.opacity = "1";
|
||||
}
|
||||
document.getElementById("actionStatus").style.display = "none";
|
||||
toastr.error("Error al guardar la transacción");
|
||||
});
|
||||
}
|
||||
|
||||
@@ -1311,6 +1326,10 @@ PAGES.pagos = {
|
||||
|
||||
// Save button
|
||||
document.getElementById(btn_save).onclick = () => {
|
||||
// Disable button to prevent double-clicking
|
||||
var saveBtn = document.getElementById(btn_save);
|
||||
if (saveBtn.disabled) return;
|
||||
|
||||
var tipo = document.getElementById(field_tipo).value;
|
||||
var monto = parseFloat(document.getElementById(field_monto).value);
|
||||
var personaId = document.getElementById(field_persona).value;
|
||||
@@ -1350,6 +1369,9 @@ PAGES.pagos = {
|
||||
return;
|
||||
}
|
||||
|
||||
saveBtn.disabled = true;
|
||||
saveBtn.style.opacity = "0.5";
|
||||
|
||||
// Update transaction data
|
||||
var updatedData = {
|
||||
...originalData,
|
||||
@@ -1376,7 +1398,14 @@ PAGES.pagos = {
|
||||
document.getElementById("actionStatus").style.display = "none";
|
||||
setUrlHash("pagos," + transactionId);
|
||||
}, SAVE_WAIT);
|
||||
}).catch((e) => { console.warn('DB.put error', e); });
|
||||
}).catch((e) => {
|
||||
console.warn('DB.put error', e);
|
||||
// Re-enable save button on error
|
||||
saveBtn.disabled = false;
|
||||
saveBtn.style.opacity = "1";
|
||||
document.getElementById("actionStatus").style.display = "none";
|
||||
toastr.error("Error al actualizar la transacción");
|
||||
});
|
||||
};
|
||||
|
||||
// Cancel button
|
||||
|
||||
@@ -147,6 +147,13 @@ PAGES.personas = {
|
||||
reader.readAsDataURL(file);
|
||||
});
|
||||
document.getElementById(btn_guardar).onclick = () => {
|
||||
// Disable button to prevent double-clicking
|
||||
var guardarBtn = document.getElementById(btn_guardar);
|
||||
if (guardarBtn.disabled) return;
|
||||
|
||||
guardarBtn.disabled = true;
|
||||
guardarBtn.style.opacity = "0.5";
|
||||
|
||||
var dt = new FormData(pdel);
|
||||
var data = {
|
||||
Nombre: document.getElementById(field_nombre).value,
|
||||
@@ -173,8 +180,20 @@ PAGES.personas = {
|
||||
document.getElementById("actionStatus").style.display = "none";
|
||||
setUrlHash("personas");
|
||||
}, SAVE_WAIT);
|
||||
}).catch((e) => { console.warn('putAttachment error', e); document.getElementById("actionStatus").style.display = "none"; });
|
||||
}).catch((e) => { console.warn('DB.put error', e); document.getElementById("actionStatus").style.display = "none"; });
|
||||
}).catch((e) => {
|
||||
console.warn('putAttachment error', e);
|
||||
document.getElementById("actionStatus").style.display = "none";
|
||||
guardarBtn.disabled = false;
|
||||
guardarBtn.style.opacity = "1";
|
||||
toastr.error("Error al guardar la foto");
|
||||
});
|
||||
}).catch((e) => {
|
||||
console.warn('DB.put error', e);
|
||||
document.getElementById("actionStatus").style.display = "none";
|
||||
guardarBtn.disabled = false;
|
||||
guardarBtn.style.opacity = "1";
|
||||
toastr.error("Error al guardar la persona");
|
||||
});
|
||||
};
|
||||
document.getElementById(btn_ver_monedero).onclick = () => {
|
||||
setUrlHash("pagos"); // Navigate to pagos and show transactions for this person
|
||||
|
||||
@@ -99,10 +99,20 @@ PAGES.supercafe = {
|
||||
}
|
||||
});
|
||||
document.getElementById(btn_guardar).onclick = () => {
|
||||
// Check if button is already disabled to prevent double-clicking
|
||||
var guardarBtn = document.getElementById(btn_guardar);
|
||||
if (guardarBtn.disabled) return;
|
||||
|
||||
// Validate before disabling button
|
||||
if (document.getElementById(field_persona).value == "") {
|
||||
alert("¡Hay que elegir una persona!");
|
||||
return;
|
||||
}
|
||||
|
||||
// Disable button after validation passes
|
||||
guardarBtn.disabled = true;
|
||||
guardarBtn.style.opacity = "0.5";
|
||||
|
||||
var data = {
|
||||
Fecha: document.getElementById(field_fecha).value,
|
||||
Persona: document.getElementById(field_persona).value,
|
||||
@@ -119,7 +129,13 @@ PAGES.supercafe = {
|
||||
document.getElementById("actionStatus").style.display = "none";
|
||||
setUrlHash("supercafe");
|
||||
}, SAVE_WAIT);
|
||||
}).catch((e) => { console.warn('DB.put error', e); });
|
||||
}).catch((e) => {
|
||||
console.warn('DB.put error', e);
|
||||
guardarBtn.disabled = false;
|
||||
guardarBtn.style.opacity = "1";
|
||||
document.getElementById("actionStatus").style.display = "none";
|
||||
toastr.error("Error al guardar la comanda");
|
||||
});
|
||||
};
|
||||
document.getElementById(btn_borrar).onclick = () => {
|
||||
if (
|
||||
|
||||
Reference in New Issue
Block a user