Spaces:
Running
Running
| // main.js - Application Entry Point | |
| import { loadInitialAppState, appState } from './state.js'; | |
| import { refreshUI } from './ui.js'; | |
| import { attachOneTimeListeners } from './events.js'; | |
| import { supabase } from './supabaseClient.js'; | |
| // UI Elements | |
| const loginScreen = document.getElementById('login-screen'); | |
| const mainContent = document.getElementById('main-content'); | |
| const loader = document.getElementById('loader'); | |
| const userInfo = document.getElementById('user-info'); | |
| const userEmailSpan = document.getElementById('user-email'); | |
| const logoutBtn = document.getElementById('logout-btn'); | |
| const reportsBtn = document.getElementById('show-reports-modal-btn'); | |
| const footer = document.getElementById('footer'); | |
| // --- MODIFICATION: Robust Auth State Change Handler --- | |
| supabase.auth.onAuthStateChange(async (event, session) => { | |
| // This handles both manual sign-in and automatic session restoration | |
| if (event === 'SIGNED_IN' || (event === 'INITIAL_SESSION' && session)) { | |
| appState.user = session.user; | |
| // 1. Show loader, hide login screen | |
| loginScreen.classList.add('hidden'); | |
| loader.classList.remove('hidden'); | |
| loader.classList.add('flex'); // Use flex to center content | |
| // 2. Load all data from the database | |
| const loadedSuccessfully = await loadInitialAppState(); | |
| // 3. Once data is loaded, update the UI | |
| if (loadedSuccessfully) { | |
| refreshUI(); | |
| // 4. Show the main content and hide the loader | |
| mainContent.classList.remove('hidden'); | |
| mainContent.classList.remove('opacity-0'); | |
| footer.classList.remove('hidden'); | |
| userInfo.classList.remove('hidden'); | |
| logoutBtn.classList.remove('hidden'); | |
| reportsBtn.classList.remove('hidden'); | |
| userEmailSpan.textContent = session.user.email; | |
| } else { | |
| // Handle case where data loading fails | |
| // Maybe show an error and a retry button, or force logout | |
| alert('Failed to load factory data. Please try again.'); | |
| await supabase.auth.signOut(); | |
| } | |
| loader.classList.add('hidden'); | |
| loader.classList.remove('flex'); | |
| } else if (event === 'SIGNED_OUT') { | |
| appState.user = null; | |
| appState.materials = []; | |
| appState.productionLog = []; | |
| // Ensure a clean UI state on logout | |
| mainContent.classList.add('hidden'); | |
| mainContent.classList.add('opacity-0'); | |
| footer.classList.add('hidden'); | |
| userInfo.classList.add('hidden'); | |
| logoutBtn.classList.add('hidden'); | |
| reportsBtn.classList.add('hidden'); | |
| loader.classList.add('hidden'); | |
| loader.classList.remove('flex'); | |
| loginScreen.classList.remove('hidden'); | |
| } | |
| }); | |
| // Initializes the application when the page content is loaded. | |
| function init() { | |
| attachOneTimeListeners(); | |
| // The opacity transition is now handled by the auth listener | |
| } | |
| document.addEventListener('DOMContentLoaded', init); |