Skip to content

Commit 61fc7df

Browse files
authored
Update script.js
1 parent da3fefb commit 61fc7df

File tree

1 file changed

+87
-41
lines changed

1 file changed

+87
-41
lines changed

script.js

Lines changed: 87 additions & 41 deletions
Original file line numberDiff line numberDiff line change
@@ -1,65 +1,111 @@
1+
const chat = document.getElementById("chat");
12
const form = document.getElementById("input-form");
23
const input = document.getElementById("user-input");
3-
const messagesContainer = document.getElementById("messages");
4-
5-
// 🔸 Openingsbericht bij laden
6-
window.addEventListener("DOMContentLoaded", () => {
7-
const openingText = `
8-
**Hallo! Welkom bij de AI Indicatiehulp.** 😊<br><br>
9-
Mijn naam is Indi, en ik help je graag bij het stellen van de juiste indicatie voor je cliënt.<br><br>
10-
Waarmee kan ik je vandaag ondersteunen?<br><br>
11-
- **1.** In kaart brengen cliëntsituatie<br>
12-
- **2.** Indicatiestelling extramuraal (Zorg Thuis)<br>
13-
- **3.** Indicatiestelling intramuraal (verpleeghuis)<br><br>
14-
Kies een optie of stel gerust je vraag!
4+
5+
let threadId = null;
6+
7+
// Openingsbericht bij het laden van de pagina
8+
window.onload = () => {
9+
const welkomstHTML = `
10+
Welkom bij de <strong>AI Indicatiehulp</strong>!<br>
11+
Ik ben jouw digitale adviseur voor:<br>
12+
het stellen van de juiste indicatie en het opstellen van een conceptadvies voor de zorgexpert (Kim Brand).<br><br>
13+
14+
<strong>Kies een optie om te starten:</strong><br>
15+
1. In kaart brengen cliëntsituatie<br>
16+
2. Indicatiestelling extramuraal (zorg thuis)<br>
17+
3. Indicatiestelling intramuraal (verpleeghuis)<br><br>
18+
19+
Wil je direct een indicatieadvies laten opstellen? Dan heb ik meer informatie nodig over de cliënt.<br>
20+
Geef bij voorkeur ook je naam en een e-mailadres of telefoonnummer,<br>
21+
zodat we het conceptadvies voor beoordeling kunnen indienen.<br><br>
22+
23+
<em>Met welke optie wil je verder?</em>
1524
`;
16-
appendMessage("assistant", openingText);
17-
});
25+
appendFormattedMessage("agent-message", welkomstHTML);
26+
};
1827

19-
// 🔸 Form submit handler
2028
form.addEventListener("submit", async (e) => {
2129
e.preventDefault();
22-
const userMessage = input.value.trim();
23-
if (!userMessage) return;
30+
const message = input.value.trim();
31+
if (!message) return;
2432

25-
appendMessage("user", userMessage);
33+
appendMessage("user-message", message);
2634
input.value = "";
2735

2836
try {
2937
const response = await fetch("https://chatproxy2-f5hygzgbckapejcu.francecentral-01.azurewebsites.net/api/chatproxy2", {
3038
method: "POST",
31-
headers: {
32-
"Content-Type": "application/json"
33-
},
34-
body: JSON.stringify({ message: userMessage })
39+
headers: { "Content-Type": "application/json" },
40+
body: JSON.stringify({ message, thread_id: threadId })
3541
});
3642

3743
if (!response.ok) {
38-
throw new Error("Serverfout: " + response.status);
44+
const errorText = await response.text();
45+
console.error("Responsetekst:", errorText);
46+
throw new Error(`Serverfout: ${response.status}`);
3947
}
4048

4149
const data = await response.json();
42-
const formattedReply = formatReply(data.reply);
43-
appendMessage("assistant", formattedReply);
44-
} catch (error) {
45-
appendMessage("assistant", "Er is iets misgegaan. Probeer het later opnieuw.");
46-
console.error("Fout in fetch:", error);
50+
threadId = data.thread_id;
51+
streamMessage("agent-message", data.reply);
52+
} catch (err) {
53+
streamMessage("agent-message", "Er ging iets mis.");
54+
console.error("Fout in fetch:", err);
4755
}
4856
});
4957

50-
// 🔸 Bericht toevoegen aan chat
51-
function appendMessage(role, message) {
52-
const messageElement = document.createElement("div");
53-
messageElement.classList.add("message", role);
54-
messageElement.innerHTML = message;
55-
messagesContainer.appendChild(messageElement);
56-
messagesContainer.scrollTop = messagesContainer.scrollHeight;
58+
function appendMessage(cssClass, text) {
59+
const msg = document.createElement("div");
60+
msg.classList.add("message", cssClass);
61+
msg.textContent = text;
62+
chat.appendChild(msg);
63+
chat.scrollTop = chat.scrollHeight;
5764
}
5865

59-
// 🔸 Formatter voor GPT-reacties (vet, bullets, witregels)
60-
function formatReply(rawText) {
61-
return rawText
62-
.replace(/\*\*(.*?)\*\*/g, '<strong>$1</strong>') // vet
63-
.replace(/\n\n/g, '<br><br>') // dubbele witregel
64-
.replace(/\n/g, '<br>'); // enkele witregel
66+
function appendFormattedMessage(cssClass, htmlContent) {
67+
const msg = document.createElement("div");
68+
msg.classList.add("message", cssClass);
69+
msg.innerHTML = htmlContent;
70+
chat.appendChild(msg);
71+
chat.scrollTop = chat.scrollHeight;
72+
}
73+
74+
function streamMessage(cssClass, text) {
75+
const msg = document.createElement("div");
76+
msg.classList.add("message", cssClass);
77+
chat.appendChild(msg);
78+
79+
const lines = text.split("\n").filter(line => line.trim() !== "");
80+
81+
const isNumberedList = lines.length > 1 && lines.every(line => /^\d+\.\s+/.test(line.trim()));
82+
const isBulletedList = lines.length > 1 && lines.every(line => /^[-*]\s+/.test(line.trim()));
83+
84+
if (isNumberedList || isBulletedList) {
85+
const listElement = document.createElement(isNumberedList ? "ol" : "ul");
86+
msg.appendChild(listElement);
87+
let i = 0;
88+
89+
const interval = setInterval(() => {
90+
if (i < lines.length) {
91+
const li = document.createElement("li");
92+
li.textContent = lines[i].replace(/^(\d+\.\s+|[-*]\s+)/, "").trim();
93+
listElement.appendChild(li);
94+
chat.scrollTop = chat.scrollHeight;
95+
i++;
96+
} else {
97+
clearInterval(interval);
98+
}
99+
}, 200);
100+
} else {
101+
let index = 0;
102+
const interval = setInterval(() => {
103+
if (index < text.length) {
104+
msg.textContent += text.charAt(index++);
105+
chat.scrollTop = chat.scrollHeight;
106+
} else {
107+
clearInterval(interval);
108+
}
109+
}, 15);
110+
}
65111
}

0 commit comments

Comments
 (0)