aarnal80 commited on
Commit
ebd65f3
verified
1 Parent(s): abe58e5

Update js/main.js

Browse files
Files changed (1) hide show
  1. js/main.js +79 -70
js/main.js CHANGED
@@ -1,47 +1,15 @@
1
  // js/main.js
2
 
3
  // --- INICIO: Importaciones de M贸dulos ---
4
- import { renderIaConfigForm, transcriptionProviders, getIaConfig } from './iaConfigModule.js';
5
  import { initRecorder } from './recordingModule.js';
6
  import { analyzeMedical } from './analysisModule.js';
7
  import { copyText } from './clipboardModule.js';
8
  import { analyzeLabResults, displayLabResults } from './labAnalysisModule.js';
9
  // --- FIN: Importaciones de M贸dulos ---
10
 
11
- console.log("[Main] Script main.js cargado. Definiendo funciones globales y esperando DOMContentLoaded...");
12
 
13
- // --- INICIO: Funci贸n Global para Actualizar Etiquetas de Modelo ---
14
- // !! MOVIDA FUERA del DOMContentLoaded para probar si soluciona el error de scope !!
15
- function updateModelLabels() {
16
- console.log("[Main] Ejecutando updateModelLabels (Definici贸n Global)...");
17
- try { // A帽adir try-catch aqu铆 tambi茅n por si acaso
18
- const cfg = getIaConfig(); // Necesita getIaConfig importada
19
- const transProvider = cfg?.transcription?.provider;
20
- const transModel = cfg?.transcription?.models?.[transProvider] || 'N/A';
21
- const llmProvider = cfg?.llm?.provider;
22
- const llmModel = cfg?.llm?.model || 'N/A';
23
-
24
- const transLabel = document.getElementById('trans-model-label');
25
- if (transLabel) { transLabel.textContent = transModel ? `(${transModel})` : ''; }
26
- else { console.warn("Elemento #trans-model-label no encontrado."); }
27
-
28
- const analysisLabel = document.getElementById('analysis-model-label');
29
- if (analysisLabel) { analysisLabel.textContent = llmModel ? `(${llmModel})` : ''; }
30
- else { console.warn("Elemento #analysis-model-label no encontrado."); }
31
-
32
- const labLabel = document.getElementById('lab-model-label');
33
- if (labLabel) { labLabel.textContent = llmModel ? `(${llmModel})` : ''; }
34
- else { console.warn("Elemento #lab-model-label no encontrado."); }
35
-
36
- console.log("[Main] updateModelLabels (Definici贸n Global) finalizado.");
37
- } catch (e) {
38
- console.error("Error DENTRO de updateModelLabels:", e);
39
- }
40
- }
41
- // --- FIN: Funci贸n Global para Actualizar Etiquetas de Modelo ---
42
-
43
-
44
- // --- INICIO: Listener DOMContentLoaded ---
45
  window.addEventListener('DOMContentLoaded', () => {
46
  console.log("[Main] Evento DOMContentLoaded detectado. Iniciando configuraci贸n...");
47
 
@@ -71,71 +39,112 @@ window.addEventListener('DOMContentLoaded', () => {
71
  console.log("[Main] Selecci贸n de elementos del DOM finalizada.");
72
  // --- FIN: Selecci贸n de Elementos DOM + VALIDACI脫N ---
73
 
74
- // --- INICIO: Bloques de L贸gica envueltos en try...catch ---
75
  try {
76
- // Llamada inicial a la funci贸n (ahora global)
77
- updateModelLabels();
78
- // Listener para cambios (la funci贸n sigue siendo global)
79
- document.addEventListener('iaConfigChanged', updateModelLabels);
80
- } catch(e) { console.error("Error en setup inicial/listener etiquetas de modelo:", e); }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
81
 
82
  try {
83
- // L贸gica Modal Configuraci贸n (sin cambios aqu铆)
84
- renderIaConfigForm('iaConfigContainer');
85
  if(btnConfig) { btnConfig.addEventListener('click', () => { renderIaConfigForm('iaConfigContainer'); if (modal) modal.classList.add('active'); }); }
86
  if(modal) { modal.addEventListener('mousedown', e => { if (e.target === modal) modal.classList.remove('active'); }); }
 
87
  } catch(e) { console.error("Error en setup del Modal Configuraci贸n:", e); }
88
 
89
  try {
90
- // L贸gica Pesta帽a An谩lisis M茅dico (sin cambios aqu铆)
91
- document.addEventListener('transcriptionReady', async e => { /* ... */ });
92
- function getTranscriptionProviderUrl() { /* ... */ return ''; } // Esta funci贸n S脥 debe quedar DENTRO de DOMContentLoaded si usa variables definidas aqu铆
93
- if (btnStart && btnStop && transcriptEl && typeof initRecorder === 'function') { initRecorder({ btnStart, btnStop, transcriptEl, getProvider: getTranscriptionProviderUrl }); } else { console.error("Faltan elementos/funci贸n para initRecorder"); }
94
- if (btnCopyTranscript) { btnCopyTranscript.addEventListener('click', async () => { /* ... */ }); }
95
- if (btnCopyAnalysis) { btnCopyAnalysis.addEventListener('click', async () => { /* ... */ }); }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
96
  } catch(e) { console.error("Error en setup Pesta帽a An谩lisis M茅dico:", e); }
97
 
98
  try {
99
- // L贸gica de Cambio de Pesta帽as (sin cambios aqu铆)
100
- function switchTab(clickedTab) { /* ... */ } // Esta funci贸n S脥 debe quedar DENTRO si usa variables definidas aqu铆
101
  if(allTabButtons.length>0){ allTabButtons.forEach(b=>{b.addEventListener('click',(e)=>{switchTab(e.currentTarget);});}); } else { console.error("No se pueden a帽adir listeners tabs."); }
 
102
  } catch(e) { console.error("Error en setup Cambio de Pesta帽as:", e); }
103
 
104
  try {
105
- // Listener para Limpiar UI al Iniciar Grabaci贸n (sin cambios aqu铆)
106
- document.addEventListener('newRecordingStarted', () => { /* ... */ });
 
107
  } catch(e) { console.error("Error a帽adiendo listener Limpiar UI:", e); }
108
 
109
  try {
110
- // L贸gica Pesta帽a An谩lisis de Ex谩menes
111
  if (btnAnalyzeLabs && labInputText && labLoadingIndicator && filterAlteredLabsCheckbox && labResultsOutput) {
112
  btnAnalyzeLabs.addEventListener('click', async () => {
113
  const inputText = labInputText.value; if (!inputText.trim()) { alert("Pega resultados."); return; }
114
  labLoadingIndicator.style.display = 'flex'; btnAnalyzeLabs.disabled = true; filterAlteredLabsCheckbox.disabled = true; labResultsOutput.innerHTML = ''; lastLabResultText = '';
115
  try {
116
  const resultText = await analyzeLabResults(inputText);
117
- console.log("========= RAW AI RESPONSE START ========="); console.log(resultText); console.log("========= RAW AI RESPONSE END =========");
118
- lastLabResultText = resultText;
119
  const filterIsActive = filterAlteredLabsCheckbox.checked;
120
  displayLabResults(resultText, labResultsOutput, filterIsActive);
121
- // Llamada a la funci贸n (ahora global)
122
- updateModelLabels(); // Intentar llamar a la funci贸n global
123
- } catch (error) {
124
- // Mostrar el error espec铆fico que ocurre aqu铆
125
- console.error("Error DENTRO del listener de btnAnalyzeLabs:", error);
126
- if(labResultsOutput) labResultsOutput.innerHTML = `<p class="text-red-600">Error: ${error.message}</p>`;
127
- // Mostrar alerta con el error espec铆fico
128
- alert(`Error al analizar resultados: ${error.message}`);
129
- } finally {
130
- labLoadingIndicator.style.display = 'none'; btnAnalyzeLabs.disabled = false; filterAlteredLabsCheckbox.disabled = false;
131
- }
132
  });
133
- // Listener para el checkbox de filtro (sin cambios)
134
- filterAlteredLabsCheckbox.addEventListener('change', () => { if (!lastLabResultText) return; const filterIsActive = filterAlteredLabsCheckbox.checked; if(labResultsOutput) displayLabResults(lastLabResultText, labResultsOutput, filterIsActive); });
135
  } else { console.error("Faltan elementos para setup Pesta帽a An谩lisis Ex谩menes"); }
136
- // Listener para copiar resultados (sin cambios)
137
- if (btnCopyLabResults && labResultsOutput) { btnCopyLabResults.addEventListener('click', async () => { /* ... */ }); }
138
  else { console.error("Faltan elementos para bot贸n Copiar Lab"); }
 
139
  } catch(e) { console.error("Error en setup Pesta帽a An谩lisis Ex谩menes:", e); }
140
 
141
  console.log("[Main] Configuraci贸n de listeners finalizada.");
 
1
  // js/main.js
2
 
3
  // --- INICIO: Importaciones de M贸dulos ---
4
+ import { renderIaConfigForm, transcriptionProviders, getIaConfig, llmProviders } from './iaConfigModule.js'; // Aseg煤rate que llmProviders est茅 importado si lo usas aqu铆 (no parece necesario aqu铆)
5
  import { initRecorder } from './recordingModule.js';
6
  import { analyzeMedical } from './analysisModule.js';
7
  import { copyText } from './clipboardModule.js';
8
  import { analyzeLabResults, displayLabResults } from './labAnalysisModule.js';
9
  // --- FIN: Importaciones de M贸dulos ---
10
 
11
+ console.log("[Main] Script main.js cargado. Esperando DOMContentLoaded...");
12
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
13
  window.addEventListener('DOMContentLoaded', () => {
14
  console.log("[Main] Evento DOMContentLoaded detectado. Iniciando configuraci贸n...");
15
 
 
39
  console.log("[Main] Selecci贸n de elementos del DOM finalizada.");
40
  // --- FIN: Selecci贸n de Elementos DOM + VALIDACI脫N ---
41
 
42
+ // --- INICIO: Bloques de L贸gica ---
43
  try {
44
+ // --- INICIO: Funci贸n para Actualizar Etiquetas de Modelo ---
45
+ // !! MOVIDA OTRA VEZ DENTRO de DOMContentLoaded !!
46
+ function updateModelLabels() {
47
+ console.log("[Main] Ejecutando updateModelLabels (definida DENTRO)...");
48
+ const cfg = getIaConfig();
49
+ const transProvider = cfg?.transcription?.provider;
50
+ const transModel = cfg?.transcription?.models?.[transProvider] || 'N/A';
51
+ const llmProvider = cfg?.llm?.provider;
52
+ const llmModel = cfg?.llm?.model || 'N/A';
53
+
54
+ const transLabel = document.getElementById('trans-model-label');
55
+ if (transLabel) transLabel.textContent = transModel ? `(${transModel})` : '';
56
+ const analysisLabel = document.getElementById('analysis-model-label');
57
+ if (analysisLabel) analysisLabel.textContent = llmModel ? `(${llmModel})` : '';
58
+ const labLabel = document.getElementById('lab-model-label');
59
+ if (labLabel) labLabel.textContent = llmModel ? `(${llmModel})` : '';
60
+ console.log("[Main] updateModelLabels (definida DENTRO) finalizado.");
61
+ }
62
+ updateModelLabels(); // Llamada inicial
63
+ document.addEventListener('iaConfigChanged', updateModelLabels); // Listener para cambios
64
+ // --- FIN: Funci贸n para Actualizar Etiquetas de Modelo ---
65
+ } catch(e) { console.error("Error en setup de etiquetas de modelo:", e); }
66
 
67
  try {
68
+ // --- INICIO: L贸gica Modal Configuraci贸n ---
69
+ renderIaConfigForm('iaConfigContainer'); // ID como string
70
  if(btnConfig) { btnConfig.addEventListener('click', () => { renderIaConfigForm('iaConfigContainer'); if (modal) modal.classList.add('active'); }); }
71
  if(modal) { modal.addEventListener('mousedown', e => { if (e.target === modal) modal.classList.remove('active'); }); }
72
+ // --- FIN: L贸gica Modal Configuraci贸n ---
73
  } catch(e) { console.error("Error en setup del Modal Configuraci贸n:", e); }
74
 
75
  try {
76
+ // --- INICIO: L贸gica Pesta帽a An谩lisis M茅dico ---
77
+ document.addEventListener('transcriptionReady', async e => { /* ... */ }); // C贸digo interno sin cambios
78
+
79
+ // --- INICIO: getTranscriptionProviderUrl con LOGS ---
80
+ function getTranscriptionProviderUrl() {
81
+ console.log("[Main] Ejecutando getTranscriptionProviderUrl...");
82
+ const cfg = getIaConfig();
83
+ console.log("[Main] Configuraci贸n obtenida:", cfg); // LOG Configuraci贸n
84
+ const providerValue = cfg?.transcription?.provider;
85
+ console.log(`[Main] Proveedor de transcripci贸n en config: ${providerValue}`); // LOG Proveedor
86
+
87
+ if (providerValue) {
88
+ // Log para ver la lista de proveedores importada
89
+ console.log("[Main] Lista de proveedores de transcripci贸n (importada):", transcriptionProviders);
90
+ const prov = transcriptionProviders.find(p => p.value === providerValue);
91
+ console.log(`[Main] Proveedor encontrado en la lista:`, prov); // LOG Proveedor encontrado
92
+ if (prov?.url) {
93
+ console.log(`[Main] URL encontrada para ${providerValue}: ${prov.url}`); // LOG URL encontrada
94
+ return prov.url; // Retorna URL
95
+ } else {
96
+ console.warn(`[Main] URL no encontrada para el proveedor '${providerValue}' en la lista.`);
97
+ }
98
+ } else {
99
+ console.warn('[Main] No se encontr贸 providerValue en cfg.transcription.provider.');
100
+ }
101
+ console.error('[Main] Fallo al obtener URL del proveedor de transcripci贸n. Retornando vac铆o.'); // LOG Error final
102
+ return ''; // Retorna vac铆o si falla
103
+ }
104
+ // --- FIN: getTranscriptionProviderUrl con LOGS ---
105
+
106
+ if (btnStart && btnStop && transcriptEl && typeof initRecorder === 'function') {
107
+ initRecorder({ btnStart, btnStop, transcriptEl, getProvider: getTranscriptionProviderUrl });
108
+ } else { console.error("Faltan elementos/funci贸n para initRecorder"); }
109
+ if (btnCopyTranscript) { btnCopyTranscript.addEventListener('click', async () => { /* ... */ }); } // C贸digo interno sin cambios
110
+ if (btnCopyAnalysis) { btnCopyAnalysis.addEventListener('click', async () => { /* ... */ }); } // C贸digo interno sin cambios
111
+ // --- FIN: L贸gica Pesta帽a An谩lisis M茅dico ---
112
  } catch(e) { console.error("Error en setup Pesta帽a An谩lisis M茅dico:", e); }
113
 
114
  try {
115
+ // --- INICIO: L贸gica de Cambio de Pesta帽as ---
116
+ function switchTab(clickedTab) { const tId=clickedTab.dataset.contentId; const tC=document.getElementById(tId); if(tC&&!tC.classList.contains('active')){ allTabButtons.forEach(b => { const aC=b.dataset.activeClasses.split(' '); const iC=b.dataset.inactiveClasses.split(' '); b.classList.remove(...aC.filter(c=>c)); b.classList.add(...iC.filter(c=>c)); }); allTabContents.forEach(c=>{c.classList.remove('active');}); const aCadd=clickedTab.dataset.activeClasses.split(' '); const iCrem=clickedTab.dataset.inactiveClasses.split(' '); clickedTab.classList.remove(...iCrem.filter(c=>c)); clickedTab.classList.add(...aCadd.filter(c=>c)); tC.classList.add('active'); console.log(`Pesta帽a: ${tId}`); } }
117
  if(allTabButtons.length>0){ allTabButtons.forEach(b=>{b.addEventListener('click',(e)=>{switchTab(e.currentTarget);});}); } else { console.error("No se pueden a帽adir listeners tabs."); }
118
+ // --- FIN: L贸gica de Cambio de Pesta帽as ---
119
  } catch(e) { console.error("Error en setup Cambio de Pesta帽as:", e); }
120
 
121
  try {
122
+ // --- INICIO: Listener para Limpiar UI al Iniciar Grabaci贸n ---
123
+ document.addEventListener('newRecordingStarted', () => { console.log('[Main] Evento newRec recibido. Limpiando...'); if(outputEnfermedadEl) outputEnfermedadEl.textContent=''; if(outputExploracionEl) outputExploracionEl.textContent=''; if(labInputText) labInputText.value=''; if(labResultsOutput) labResultsOutput.innerHTML=''; lastLabResultText=''; console.log('[Main] Limpieza UI completada.'); });
124
+ // --- FIN: Listener para Limpiar UI al Iniciar Grabaci贸n ---
125
  } catch(e) { console.error("Error a帽adiendo listener Limpiar UI:", e); }
126
 
127
  try {
128
+ // --- INICIO: L贸gica Pesta帽a An谩lisis de Ex谩menes ---
129
  if (btnAnalyzeLabs && labInputText && labLoadingIndicator && filterAlteredLabsCheckbox && labResultsOutput) {
130
  btnAnalyzeLabs.addEventListener('click', async () => {
131
  const inputText = labInputText.value; if (!inputText.trim()) { alert("Pega resultados."); return; }
132
  labLoadingIndicator.style.display = 'flex'; btnAnalyzeLabs.disabled = true; filterAlteredLabsCheckbox.disabled = true; labResultsOutput.innerHTML = ''; lastLabResultText = '';
133
  try {
134
  const resultText = await analyzeLabResults(inputText);
135
+ console.log("RAW AI RESPONSE:", resultText); lastLabResultText = resultText;
 
136
  const filterIsActive = filterAlteredLabsCheckbox.checked;
137
  displayLabResults(resultText, labResultsOutput, filterIsActive);
138
+ // Llamada a la funci贸n (ahora definida dentro de DOMContentLoaded)
139
+ updateModelLabels();
140
+ } catch (error) { console.error("Error DENTRO listener btnAnalyzeLabs:", error); if(labResultsOutput) labResultsOutput.innerHTML = `<p class="text-red-600">Error: ${error.message}</p>`; alert(`Error al analizar: ${error.message}`); }
141
+ finally { labLoadingIndicator.style.display = 'none'; btnAnalyzeLabs.disabled = false; filterAlteredLabsCheckbox.disabled = false; }
 
 
 
 
 
 
 
142
  });
143
+ filterAlteredLabsCheckbox.addEventListener('change', () => { if (!lastLabResultText || !labResultsOutput) return; const filterIsActive = filterAlteredLabsCheckbox.checked; displayLabResults(lastLabResultText, labResultsOutput, filterIsActive); });
 
144
  } else { console.error("Faltan elementos para setup Pesta帽a An谩lisis Ex谩menes"); }
145
+ if (btnCopyLabResults && labResultsOutput) { btnCopyLabResults.addEventListener('click', async () => { /* ... */ }); } // C贸digo interno sin cambios
 
146
  else { console.error("Faltan elementos para bot贸n Copiar Lab"); }
147
+ // --- FIN: L贸gica Pesta帽a An谩lisis de Ex谩menes ---
148
  } catch(e) { console.error("Error en setup Pesta帽a An谩lisis Ex谩menes:", e); }
149
 
150
  console.log("[Main] Configuraci贸n de listeners finalizada.");