ok
This commit is contained in:
@@ -72,7 +72,7 @@ const ChatBot = ({ existingConversation, readOnly, hh }) => {
|
|||||||
console.log(data)
|
console.log(data)
|
||||||
// Assuming your backend sends back something like: { answer: "text" }
|
// Assuming your backend sends back something like: { answer: "text" }
|
||||||
// Adjust this according to your actual response shape
|
// Adjust this according to your actual response shape
|
||||||
const botAnswer = data[0].output[0].text || data[0].output || 'Maaf, saya tidak mengerti.';
|
const botAnswer = data.jawaban || 'Maaf, saya tidak mengerti.';
|
||||||
|
|
||||||
// Add bot's reply
|
// Add bot's reply
|
||||||
setMessages(prev => [
|
setMessages(prev => [
|
||||||
|
|||||||
@@ -23,7 +23,6 @@ const Dashboard = () => {
|
|||||||
|
|
||||||
const [stats, setStats] = useState({
|
const [stats, setStats] = useState({
|
||||||
totalChats: 0,
|
totalChats: 0,
|
||||||
userMessages: 0,
|
|
||||||
botMessages: 0,
|
botMessages: 0,
|
||||||
});
|
});
|
||||||
|
|
||||||
@@ -118,14 +117,12 @@ const Dashboard = () => {
|
|||||||
}));
|
}));
|
||||||
setRawData(rawDataArray);
|
setRawData(rawDataArray);
|
||||||
let totalSessions = new Set();
|
let totalSessions = new Set();
|
||||||
let userMessages = 0;
|
|
||||||
let botMessages = 0;
|
let botMessages = 0;
|
||||||
|
|
||||||
rawDataArray.forEach(({ sesi }) => {
|
rawDataArray.forEach(({ sesi }) => {
|
||||||
Object.values(sesi).forEach(messages => {
|
Object.values(sesi).forEach(messages => {
|
||||||
messages.forEach(msg => {
|
messages.forEach(msg => {
|
||||||
totalSessions.add(msg.session_id);
|
totalSessions.add(msg.session_id);
|
||||||
if (msg.message.type === 'human') userMessages++;
|
|
||||||
if (msg.message.type === 'ai') botMessages++;
|
if (msg.message.type === 'ai') botMessages++;
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
@@ -133,7 +130,6 @@ const Dashboard = () => {
|
|||||||
|
|
||||||
setStats({
|
setStats({
|
||||||
totalChats: totalSessions.size,
|
totalChats: totalSessions.size,
|
||||||
userMessages,
|
|
||||||
botMessages,
|
botMessages,
|
||||||
});
|
});
|
||||||
|
|
||||||
@@ -150,18 +146,19 @@ const Dashboard = () => {
|
|||||||
setCheckOnce(false);
|
setCheckOnce(false);
|
||||||
if (subscription === null) {
|
if (subscription === null) {
|
||||||
// Not subscribed yet — show modal asking user to subscribe
|
// Not subscribed yet — show modal asking user to subscribe
|
||||||
setModalContent(<NotificationPrompt onAllow={subscribeUser} onDismiss={null} />);
|
setModalContent(<NotificationPrompt onAllow={subscribeUser} onDismiss={()=>setModalContent('')} />);
|
||||||
} else {
|
} else {
|
||||||
// Already subscribed
|
// Already subscribed
|
||||||
setModalContent('')
|
setModalContent('')
|
||||||
console.log('User is already subscribed.');
|
console.log('User is already subscribed.');
|
||||||
|
subscribeUser();
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
fetchData(); // Jalankan langsung saat komponen di-mount
|
fetchData(); // Jalankan langsung saat komponen di-mount
|
||||||
const interval = setInterval(fetchData, 30000); // Jalankan setiap 30 detik
|
const interval = setInterval(fetchData, 60000); // Jalankan setiap 30 detik
|
||||||
return () => clearInterval(interval); // Bersihkan interval saat komponen unmount
|
return () => clearInterval(interval); // Bersihkan interval saat komponen unmount
|
||||||
|
|
||||||
}, [navigate]);
|
}, [navigate]);
|
||||||
@@ -236,13 +233,12 @@ parsedHours.sort((a, b) => a - b);
|
|||||||
// Extract only the date (no timezone shifting)
|
// Extract only the date (no timezone shifting)
|
||||||
const getDateStr = date => date.getFullYear() + '-' + (date.getMonth() + 1).toString().padStart(2, '0') + '-' + date.getDate().toString().padStart(2, '0');
|
const getDateStr = date => date.getFullYear() + '-' + (date.getMonth() + 1).toString().padStart(2, '0') + '-' + date.getDate().toString().padStart(2, '0');
|
||||||
|
|
||||||
const latestDateStr = getDateStr(parsedHours[parsedHours.length - 1]);
|
|
||||||
|
|
||||||
const hours = parsedHours.map(date => {
|
const hours = parsedHours.map((date, index) => {
|
||||||
const dateStr = getDateStr(date);
|
|
||||||
const timeStr = date.getHours().toString().padStart(2, '0') + ':' + date.getMinutes().toString().padStart(2, '0');
|
const timeStr = date.getHours().toString().padStart(2, '0') + ':' + date.getMinutes().toString().padStart(2, '0');
|
||||||
return dateStr === latestDateStr ? timeStr : `kemarin ${timeStr}`;
|
return index === parsedHours.length - 1 ? 'Sekarang' : timeStr;
|
||||||
});
|
});
|
||||||
|
|
||||||
const counts = {};
|
const counts = {};
|
||||||
prefixes.forEach(prefix => {
|
prefixes.forEach(prefix => {
|
||||||
counts[prefix] = hours.map(() => 0);
|
counts[prefix] = hours.map(() => 0);
|
||||||
@@ -282,15 +278,12 @@ const hours = parsedHours.map(date => {
|
|||||||
scales: {
|
scales: {
|
||||||
y: {
|
y: {
|
||||||
beginAtZero: true,
|
beginAtZero: true,
|
||||||
title: {
|
|
||||||
display: true,
|
|
||||||
text: 'Jumlah Pesan',
|
|
||||||
},
|
|
||||||
},
|
},
|
||||||
x: {
|
x: {
|
||||||
title: {
|
ticks: {
|
||||||
display: true,
|
font: {
|
||||||
text: 'Jam',
|
size: 10, // 👈 set your desired font size here
|
||||||
|
},
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
@@ -342,14 +335,14 @@ const hours = parsedHours.map(date => {
|
|||||||
<h2>{stats.totalChats}</h2>
|
<h2>{stats.totalChats}</h2>
|
||||||
<p>Total Percakapan selama 24 jam</p>
|
<p>Total Percakapan selama 24 jam</p>
|
||||||
</div>
|
</div>
|
||||||
<div className={styles.statCard}>
|
|
||||||
<h2>{stats.userMessages}</h2>
|
|
||||||
<p>Pesan dari Pengguna</p>
|
|
||||||
</div>
|
|
||||||
<div className={styles.statCard}>
|
<div className={styles.statCard}>
|
||||||
<h2>{stats.botMessages}</h2>
|
<h2>{stats.botMessages}</h2>
|
||||||
<p>Respons Bot</p>
|
<p>Respons Bot</p>
|
||||||
</div>
|
</div>
|
||||||
|
<div className={styles.statCard}>
|
||||||
|
<h2>{8}</h2>
|
||||||
|
<p>Follow up</p>
|
||||||
|
</div>
|
||||||
<div className={styles.statCard} onClick={openTopicsModal}>
|
<div className={styles.statCard} onClick={openTopicsModal}>
|
||||||
<h2 style={{ fontSize: '17px' }}>{discussedTopics[0]?.topic}</h2>
|
<h2 style={{ fontSize: '17px' }}>{discussedTopics[0]?.topic}</h2>
|
||||||
<p>Paling sering ditanyakan</p>
|
<p>Paling sering ditanyakan</p>
|
||||||
|
|||||||
Reference in New Issue
Block a user