/**
* globals.js
* Contains global UI utilities and helpers used across the CuraFlow application.
*/
// Initialize Toast Container on load
document.addEventListener('DOMContentLoaded', () => {
if (!document.getElementById('global-toast-container')) {
const container = document.createElement('div');
container.id = 'global-toast-container';
container.className = 'toast-container';
document.body.appendChild(container);
}
});
/**
* Displays a premium sliding toast notification
* @param {string} message - The text to display
* @param {string} type - 'success', 'error', 'warning', 'info' (default: 'info')
*/
window.showToast = function(message, type = 'info') {
const container = document.getElementById('global-toast-container');
if (!container) return;
const toast = document.createElement('div');
toast.className = `toast toast-${type}`;
// Icon based on type
let icon = 'ℹ️';
if (type === 'success') icon = '✅';
if (type === 'error') icon = '❌';
if (type === 'warning') icon = '⚠️';
toast.innerHTML = `${icon} ${message}`;
container.appendChild(toast);
// Trigger animation slightly after append
requestAnimationFrame(() => {
requestAnimationFrame(() => {
toast.classList.add('toast-show');
});
});
// Remove after 3 seconds
setTimeout(() => {
toast.classList.remove('toast-show');
toast.addEventListener('transitionend', () => toast.remove());
}, 3000);
};
/**
* Universal dummy handler for unimplemented features
*/
window.handleComingSoon = function(featureName = 'This feature') {
window.showToast(`${featureName} is coming soon!`, 'info');
};
/**
* Global Logout Interceptor
* Captures clicks on any logout button across the app, clears session, and redirects securely.
*/
document.addEventListener('click', (e) => {
const logoutBtn = e.target.closest('.logout-btn') || e.target.closest('.logout-link') || e.target.closest('.sa-logout');
if (logoutBtn) {
e.preventDefault();
localStorage.clear();
window.location.href = '/';
}
});