diff --git a/backend/static/js/alpine-components.js b/backend/static/js/alpine-components.js index 54a4fdbf..f2776d26 100644 --- a/backend/static/js/alpine-components.js +++ b/backend/static/js/alpine-components.js @@ -3,18 +3,28 @@ * Enhanced components matching React frontend functionality */ +// Flag to prevent duplicate component registration +let componentsRegistered = false; + // Debug logging to see what's happening console.log('Alpine components script is loading...'); -console.log('Alpine available?', typeof window.Alpine !== 'undefined'); // Try multiple approaches to ensure components register function registerComponents() { - console.log('Registering components - Alpine available:', typeof Alpine !== 'undefined'); - - if (typeof Alpine === 'undefined') { - console.error('Alpine still not available when trying to register components!'); + // Prevent duplicate registration + if (componentsRegistered) { return; } + + if (typeof Alpine === 'undefined') { + console.warn('Alpine.js not available yet, registration will retry'); + return; + } + + console.log('Registering Alpine.js components...'); + + // Mark as registered at the start to prevent race conditions + componentsRegistered = true; // Theme Toggle Component Alpine.data('themeToggle', () => ({ @@ -606,7 +616,7 @@ Alpine.store('toast', { } }); - console.log('All Alpine.js components registered successfully'); + console.log('Alpine.js components registered successfully'); } // Try multiple registration approaches @@ -615,8 +625,7 @@ document.addEventListener('DOMContentLoaded', registerComponents); // Fallback - try after a delay setTimeout(() => { - if (typeof Alpine !== 'undefined') { - console.log('Fallback registration triggered'); + if (typeof Alpine !== 'undefined' && !componentsRegistered) { registerComponents(); } }, 100);