summaryrefslogtreecommitdiff
path: root/rushs/eplace/src/utils/notify.js
diff options
context:
space:
mode:
Diffstat (limited to 'rushs/eplace/src/utils/notify.js')
-rw-r--r--rushs/eplace/src/utils/notify.js57
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);
+ },
+ });
+};