diff --git a/public/index.html b/public/index.html
index 5fa68da..8205d8d 100644
--- a/public/index.html
+++ b/public/index.html
@@ -52,7 +52,10 @@
const mainViews = { auth: document.getElementById('auth-view'), employee: document.getElementById('employee-dashboard'), admin: document.getElementById('admin-dashboard'), archive: document.getElementById('admin-archive-view'), timeOffHistory: document.getElementById('admin-time-off-history-view') };
const navUserControls = document.getElementById('nav-user-controls'), welcomeMessage = document.getElementById('welcome-message'), signOutBtn = document.getElementById('sign-out-btn');
const messageBox = document.getElementById('message-box'), loadingSpinner = document.getElementById('loading-spinner'), modalContainer = document.getElementById('modal-container');
+
+ // **FIXED**: Declared variables safely without parsing immediately.
let authToken, user, allTimeEntries = [], allUsers = [], employeeTimerInterval = null;
+
// --- Helper Functions ---
const showLoading = (show) => loadingSpinner.innerHTML = show ? `
` : '';
const showMessage = (message, type = 'success') => { messageBox.innerHTML = `${message}
`; messageBox.classList.remove('hidden'); };
@@ -72,25 +75,33 @@
const response = await fetch(`${API_BASE_URL}${endpoint}`, { method, headers, body: body ? JSON.stringify(body) : null });
if (response.status === 401) { handleSignOut('Your session has expired. Please log in again.'); return { success: false }; }
const text = await response.text();
- if (!response.ok) throw new Error(JSON.parse(text).message || `HTTP error ${response.status}`);
+ if (!response.ok) {
+ const errorData = text ? JSON.parse(text) : {};
+ throw new Error(errorData.message || `HTTP error ${response.status}`);
+ }
return { success: true, data: text ? JSON.parse(text) : null };
- } catch (error) { showMessage(error.message, 'error'); return { success: false };
- } finally { showLoading(false); }
+ } catch (error) {
+ showMessage(error.message, 'error');
+ return { success: false };
+ } finally {
+ showLoading(false);
+ }
}
// --- View Management ---
const showView = (viewName) => { clearInterval(employeeTimerInterval); Object.keys(mainViews).forEach(v => mainViews[v].classList.toggle('hidden', v !== viewName)); }
// --- UI Rendering ---
+ // **FIXED**: This function now safely handles loading from localStorage.
function updateUI() {
try {
const storedUser = localStorage.getItem('user');
- user = storedUser ? JSON.parse(storedUser) : null;
authToken = localStorage.getItem('authToken');
+ user = storedUser ? JSON.parse(storedUser) : null;
if (authToken && user) {
navUserControls.classList.remove('hidden');
- welcomeMessage.textContent = `${user.username}`;
+ welcomeMessage.textContent = `Welcome, ${user.username}`;
user.role === 'admin' ? (showView('admin'), renderAdminDashboard()) : (showView('employee'), renderEmployeeDashboard());
} else {
navUserControls.classList.add('hidden');
@@ -98,7 +109,7 @@
renderAuthView();
}
} catch (error) {
- console.error("Error in updateUI:", error);
+ console.error("Error initializing UI:", error);
handleSignOut("There was an error loading your session.");
}
}
@@ -166,10 +177,7 @@
mainViews.admin.innerHTML = `
Admin Dashboard
-
-
-
Currently Punched In
-
${punchedInEntries.map(e => `
+
-
+ `).join('') || '- None
'}
Pending Time Off Requests
| Employee | Dates | Reason | Actions |
${pendingRequests.map(r => `| ${r.username} | ${formatDate(r.start_date)} - ${formatDate(r.end_date)} | ${r.reason||''} | |
`).join('') || '| No pending requests. |
'}
Hours by Employee
| Employee | Total Hours |
${Object.keys(employeeTotals).map(u => `| ${u} | ${formatDecimal(employeeTotals[u])} |
`).join('')}
Detailed Logs
| Employee | In | Out | Duration | Actions |
${allTimeEntries.map(e => `| ${e.username||'N/A'} | ${formatDateTime(e.punch_in_time)} | ${formatDateTime(e.punch_out_time)} | ${formatDecimal(new Date(e.punch_out_time) - new Date(e.punch_in_time))} | |
`).join('')}
@@ -268,19 +274,19 @@
// --- Initializer ---
signOutBtn.addEventListener('click', () => handleSignOut());
updateUI();
- console.log("Attempting to register service worker...");
- if ('serviceWorker' in navigator) {
- window.addEventListener('load', () => {
- navigator.serviceWorker.register('/sw.js')
- .then(registration => {
- console.log('✅ ServiceWorker registration successful with scope: ', registration.scope);
- })
- .catch(err => {
- console.log('❌ ServiceWorker registration failed: ', err);
- });
- });
- }
+ // Service worker registration can be added back once the main app logic is stable.
+ // if ('serviceWorker' in navigator) {
+ // window.addEventListener('load', () => {
+ // navigator.serviceWorker.register('/sw.js')
+ // .then(registration => {
+ // console.log('✅ ServiceWorker registration successful with scope: ', registration.scope);
+ // })
+ // .catch(err => {
+ // console.log('❌ ServiceWorker registration failed: ', err);
+ // });
+ // });
+ // }