// API base URL const API_BASE = '/api/v1/client'; function toggleAccordion(accordionId) { const accordion = document.getElementById(accordionId); accordion.classList.toggle('active'); // const allAccordions = document.querySelectorAll('.accordion'); // allAccordions.forEach(acc => { // if (acc.id !== accordionId && acc.classList.contains('active')) { // acc.classList.remove('active'); // } // }); } function formatTime(milliseconds) { if (!milliseconds) return '0m'; const seconds = Math.floor(milliseconds / 1000); const hours = Math.floor(seconds / 3600); const minutes = Math.floor((seconds % 3600) / 60); if (hours > 0) { return `${hours}h ${minutes}m ${seconds % 60}s`; } return `${minutes}m ${seconds % 60}s`; } function formatDate(dateString) { const date = new Date(dateString); return date.toLocaleDateString('en-US', { year: 'numeric', month: 'short', day: 'numeric' }); } function formatTimeOnly(dateString) { const date = new Date(dateString); return date.toLocaleTimeString('en-US', { hour: '2-digit', minute: '2-digit', second: '2-digit' }); } function calculateTotalIndividualLogsHours(workTrackLogs) { let total = 0; workTrackLogs.forEach(workTrack => { if (workTrack.logs && Array.isArray(workTrack.logs)) { workTrack.logs.forEach(log => { total += log.totalTime || 0; }); } }); return total; } function countIndividualLogs(workTrackLogs) { let count = 0; workTrackLogs.forEach(workTrack => { if (workTrack.logs && Array.isArray(workTrack.logs)) { count += workTrack.logs.length; } }); return count; } function calculateTotalHours(logs) { return logs.reduce((total, log) => total + (log.totalTime || 0), 0); } // Create project accordion function createProjectAccordion(projectData, index) { const workTrackLogs = projectData.workTrackLogs || []; const totalHours = calculateTotalIndividualLogsHours(workTrackLogs); const individualLogsCount = countIndividualLogs(workTrackLogs); const projectName = projectData.projectDetails?.name || `Project ${index + 1}`; const accordionId = `project-${index}`; return `
| Title | App Name | From | To | Total Time |
|---|
No detailed activity logs available for this project.
${error.message}
`; emptyState.style.display = 'block'; } } document.addEventListener('DOMContentLoaded', function () { // Mobile menu toggle const menuToggle = document.querySelector('.mobile-menu-button'); const sidebar = document.querySelector('.dashboard-sidebar'); menuToggle.addEventListener('click', () => { sidebar.classList.toggle('active'); }); // Close modal with escape key document.addEventListener('keydown', function (e) { if (e.key === 'Escape') { closeLogoutModal(); } }); document.getElementById('logoutModal').addEventListener('click', function (e) { if (e.target === this) { closeLogoutModal(); } }); // Logout button - opens confirmation modal instead of directly logging out document.getElementById('logoutButton').addEventListener('click', openLogoutModal); // Confirm logout button document.getElementById('confirmLogoutBtn').addEventListener('click', handleLogout); // Load VA logs on page load loadVALogs(); });