Project Learning Dashboard

Try adding a new lesson or refining your search.

`; return; } // Sort by date, newest first filteredLessons.sort((a, b) => new Date(b.date) - new Date(a.date)); filteredLessons.forEach(lesson => { const card = elements.cardTemplate.content.cloneNode(true); card.querySelector('.pld-lesson-card').dataset.id = lesson.id; card.querySelector('.pld-card-title').textContent = lesson.projectName; card.querySelector('.pld-card-date').textContent = new Date(lesson.date).toLocaleDateString(); card.querySelector('.pld-card-description').textContent = lesson.description; card.querySelector('.pld-card-positives').textContent = lesson.positives; card.querySelector('.pld-card-negatives').textContent = lesson.negatives; card.querySelector('.pld-card-recommendations').textContent = lesson.recommendations; elements.lessonsGrid.appendChild(card); }); } // --- EVENT HANDLERS --- // elements.addLessonForm.addEventListener('submit', function(e) { e.preventDefault(); const newLesson = { id: Date.now(), projectName: document.getElementById('pld-project-name').value, date: document.getElementById('pld-lesson-date').value, description: document.getElementById('pld-description').value, positives: document.getElementById('pld-positives').value, negatives: document.getElementById('pld-negatives').value, recommendations: document.getElementById('pld-recommendations').value }; lessons.push(newLesson); pld_saveLessons(); pld_renderLessons(); alert('Lesson saved successfully!'); elements.addLessonForm.reset(); // Switch to dashboard view elements.tabs[0].click(); }); elements.searchInput.addEventListener('input', pld_renderLessons); elements.lessonsGrid.addEventListener('click', function(e) { if (e.target.closest('.pld-delete-btn')) { const card = e.target.closest('.pld-lesson-card'); const lessonId = parseInt(card.dataset.id); if (confirm('Are you sure you want to delete this lesson?')) { lessons = lessons.filter(l => l.id !== lessonId); pld_saveLessons(); pld_renderLessons(); } } }); elements.downloadPdfBtn.addEventListener('click', function() { const { jsPDF } = window.jspdf; const exportArea = document.getElementById('pld-pdf-export-area'); if (!exportArea || elements.lessonsGrid.children.length === 0) { alert('No lessons to export.'); return; } html2canvas(exportArea, { scale: 2, windowWidth: 1200 }).then(canvas => { const imgData = canvas.toDataURL('image/png'); const pdf = new jsPDF({ orientation: 'p', unit: 'mm', format: 'a4' }); const pdfWidth = pdf.internal.pageSize.getWidth(); const pdfHeight = pdf.internal.pageSize.getHeight(); const imgWidth = pdfWidth - 20; const imgHeight = (canvas.height * imgWidth) / canvas.width; let heightLeft = imgHeight; let position = 15; pdf.setFont('helvetica', 'bold'); pdf.setFontSize(18); pdf.setTextColor(getComputedStyle(document.documentElement).getPropertyValue('--pld-primary-color').trim()); pdf.text("Project Lessons Learned", pdfWidth / 2, position, { align: 'center' }); position = 25; // Initial Y position for the image pdf.addImage(imgData, 'PNG', 10, position, imgWidth, imgHeight); heightLeft -= (pdfHeight - position - 10); while (heightLeft > 0) { position = heightLeft - imgHeight; pdf.addPage(); pdf.addImage(imgData, 'PNG', 10, position, imgWidth, imgHeight); heightLeft -= pdfHeight; } pdf.save('Project-Learnings-Dashboard.pdf'); }); }); // --- TAB NAVIGATION --- // let currentTabIndex = 0; const updateNavButtons = () => { elements.prevBtn.disabled = currentTabIndex === 0; elements.nextBtn.disabled = currentTabIndex === elements.tabs.length - 1; }; window.pld_changeTab = (event, tabName) => { elements.tabContents.forEach(content => content.classList.remove('active')); elements.tabs.forEach(button => button.classList.remove('active')); document.getElementById(tabName).classList.add('active'); event.currentTarget.classList.add('active'); currentTabIndex = Array.from(elements.tabs).findIndex(btn => btn === event.currentTarget); updateNavButtons(); }; window.pld_navigateTabs = (direction) => { const newIndex = currentTabIndex + direction; if (newIndex >= 0 && newIndex < elements.tabs.length) { elements.tabs[newIndex].click(); } }; // --- INITIALIZATION --- // pld_loadLessons(); pld_renderLessons(); document.getElementById('pld-lesson-date').valueAsDate = new Date(); updateNavButtons(); }); })();
Scroll to Top