Skip to content

Commit b7e2584

Browse files
authored
Update script.js
1 parent f9c26eb commit b7e2584

File tree

1 file changed

+93
-55
lines changed

1 file changed

+93
-55
lines changed

script.js

Lines changed: 93 additions & 55 deletions
Original file line numberDiff line numberDiff line change
@@ -1,73 +1,111 @@
1-
let connection;
1+
const chat = document.getElementById("chat");
2+
const form = document.getElementById("input-form");
3+
const input = document.getElementById("user-input");
24

3-
async function startSignalR() {
4-
try {
5-
// Gebruik GET in plaats van POST
6-
const negotiateResponse = await fetch("/api/negotiate");
7-
8-
if (!negotiateResponse.ok) {
9-
throw new Error("Negotiate endpoint gaf status: " + negotiateResponse.status);
10-
}
5+
let threadId = null;
116

12-
const negotiateData = await negotiateResponse.json();
13-
14-
connection = new signalR.HubConnectionBuilder()
15-
.withUrl(negotiateData.url, {
16-
accessTokenFactory: () => negotiateData.accessToken
17-
})
18-
.withAutomaticReconnect()
19-
.configureLogging(signalR.LogLevel.Information)
20-
.build();
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>
2113
22-
// Luister naar berichten van backend via SignalR
23-
connection.on("newToken", (data) => {
24-
console.log("✅ Ontvangen van SignalR:", data);
25-
appendMessage("agent", data);
26-
});
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>
2718
28-
await connection.start();
29-
console.log("✅ SignalR verbonden");
30-
} catch (err) {
31-
console.error("❌ SignalR fout:", err);
32-
appendMessage("agent", "⚠️ Verbinden met de server is mislukt.");
33-
}
34-
}
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>
3522
36-
// Bericht tonen in de chatbox
37-
function appendMessage(sender, text) {
38-
const chat = document.getElementById("chat");
39-
const msgDiv = document.createElement("div");
40-
msgDiv.classList.add(sender === "user" ? "user-message" : "bot-message");
41-
msgDiv.innerText = text;
42-
chat.appendChild(msgDiv);
43-
chat.scrollTop = chat.scrollHeight;
44-
}
23+
<em>Met welke optie wil je verder?</em>
24+
`;
25+
appendFormattedMessage("agent-message", welkomstHTML);
26+
};
4527

46-
// Verstuur gebruikersbericht naar backend
47-
document.getElementById("input-form").addEventListener("submit", async function (e) {
28+
form.addEventListener("submit", async (e) => {
4829
e.preventDefault();
49-
const input = document.getElementById("user-input");
5030
const message = input.value.trim();
5131
if (!message) return;
5232

53-
appendMessage("user", message);
33+
appendMessage("user-message", message);
5434
input.value = "";
5535

5636
try {
57-
await fetch("/api/chatproxy", {
37+
const response = await fetch("https://chatproxy.azurewebsites.net/api/chatproxy", {
5838
method: "POST",
59-
headers: {
60-
"Content-Type": "application/json"
61-
},
62-
body: JSON.stringify({ message: message })
39+
headers: { "Content-Type": "application/json" },
40+
body: JSON.stringify({ message, thread_id: threadId })
6341
});
64-
} catch (error) {
65-
console.error("❌ Fout bij versturen bericht:", error);
66-
appendMessage("agent", "⚠️ Bericht verzenden mislukt.");
42+
43+
if (!response.ok) {
44+
const errorText = await response.text();
45+
console.error("Responsetekst:", errorText);
46+
throw new Error(`Serverfout: ${response.status}`);
47+
}
48+
49+
const data = await response.json();
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);
6755
}
6856
});
6957

70-
// Start SignalR bij laden van de pagina
71-
window.onload = () => {
72-
startSignalR();
73-
};
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;
64+
}
65+
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+
}
111+
}

0 commit comments

Comments
 (0)