gekina commited on
Commit
12d9e34
·
verified ·
1 Parent(s): d1d2a80

Update src/components/DiagnosisPage.jsx

Browse files
Files changed (1) hide show
  1. src/components/DiagnosisPage.jsx +29 -5
src/components/DiagnosisPage.jsx CHANGED
@@ -75,22 +75,39 @@ const DiagnosisPage = () => {
75
  e.preventDefault();
76
  if (!inputMessage.trim()) return;
77
 
 
78
  const userMsg = {
79
  id: messages.length + 1,
80
  text: inputMessage,
81
  sender: 'user',
82
  time: new Date().toLocaleTimeString([], { hour: '2-digit', minute: '2-digit' })
83
  };
84
- setMessages(prev => [...prev, userMsg]);
 
 
 
85
  setInputMessage('');
86
  setIsLoading(true);
87
 
 
 
 
 
 
 
 
 
 
88
  try {
89
  const token = localStorage.getItem('token');
90
  const response = await fetch('/api/chat', {
91
  method: 'POST',
92
  headers: { 'Content-Type': 'application/json', 'Authorization': `Bearer ${token}` },
93
- body: JSON.stringify({ message: userMsg.text })
 
 
 
 
94
  });
95
 
96
  if (response.status === 401) {
@@ -102,16 +119,24 @@ const DiagnosisPage = () => {
102
  const data = await response.json();
103
 
104
  const botMsg = {
105
- id: messages.length + 2,
106
  text: data.response || "Maaf, saya tidak mengerti.",
107
  sender: 'bot',
108
  time: new Date().toLocaleTimeString([], { hour: '2-digit', minute: '2-digit' }),
109
- urls: data.urls || [] // Mengambil array URL dari backend
110
  };
111
  setMessages(prev => [...prev, botMsg]);
112
 
113
  } catch (error) {
114
  console.error("Error:", error);
 
 
 
 
 
 
 
 
115
  } finally {
116
  setIsLoading(false);
117
  }
@@ -135,7 +160,6 @@ const DiagnosisPage = () => {
135
  <div className="message-content">{formatMessage(msg.text)}</div>
136
 
137
  {/* --- DISPLAY URL REFERENCES (CAPSULE STYLE) --- */}
138
- {/* Hanya tampil jika pengirimnya bot DAN ada url */}
139
  {msg.sender === 'bot' && msg.urls && msg.urls.length > 0 && (
140
  <div className="source-urls-container">
141
  <span className="source-label">Referensi:</span>
 
75
  e.preventDefault();
76
  if (!inputMessage.trim()) return;
77
 
78
+ // 1. Buat object pesan user
79
  const userMsg = {
80
  id: messages.length + 1,
81
  text: inputMessage,
82
  sender: 'user',
83
  time: new Date().toLocaleTimeString([], { hour: '2-digit', minute: '2-digit' })
84
  };
85
+
86
+ // Update state local dulu (Optimistic UI)
87
+ const updatedMessages = [...messages, userMsg];
88
+ setMessages(updatedMessages);
89
  setInputMessage('');
90
  setIsLoading(true);
91
 
92
+ // 2. Siapkan History Chat (Ambil 4 pesan terakhir untuk konteks)
93
+ const chatHistory = updatedMessages
94
+ .filter(m => m.text && m.sender !== 'system') // Filter pesan valid
95
+ .slice(-4) // Batasi hanya 4 interaksi terakhir agar tidak terlalu panjang
96
+ .map(m => ({
97
+ role: m.sender === 'user' ? 'user' : 'assistant', // Map ke format backend
98
+ content: m.text
99
+ }));
100
+
101
  try {
102
  const token = localStorage.getItem('token');
103
  const response = await fetch('/api/chat', {
104
  method: 'POST',
105
  headers: { 'Content-Type': 'application/json', 'Authorization': `Bearer ${token}` },
106
+ // Kirim message + history
107
+ body: JSON.stringify({
108
+ message: userMsg.text,
109
+ history: chatHistory
110
+ })
111
  });
112
 
113
  if (response.status === 401) {
 
119
  const data = await response.json();
120
 
121
  const botMsg = {
122
+ id: updatedMessages.length + 2,
123
  text: data.response || "Maaf, saya tidak mengerti.",
124
  sender: 'bot',
125
  time: new Date().toLocaleTimeString([], { hour: '2-digit', minute: '2-digit' }),
126
+ urls: data.urls || []
127
  };
128
  setMessages(prev => [...prev, botMsg]);
129
 
130
  } catch (error) {
131
  console.error("Error:", error);
132
+ const errorMsg = {
133
+ id: updatedMessages.length + 2,
134
+ text: "Gagal terhubung ke server. Mohon periksa koneksi Anda.",
135
+ sender: 'bot',
136
+ time: new Date().toLocaleTimeString([], { hour: '2-digit', minute: '2-digit' }),
137
+ urls: []
138
+ }
139
+ setMessages(prev => [...prev, errorMsg]);
140
  } finally {
141
  setIsLoading(false);
142
  }
 
160
  <div className="message-content">{formatMessage(msg.text)}</div>
161
 
162
  {/* --- DISPLAY URL REFERENCES (CAPSULE STYLE) --- */}
 
163
  {msg.sender === 'bot' && msg.urls && msg.urls.length > 0 && (
164
  <div className="source-urls-container">
165
  <span className="source-label">Referensi:</span>