.
This commit is contained in:
@@ -141,6 +141,28 @@
|
|||||||
if(window._calendars){ Object.values(window._calendars).forEach(c => c.refreshLeaves && c.refreshLeaves()); }
|
if(window._calendars){ Object.values(window._calendars).forEach(c => c.refreshLeaves && c.refreshLeaves()); }
|
||||||
}catch(e){ console.error('leaveUpdated handler', e); }
|
}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>
|
</script>
|
||||||
{% block scripts %}{% endblock %}
|
{% block scripts %}{% endblock %}
|
||||||
</body>
|
</body>
|
||||||
|
|||||||
@@ -7,7 +7,10 @@
|
|||||||
<button class="delete" aria-label="close" onclick="(window.closeProcRotaModal || (()=>{document.getElementById('modal').innerHTML=''}))()"></button>
|
<button class="delete" aria-label="close" onclick="(window.closeProcRotaModal || (()=>{document.getElementById('modal').innerHTML=''}))()"></button>
|
||||||
</header>
|
</header>
|
||||||
<section class="modal-card-body">
|
<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 %}
|
{% csrf_token %}
|
||||||
{% if worker %}
|
{% if worker %}
|
||||||
<input type="hidden" name="worker_id" value="{{ worker.id }}" />
|
<input type="hidden" name="worker_id" value="{{ worker.id }}" />
|
||||||
|
|||||||
Reference in New Issue
Block a user