diff options
Diffstat (limited to 'rushs/eplace/src/utils/notify.js')
| -rw-r--r-- | rushs/eplace/src/utils/notify.js | 57 |
1 files changed, 57 insertions, 0 deletions
diff --git a/rushs/eplace/src/utils/notify.js b/rushs/eplace/src/utils/notify.js new file mode 100644 index 0000000..b6ed7dc --- /dev/null +++ b/rushs/eplace/src/utils/notify.js @@ -0,0 +1,57 @@ +import $ from "jquery"; +import alertHtml from "../components/notifications/index.html"; + +const alertContainer = $("#alert-container")?.[0]; + +const iconMap = { + info: "fa-info-circle", + success: "fa-thumbs-up", + warning: "fa-exclamation-triangle", + error: "ffa fa-exclamation-circle", +}; + +/** + * Create an alert + * @param {string} title + * @param {string} message + * @param {string} type - success, warning, error + */ +export const createAlert = (title, message, type) => { + $.ajax({ + url: alertHtml, + success: (data) => { + const [alert] = $(data); + + // Return if the alert cannot be created, usefull when a redirect is made + if (!alertContainer || !alert || !alert.classList) { + return; + } + + // Add the type class to the alert + alert.classList.add( + `Alert${type.charAt(0).toUpperCase() + type.slice(1)}`, + ); + + // Replace values in innerHTML + alert.innerHTML = alert.innerHTML + .replace(/{{title}}/g, title) + .replace(/{{content}}/g, message) + .replace(/{{icon_classes}}/g, iconMap[type]); + + // Get the close button + const closeBtn = alert.getElementsByClassName("AlertClose")?.[0]; + + closeBtn?.addEventListener("click", () => { + alert.remove(); + }); + + // Append the alert to the container + alertContainer.append(alert); + + // Remove the alert after 5 seconds + setTimeout(() => { + alert.remove(); + }, 5000); + }, + }); +}; |
