File size: 10,124 Bytes
f85caf4
 
 
 
 
 
 
948ca35
f85caf4
 
e2eeb49
 
 
 
 
 
 
cbf15fe
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
e2eeb49
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
f85caf4
 
 
 
 
 
 
 
 
 
 
e2eeb49
f85caf4
e2eeb49
 
 
 
 
 
 
f85caf4
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
948ca35
 
f85caf4
 
 
 
 
 
 
948ca35
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
f85caf4
948ca35
f85caf4
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
e2eeb49
f85caf4
 
e2eeb49
 
 
 
 
f85caf4
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
// src/static/js/record.js

const podaciPacijentaBox = document.getElementById("podaciPacijentaBox");
const epikrizaBox = document.getElementById("epikrizaBox");
const copyButton = document.getElementById("copyButton");
const copyMessage = document.getElementById("copyMessage");
const deleteButton = document.getElementById("deleteButton");
const postProcessButton = document.getElementById("postProcessButton");
const uploadButton = document.getElementById("uploadButton");
const fileInput = document.getElementById("fileInput");
const uploadCsvButton = document.getElementById("uploadCsvButton");
const csvInput = document.getElementById("csvInput");
const patientIdDropdown = document.getElementById("patientIdDropdown");
const toggleViewButton = document.getElementById("toggleViewButton");
const tableIcn = document.getElementById("tableIcn");
const txtIcn = document.getElementById("txtIcn");

const chatbotIframe = document.getElementById("chatbotIframe");
const chatbotToggle = document.querySelector(".chatbot-toggle");

  chatbotToggle.addEventListener("click", () => {
    if (chatbotIframe.style.display === "none" || !chatbotIframe.style.display) {
      openChatUI();
    } else {
      closeChatUI();
    }
  });

  function openChatUI() {
    chatbotIframe.style.display = "block";
    chatbotToggle.style.display = "none"; // Sakrij toggle dugme kada je chat otvoren
  }

  function closeChatUI() {
    chatbotIframe.style.display = "none";
    chatbotToggle.style.display = "flex"; // Prikaži toggle dugme kada je chat zatvoren
  }


let isTableView = false;
let detaljiPoId = {};
function autoResizeTextarea(textarea) {
  // Postavljanje visine na 'auto' osigurava da se visina prilagodi sadržaju
  textarea.style.height = "auto";
  // Postavljanje visine na scrollHeight + "px" omogućava precizno prilagođavanje
  textarea.style.height = textarea.scrollHeight + "px";
}

uploadCsvButton.addEventListener("click", function () {
  csvInput.click(); // Trigger file input dialog when upload CSV button is clicked
});

function toggleView() {
  isTableView = !isTableView; // Promeni stanje prikaza
  loadDetailsForId(patientIdDropdown.value); // Ponovo učitaj detalje za trenutno izabrani ID
}

const expectedHeaders = [
  "id_pacijenta",
  "rbr_epi",
  "rbr_pepi",
  "tip_pepi",
  "misljenje",
];

function isValidCsv(headers) {
  // Proverava da li su sva očekivana zaglavlja prisutna
  return expectedHeaders.every((header) => headers.includes(header));
}

csvInput.addEventListener("change", function () {
  const file = this.files[0];
  if (file) {
    Papa.parse(file, {
      complete: function (results) {
        const actualHeaders = results.meta.fields; // Papa Parse pruža zaglavlja u `meta.fields`
        if (isValidCsv(actualHeaders)) {
          // Ako fajl sadrži očekivana zaglavlja, obradi podatke
          processCsvResults(results.data);
        } else {
          // Ako fajl ne sadrži očekivana zaglavlja, obavesti korisnika
          alert("Fajl nije važeći. Molimo učitajte ispravan CSV fajl.");
          patientIdDropdown.style.display = "none"; // Opciono sakrij dropdown
          toggleViewButton.style.display = "none"; // Sakrij dugme za promenu prikaza
        }
      },
      header: true,
      skipEmptyLines: true,
      delimiter: "\t", // Ako je potrebno, prilagodite delimiter; uklonite ovu liniju ako želite da Papa Parse automatski detektuje delimiter
    });
  }
});

function processCsvResults(data) {
  detaljiPoId = {}; // Resetovanje za svaki novi upload
  data.forEach((row) => {
    const idPacijenta = row["id_pacijenta"];
    const rbr_epi = row["rbr_epi"];
    const rbr_pepi = row["rbr_pepi"];
    const tip_pepi = row["tip_pepi"];
    const misljenje = row["misljenje"];
    if (!detaljiPoId[idPacijenta]) {
      detaljiPoId[idPacijenta] = [];
    }
    detaljiPoId[idPacijenta].push({ rbr_epi, rbr_pepi, tip_pepi, misljenje });
  });

  populateDropdown(Object.keys(detaljiPoId));
}

