/** * This file handles the interactions of actions in notifications (if any) * @param {HTMLElement} node target node * @returns {void} */ export default function(node = document) { const actions = node.querySelectorAll("[data-notification-action]") if (!actions.length) { return; } const extractMessage = (detail) => { return detail && detail.message || detail[0] && detail[0].message }; const resolvePanel = (panel, message, klass) => { panel.classList.remove("spinner-container"); if (message) { panel.innerHTML = `
${message}
`; } else { panel.innerHTML = ""; } }; actions.forEach((action) => { const panel = action.closest(".notification__snippet-actions") action.addEventListener("ajax:beforeSend", () => { panel.classList.add("spinner-container"); panel.querySelectorAll("[data-notification-action]").forEach((el) => { el.disabled = true; }); }); action.addEventListener("ajax:success", (event) => { resolvePanel(panel, extractMessage(event.detail), "success"); }); action.addEventListener("ajax:error", (event) => { resolvePanel(panel, extractMessage(event.detail) || window.Decidim.config.get("notifications").action_error, "alert"); }); }); }