feat: improve multiple toasts on the same page from different sources

This commit is contained in:
Herculino Trotta
2024-11-30 00:32:23 -03:00
parent 1f4a66560a
commit 73678aacab
3 changed files with 28 additions and 24 deletions
@@ -1,7 +1,6 @@
{% load i18n %} {% load i18n %}
{% load toast_bg %} {% load toast_bg %}
{% if messages %} {% if messages %}
<div class="toast-container position-fixed bottom-0 end-0 p-3">
{% for message in messages %} {% for message in messages %}
<div class="toast align-items-center text-bg-{{ message.tags | toast_bg }} border-0" <div class="toast align-items-center text-bg-{{ message.tags | toast_bg }} border-0"
role="alert" role="alert"
@@ -18,5 +17,4 @@
<div class="toast-body">{{ message }}</div> <div class="toast-body">{{ message }}</div>
</div> </div>
{% endfor %} {% endfor %}
</div>
{% endif %} {% endif %}
+5 -2
View File
@@ -1,3 +1,6 @@
<div id="toasts" hx-get="{% url 'toasts' %}" <div id="toasts">
hx-trigger="load, toast from:window, toasts from:window"> <div class="toast-container position-fixed bottom-0 end-0 p-3" hx-trigger="load, updated from:window" hx-get="{% url 'toasts' %}" hx-swap="beforeend">
</div>
</div> </div>
+3
View File
@@ -7,12 +7,15 @@ function initiateToasts() {
const toastList = [...toastElList].map(toastEl => new bootstrap.Toast(toastEl)); // eslint-disable-line no-undef const toastList = [...toastElList].map(toastEl => new bootstrap.Toast(toastEl)); // eslint-disable-line no-undef
for (let i = 0; i < toastList.length; i++) { for (let i = 0; i < toastList.length; i++) {
if (toastList[i].isShown() === false) {
toastList[i].show(); toastList[i].show();
toastList[i]._element.addEventListener('hidden.bs.toast', (event) => { toastList[i]._element.addEventListener('hidden.bs.toast', (event) => {
event.target.remove(); event.target.remove();
}); });
} }
}
} }
document.addEventListener('DOMContentLoaded', initiateToasts, false);
document.addEventListener('htmx:afterSwap', initiateToasts, false); document.addEventListener('htmx:afterSwap', initiateToasts, false);
initiateToasts(); initiateToasts();