function populateDropdown(ids) {
  patientIdDropdown.innerHTML =
    '<option value="">Izaberite ID pacijenta</option>';
  ids.forEach((id) => {
    const option = document.createElement("option");
    option.value = option.textContent = id;
    patientIdDropdown.appendChild(option);
  });
  patientIdDropdown.style.display = "block";
}
function loadDetailsForId(idPacijenta) {
  const detalji = detaljiPoId[idPacijenta];
  let detaljiTekst = "";
  let tabelaHtml = "";

  if (isTableView) {
    // Generišite HTML za tabelu
    tabelaHtml =
      '<table border="1"><tr><th>Epi</th><th>Pepi</th><th>Tip</th><th>Mišljenje</th></tr>';
    detalji.forEach((detalj) => {
      tabelaHtml += `<tr>
          <td>${detalj.rbr_epi}</td>
          <td>${detalj.rbr_pepi}</td>
          <td>${detalj.tip_pepi}</td>
          <td>${detalj.misljenje}</td>
      </tr>`;
    });
    tabelaHtml += "</table>";
    podaciPacijentaBox.style.display = "none"; // Sakrij textarea
    tableIcn.style.display = "none";
    const kontejner = document.getElementById("detaljiTabelaKontejner");
    kontejner.innerHTML = tabelaHtml; // Prikaz tabele
    kontejner.style.display = "block"; // Prikaz kontejnera tabele
    txtIcn.style.display = "block";
  } else {
    // Generišite tekst za textarea
    detaljiTekst = detalji.map((detalj) => `${detalj.misljenje}`).join("\n");
    const kontejner = document.getElementById("detaljiTabelaKontejner");
    kontejner.style.display = "none"; // Sakrij tabelu
    txtIcn.style.display = "none"; // Prikaz
    podaciPacijentaBox.value = detaljiTekst; // Prikaz u textarea
    podaciPacijentaBox.style.display = "block"; // Prikaz textarea
    autoResizeTextarea(podaciPacijentaBox);
    tableIcn.style.display = "block";
  }
}

toggleViewButton.addEventListener("click", toggleView);
// Event listener za promenu izabranog ID-a pacijenta iz dropdown-a
patientIdDropdown.addEventListener("change", function () {
  const selectedId = this.value;
  if (selectedId) {
    loadDetailsForId(selectedId);
    toggleViewButton.style.display = "block"; // Prikaz dugmeta samo kada je ID pacijenta odabran
  } else {
    toggleViewButton.style.display = "none"; // Sakrij dugme ako nije odabran nijedan ID
  }
  toggleActionButtonsState();
});

uploadButton.addEventListener("click", function () {
  fileInput.click(); // Trigger file input dialog when upload button is clicked
});

fileInput.addEventListener("change", function () {
  const file = this.files[0];
  if (file) {
    const reader = new FileReader();
    reader.onload = function (e) {
      podaciPacijentaBox.value = e.target.result;

      toggleActionButtonsState(); // Update buttons' state based on the new content

      patientIdDropdown.value = "";
      podaciPacijentaBox.style.display = "block";
      const kontejner = document.getElementById("detaljiTabelaKontejner");
      kontejner.style.display = "none";
      // Sakrij dugme za promenu prikaza ako ne želite da bude dostupno dok se ne odabere specifičan ID pacijenta
      toggleViewButton.style.display = "none";
    };
    reader.readAsText(file);
  }
});
const generateEpikrizaButton = document.getElementById(
  "generateEpikrizaButton"
);
document.querySelectorAll("button").forEach((button) => {
  button.setAttribute("data-original-text", button.textContent);
});

function setLoadingState(isLoading, button) {
  button.disabled = isLoading;
  button.textContent = isLoading
    ? "Обрада..."
    : button.getAttribute("data-original-text");
}

function toggleActionButtonsState() {
  const isPodaciEmpty = !podaciPacijentaBox.value.trim();
  const isEpikrizaEmpty = !epikrizaBox.value.trim();
  postProcessButton.disabled = isEpikrizaEmpty;
  deleteButton.disabled = isPodaciEmpty;
  copyButton.disabled = isPodaciEmpty;
  generateEpikrizaButton.disabled = isPodaciEmpty;
}
// Na početku, inicijalno proverite stanje dugmadi
toggleActionButtonsState();

postProcessButton.addEventListener("click", function () {
  var epikriza = epikrizaBox.value;
  setLoadingState(true, this);
  fetch("/postprocess", {
    method: "POST",
    headers: {
      "Content-Type": "application/json",
    },
    body: JSON.stringify({ epikriza: epikriza }),
  })
    .then((response) => response.json())
    .then((data) => {
      epikrizaBox.value = data.processedEpikriza;
      toggleActionButtonsState();
    })
    .catch((error) => {
      console.error("Error:", error);
    })
    .finally(() => {
      setLoadingState(false, this);
    });
});

podaciPacijentaBox.addEventListener("input", toggleActionButtonsState);
epikrizaBox.addEventListener("input", toggleActionButtonsState);

generateEpikrizaButton.addEventListener("click", function () {
  var podaci = podaciPacijentaBox.value;

  setLoadingState(true, this);
  fetch("/epikriza", {
    method: "POST",
    headers: {
      "Content-Type": "application/json",
    },
    body: JSON.stringify({ podaci: podaci }),
  })
    .then((response) => response.json())
    .then((data) => {
      epikrizaBox.value = data.epikriza;
      toggleActionButtonsState();
    })
    .catch((error) => {
      console.error("Error:", error);
    })
    .finally(() => {
      setLoadingState(false, this);
    });
});

copyButton.addEventListener("click", () => {
  showCopyMessage("Tekst kopiran u clipboard.");
});

function showCopyMessage(message) {
  epikrizaBox.select();
  document.execCommand("copy");
  copyMessage.textContent = message;
  copyMessage.classList.add("copyMessage-visible"); // Dodaje klasu za animaciju
  setTimeout(() => {
    copyMessage.classList.remove("copyMessage-visible"); // Uklanja klasu nakon 2 sekunde
  }, 1000);
}

deleteButton.addEventListener("click", () => {
  if (confirm("Да ли сте сигурни да желите да обришете текст?")) {
    podaciPacijentaBox.value = "";
    epikrizaBox.value = "";
    patientIdDropdown.value = "";
    toggleViewButton.style.display = "none";
    podaciPacijentaBox.style.display = "block";
    const kontejner = document.getElementById("detaljiTabelaKontejner");
    kontejner.style.display = "none";
    toggleActionButtonsState();
  }
});