Candidate Experience Dashboard

Overall Satisfaction

0/ 5

Candidate NPS

0

Avg. Time to Offer

0days

Satisfaction by Stage

NPS Breakdown

    Offer Acceptance Rate

    0%

    Avg. Time in Screening

    0days

    Avg. Application to Rejection

    0days

    `; feedbackListContainer.appendChild(card); }); } function renderTimeline() { // These are hardcoded for demonstration document.getElementById('avg-time-to-offer').textContent = '18'; document.getElementById('offer-acceptance-rate').textContent = '85'; document.getElementById('avg-time-screening').textContent = '4'; document.getElementById('avg-time-rejection').textContent = '22'; } // --- Modal Logic --- function openModal(mode = 'add', feedbackId = null) { feedbackForm.reset(); const stageSelect = document.getElementById('feedback-stage'); stageSelect.innerHTML = stages.map(s => ``).join(''); if (mode === 'edit') { document.getElementById('modal-title').textContent = 'Edit Feedback'; const item = feedbackData.find(f => f.id === feedbackId); document.getElementById('feedback-id').value = item.id; document.getElementById('feedback-rating').value = item.rating; document.getElementById('feedback-nps-score').value = item.nps; stageSelect.value = item.stage; document.getElementById('feedback-comment').value = item.comment; } else { document.getElementById('modal-title').textContent = 'Add Feedback'; document.getElementById('feedback-id').value = ''; } modal.style.display = 'block'; } function closeModal() { modal.style.display = 'none'; } // --- Event Listeners --- addFeedbackBtn.addEventListener('click', () => openModal('add')); closeModalBtn.addEventListener('click', closeModal); window.addEventListener('click', e => { if (e.target == modal) closeModal(); }); searchInput.addEventListener('keyup', e => renderAll(e.target.value)); feedbackForm.addEventListener('submit', function(e) { e.preventDefault(); const id = document.getElementById('feedback-id').value; const data = { rating: parseInt(document.getElementById('feedback-rating').value), nps: parseInt(document.getElementById('feedback-nps-score').value), stage: document.getElementById('feedback-stage').value, comment: document.getElementById('feedback-comment').value, date: new Date().toISOString().split('T')[0] }; if (id) { // Edit const index = feedbackData.findIndex(f => f.id == id); feedbackData[index] = { ...feedbackData[index], ...data }; } else { // Add data.id = Date.now(); feedbackData.push(data); } renderAll(searchInput.value); closeModal(); }); feedbackListContainer.addEventListener('click', function(e) { const card = e.target.closest('.feedback-card'); if (!card) return; const id = parseInt(card.dataset.id); if (e.target.classList.contains('edit-btn')) { openModal('edit', id); } if (e.target.classList.contains('delete-btn')) { if(confirm('Are you sure you want to delete this feedback?')) { feedbackData = feedbackData.filter(f => f.id !== id); renderAll(searchInput.value); } } }); // --- Tab Navigation & PDF --- const tabs = document.querySelectorAll('.dashboard-tabs .tab-link'); const tabContents = document.querySelectorAll('.tab-content'); tabs.forEach((tab, index) => { tab.addEventListener('click', () => { tabs.forEach(t => t.classList.remove('active')); tabContents.forEach(c => c.classList.remove('active')); tab.classList.add('active'); tabContents[index].classList.add('active'); }); }); document.getElementById('download-pdf-btn').addEventListener('click', () => { const { jsPDF } = window.jspdf; const content = document.getElementById('dashboard-content'); const hiddenControls = ['.feedback-controls', '.feedback-actions', '.action-area']; hiddenControls.forEach(sel => document.querySelectorAll(sel).forEach(el => el.style.visibility = 'hidden')); html2canvas(content, { scale: 2 }).then(canvas => { const imgData = canvas.toDataURL('image/png'); const pdf = new jsPDF({ orientation: 'l', unit: 'mm', format: 'a4' }); const pdfWidth = pdf.internal.pageSize.getWidth(); const pdfHeight = pdf.internal.pageSize.getHeight(); pdf.addImage(imgData, 'PNG', 10, 10, pdfWidth - 20, pdfHeight - 20, undefined, 'FAST'); pdf.save('Candidate_Experience_Dashboard.pdf'); hiddenControls.forEach(sel => document.querySelectorAll(sel).forEach(el => el.style.visibility = 'visible')); }); }); // Initial Render renderAll(); });
    Scroll to Top