emoapi / reportPage.js
PatriciaWening's picture
Upload 4 files
cb28fad verified
const sessionId = localStorage.getItem('currentSessionId');
async function fetchReportData() {
try {
if (!sessionId) {
document.getElementById('dominant-emotion').textContent = "Tidak ada data";
return;
}
const response = await fetch(`http://localhost:8080/api/session-report/${sessionId}`);
const data = await response.json();
if (data.error) {
document.getElementById('dominant-emotion').textContent = data.error;
return;
}
document.getElementById('dominant-emotion').textContent = capitalizeFirstLetter(data.dominantEmotion);
document.getElementById('avg-stress').textContent = data.averageStressLevel;
setStressLevelColor('avg-stress', data.averageStressLevel);
document.getElementById('total-frames').textContent = data.totalFrames;
document.getElementById('max-stress').textContent = data.maxStressLevel;
document.getElementById('min-stress').textContent = data.minStressLevel;
document.getElementById('duration').textContent = `${Math.round(data.totalFrames / 1)} detik`;
setStressInterpretation(data.averageStressLevel);
createEmotionChart(data.emotionCounts);
} catch (error) {
console.error('Error fetching report data:', error);
document.getElementById('dominant-emotion').textContent = "Error mengambil data laporan";
}
}
function capitalizeFirstLetter(string) {
return string.charAt(0).toUpperCase() + string.slice(1);
}
function setStressLevelColor(elementId, stressLevel) {
const element = document.getElementById(elementId);
if (stressLevel >= 80) {
element.classList.add('text-red-600');
} else if (stressLevel >= 50) {
element.classList.add('text-yellow-600');
} else {
element.classList.add('text-green-600');
}
}
function setStressInterpretation(stressLevel) {
const interpretationElement = document.getElementById('stress-interpretation');
let message, bgColor, textColor;
if (stressLevel >= 80) {
message = "Tingkat stres tinggi. Rekomendasi: Istirahat dan konsultasi dengan profesional kesehatan mental.";
bgColor = "bg-red-100";
textColor = "text-red-800";
} else if (stressLevel >= 50) {
message = "Tingkat stres sedang. Rekomendasi: Pertimbangkan teknik relaksasi dan manajemen stres.";
bgColor = "bg-yellow-100";
textColor = "text-yellow-800";
} else {
message = "Tingkat stres rendah. Tetap jaga kesehatan fisik dan mental.";
bgColor = "bg-green-100";
textColor = "text-green-800";
}
interpretationElement.classList.add(bgColor, textColor);
interpretationElement.textContent = message;
}
function createEmotionChart(emotionCounts) {
const ctx = document.getElementById('emotion-chart').getContext('2d');
const labels = Object.keys(emotionCounts).map(emotion => capitalizeFirstLetter(emotion));
const data = Object.values(emotionCounts);
const backgroundColors = [
'rgba(255, 99, 132, 0.7)',
'rgba(75, 192, 192, 0.7)',
'rgba(255, 205, 86, 0.7)',
'rgba(54, 162, 235, 0.7)',
'rgba(153, 102, 255, 0.7)',
'rgba(201, 203, 207, 0.7)',
'rgba(255, 159, 64, 0.7)'
];
new Chart(ctx, {
type: 'doughnut',
data: {
labels: labels,
datasets: [{
data: data,
backgroundColor: backgroundColors.slice(0, labels.length),
borderColor: 'white',
borderWidth: 2
}]
},
options: {
responsive: true,
maintainAspectRatio: false,
plugins: {
legend: {
position: 'right'
}
}
}
});
}
window.addEventListener('DOMContentLoaded', fetchReportData);