This commit is contained in:
Ross
2025-12-14 21:37:08 +00:00
parent 046f3a5a4a
commit ff2b2ebb95
2 changed files with 26 additions and 1 deletions
+22
View File
@@ -141,6 +141,28 @@
if(window._calendars){ Object.values(window._calendars).forEach(c => c.refreshLeaves && c.refreshLeaves()); }
}catch(e){ console.error('leaveUpdated handler', e); }
});
// As a robustness measure, also listen to HTMX afterRequest and inspect
// the HX-Trigger header. Some flows use hx-swap="none" which may not
// produce an htmx:afterSwap event for #modal; reading the header here
// ensures we still honor closeModal/leaveUpdated triggers.
document.body.addEventListener('htmx:afterRequest', function(evt){
try{
const xhr = evt.detail && evt.detail.xhr;
if(!xhr) return;
const trig = xhr.getResponseHeader && xhr.getResponseHeader('HX-Trigger');
if(!trig) return;
// HX-Trigger may be a JSON string or comma-separated names; handle both
let triggers = [];
try{ triggers = JSON.parse(trig); }catch(e){ triggers = String(trig).split(/\s*,\s*/); }
if(triggers.includes('closeModal')){
try{ if(window.closeProcRotaModal) window.closeProcRotaModal(); }catch(e){}
}
if(triggers.includes('leaveUpdated')){
try{ if(window._calendars){ Object.values(window._calendars).forEach(c => c.refreshLeaves && c.refreshLeaves()); } }catch(e){}
}
}catch(e){ console.error('htmx:afterRequest robustness handler', e); }
});
</script>
{% block scripts %}{% endblock %}
</body>
@@ -7,7 +7,10 @@
<button class="delete" aria-label="close" onclick="(window.closeProcRotaModal || (()=>{document.getElementById('modal').innerHTML=''}))()"></button>
</header>
<section class="modal-card-body">
<form method="post" hx-post="{{ form_action }}" hx-target="#modal" hx-swap="innerHTML">
<!-- Use hx-swap="none" and rely on server HX-Trigger to close the modal
and OOB swaps to update the leave list. This avoids HTMX attempting a
main-swap into #modal when the server only returns OOB fragments. -->
<form method="post" hx-post="{{ form_action }}" hx-swap="none">
{% csrf_token %}
{% if worker %}
<input type="hidden" name="worker_id" value="{{ worker.id }}" />