`;
};
const updateDataManagementTable = () => {
const container = document.getElementById('data-management-table-container');
const placeholder = document.getElementById('data-management-placeholder');
if (logData.length === 0) {
container.innerHTML = '';
placeholder.classList.remove('hidden');
return;
}
placeholder.classList.add('hidden');
let tableHTML = `
`;
container.innerHTML = tableHTML;
};
// --- CORE LOGIC ---
window.changeTab = (tabNumber) => {
if (tabNumber < 1 || tabNumber > totalTabs) return;
for (let i = 1; i <= totalTabs; i++) {
tabButtons[i].classList.remove('active');
tabContents[i].classList.remove('active');
}
tabButtons[tabNumber].classList.add('active');
tabContents[tabNumber].classList.add('active');
currentTab = tabNumber;
updateNavButtons();
};
window.navigateTab = (direction) => {
changeTab(currentTab + direction);
};
const updateNavButtons = () => {
prevBtn.style.visibility = (currentTab === 1) ? 'hidden' : 'visible';
nextBtn.style.visibility = (currentTab === totalTabs) ? 'hidden' : 'visible';
};
const addEntry = (e) => {
e.preventDefault();
const date = document.getElementById('log-date').value;
// Check if an entry for this date already exists
if (logData.some(entry => entry.date === date)) {
alert('An entry for this date already exists. Please delete the old entry from the Data Management tab first.');
return;
}
const newEntry = {
id: Date.now().toString(),
date: date,
sleep: parseFloat(document.getElementById('log-sleep').value) || 0,
energy: parseInt(document.getElementById('log-energy').value),
fatigue: parseInt(document.getElementById('log-fatigue').value),
stress: document.getElementById('log-stress').value,
activity: document.getElementById('log-activity').value
};
logData.push(newEntry);
logData.sort((a, b) => new Date(a.date) - new Date(b.date));
saveData();
updateUI();
alert('Entry saved successfully!');
changeTab(1); // Go to dashboard after saving
};
window.deleteEntry = (id) => {
if (confirm('Are you sure you want to delete this entry?')) {
logData = logData.filter(entry => entry.id !== id);
saveData();
updateUI();
}
};
const downloadPdf = async () => {
if (logData.length === 0) {
alert("No data to download.");
return;
}
const pdfContent = document.getElementById('pdf-content');
const chartCanvas = document.getElementById('energy-chart');
const chartImage = chartCanvas.toDataURL('image/png', 1.0);
let tableHTML = `
`;
let pdfHTML = `
${tableHTML}
`;
pdfContent.innerHTML = pdfHTML;
pdfContent.classList.remove('hidden');
pdfContent.style.position = 'absolute';
pdfContent.style.left = '-9999px';
try {
const { jsPDF } = window.jspdf;
const canvas = await html2canvas(pdfContent, { scale: 2 });
const imgData = canvas.toDataURL('image/png');
const pdf = new jsPDF({ orientation: 'portrait', unit: 'mm', format: 'a4' });
const pdfWidth = pdf.internal.pageSize.getWidth();
const pdfHeight = (canvas.height * pdfWidth) / canvas.width;
pdf.addImage(imgData, 'PNG', 0, 0, pdfWidth, pdfHeight);
pdf.save('Energy-Fatigue-Report.pdf');
} catch (error) {
console.error("Failed to generate PDF:", error);
} finally {
pdfContent.classList.add('hidden');
pdfContent.style.position = '';
pdfContent.style.left = '';
}
};
// --- INITIALIZATION ---
loadData();
updateUI();
updateNavButtons();
document.getElementById('log-date').valueAsDate = new Date();
logForm.addEventListener('submit', addEntry);
pdfDownloadBtn.addEventListener('click', downloadPdf);
});
| Date | Energy | Fatigue | Sleep | Action |
|---|---|---|---|---|
| ${new Date(entry.date).toLocaleDateString('en-US')} | ${entry.energy} | ${entry.fatigue} | ${entry.sleep}h |
Log History
| Date | Energy | Fatigue | Sleep | Stress | Activity |
|---|---|---|---|---|---|
| ${new Date(entry.date).toLocaleDateString('en-US')} | ${entry.energy} | ${entry.fatigue} | ${entry.sleep}h | ${entry.stress} | ${entry.activity || 'N/A'} |
Energy & Fatigue Report
This report is for informational purposes only. Consult a healthcare professional for medical advice.
