Astreinte : supprimer une intervention l'enregistre immédiatement

Le bouton × retirait la ligne de l'écran sans déclencher la sauvegarde :
au rechargement, l'intervention supprimée réapparaissait. La suppression
enregistre maintenant le jour dès le clic (asDelEvent → asSaveDay).

💘 Generated with Crush

Assisted-by: Crush:glm-5.2
This commit is contained in:
Jacquin Antoine
2026-09-10 17:05:00 +02:00
parent e95d1e2092
commit f50d1ef7fc
2 changed files with 65 additions and 4 deletions

View File

@ -375,10 +375,14 @@ document.addEventListener('input', function(e) {
var timer = null;
var pendingDate = null;
function triggerSave(date) {
// Déclenche la sauvegarde du jour depuis le témoin .autosave (attributs hx-*),
// exposé globalement : utilisé par le debounce ci-dessous et par la
// suppression d'une ligne d'intervention, qui doit être enregistrée
// immédiatement — sinon elle réapparaît au rechargement.
window.asSaveDay = function (date) {
var trig = document.getElementById('save-' + date);
if (trig) htmx.trigger(trig, 'save-day');
}
};
// Le swap OOB remplace les champs du jour : si le focus était dedans
// (ex. tabulation entrée → sortie), on le restaure sur le champ équivalent.
@ -395,7 +399,7 @@ document.addEventListener('input', function(e) {
}
pendingDate = date;
clearTimeout(timer);
timer = setTimeout(function () { triggerSave(pendingDate); }, 350);
timer = setTimeout(function () { asSaveDay(pendingDate); }, 350);
});
document.body.addEventListener('htmx:afterSwap', function () {
@ -502,6 +506,18 @@ document.addEventListener('htmx:afterSwap', asRestore);
// settle, dernier moment du cycle.
document.addEventListener('htmx:afterSettle', asRestore);
// Supprime une ligne d'intervention et enregistre le jour immédiatement :
// sans sauvegarde, la ligne ne disparaîtrait que visuellement et reviendrait
// au rechargement (l'autosave ne se déclenche que sur change d'un champ).
window.asDelEvent = function (btn) {
var ev = btn.closest('.as-event');
if (!ev) return;
var input = ev.querySelector('[data-date]');
var date = input ? input.dataset.date : null;
ev.remove();
if (date) asSaveDay(date);
};
// Ajoute une ligne d'intervention vierge dans le jour ciblé
window.asAddEvent = function (date) {
var grid = document.getElementById('as-events-' + date);
@ -513,7 +529,7 @@ window.asAddEvent = function (date) {
'<input class="time-input" type="time" name="astreinte_fin" data-date="' + date + '" value="">' +
'<div class="as-desc-cell">' +
'<input type="text" class="as-desc" name="astreinte_desc" data-date="' + date + '" maxlength="200" placeholder="description" value="">' +
'<button type="button" class="as-del" title="Supprimer" onclick="this.closest(\'.as-event\').remove()">×</button>' +
'<button type="button" class="as-del" title="Supprimer" onclick="asDelEvent(this)">×</button>' +
'</div>';
grid.appendChild(ev);
};