AIdeaText commited on
Commit
9f4c5f9
verified
1 Parent(s): 1308422

Update modules/ui/ui.py

Browse files
Files changed (1) hide show
  1. modules/ui/ui.py +136 -125
modules/ui/ui.py CHANGED
@@ -366,10 +366,40 @@ def display_videos_and_info(lang_code, t):
366
 
367
  #Despu茅s de iniciar sesi贸n
368
  ####################################
 
369
 
370
  def user_page(lang_code, t):
371
  logger.info(f"Entrando en user_page para el estudiante: {st.session_state.username}")
372
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
373
  # Inicializar el tab seleccionado si no existe
374
  if 'selected_tab' not in st.session_state:
375
  st.session_state.selected_tab = 0
@@ -391,9 +421,12 @@ def user_page(lang_code, t):
391
 
392
  logger.info(f"Idioma actual: {st.session_state.lang_code}")
393
  logger.info(f"Modelos NLP cargados: {'nlp_models' in st.session_state}")
 
 
 
394
 
395
  # Configuraci贸n de idiomas disponibles
396
- languages = {'Espa帽ol': 'es', 'English': 'en', 'Fran莽ais': 'fr'}
397
 
398
  # Estilos CSS personalizados
399
  st.markdown("""
@@ -417,11 +450,11 @@ def user_page(lang_code, t):
417
  with st.container():
418
  col1, col2, col3 = st.columns([2, 2, 1])
419
  with col1:
420
- st.markdown(f"<h3 style='margin-bottom: 0; padding-top: 10px;'>{t['welcome']}, {st.session_state.username}</h3>",
421
  unsafe_allow_html=True)
422
  with col2:
423
  selected_lang = st.selectbox(
424
- t['select_language'],
425
  list(languages.keys()),
426
  index=list(languages.values()).index(st.session_state.lang_code),
427
  key=f"language_selector_{st.session_state.username}_{st.session_state.lang_code}"
@@ -429,9 +462,10 @@ def user_page(lang_code, t):
429
  new_lang_code = languages[selected_lang]
430
  if st.session_state.lang_code != new_lang_code:
431
  st.session_state.lang_code = new_lang_code
 
432
  st.rerun()
433
  with col3:
434
- if st.button(t['logout'],
435
  key=f"logout_button_{st.session_state.username}_{st.session_state.lang_code}"):
436
  st.session_state.clear()
437
  st.rerun()
@@ -439,7 +473,7 @@ def user_page(lang_code, t):
439
  st.markdown("---")
440
 
441
  # Asegurarse de que tenemos las traducciones del chatbot
442
- chatbot_t = t.get('CHATBOT_TRANSLATIONS', {}).get(lang_code, {})
443
 
444
  # Mostrar chatbot en sidebar
445
  display_sidebar_chat(lang_code, chatbot_t)
@@ -459,131 +493,106 @@ def user_page(lang_code, t):
459
 
460
  # Sistema de tabs
461
  tab_names = [
462
- t.get('current_situation_tab', "Mi Situaci贸n Actual"),
463
- t.get('morpho_tab', 'An谩lisis Morfosint谩ctico'),
464
- t.get('semantic_live_tab', 'An谩lisis Sem谩ntico Vivo'),
465
- t.get('semantic_tab', 'An谩lisis Sem谩ntico'),
466
- t.get('discourse_live_tab', 'An谩lisis de Discurso Vivo'),
467
- t.get('discourse_tab', 'An谩lsis de Discurso'),
468
- t.get('activities_tab', 'Mis Actividades'),
469
- t.get('feedback_tab', 'Formulario de Comentarios')
470
  ]
471
 
 
 
 
 
472
  tabs = st.tabs(tab_names)
473
 
474
- # Manejar el contenido de cada tab
475
- for index, tab in enumerate(tabs):
476
- with tab:
477
- try:
478
- # Actualizar el tab seleccionado solo si no hay un an谩lisis activo
479
- if tab.selected and st.session_state.selected_tab != index:
480
- can_switch = True
481
- for state_key in st.session_state.tab_states.keys():
482
- if st.session_state.tab_states[state_key] and index != get_tab_index(state_key):
483
- can_switch = False
484
- break
485
- if can_switch:
486
- st.session_state.selected_tab = index
487
-
488
- if index == 0: # Situaci贸n actual
489
- st.session_state.tab_states['current_situation_active'] = True
490
- display_current_situation_interface(
491
- st.session_state.lang_code,
492
- st.session_state.nlp_models,
493
- t # Pasamos todo el diccionario de traducciones
494
- )
495
-
496
- elif index == 1: # Morfosint谩ctico
497
- st.session_state.tab_states['morpho_active'] = True
498
- display_morphosyntax_interface(
499
- st.session_state.lang_code,
500
- st.session_state.nlp_models,
501
- t # Pasamos todo el diccionario de traducciones
502
- )
503
-
504
- elif index == 2: # Sem谩ntico Vivo
505
- st.session_state.tab_states['semantic_live_active'] = True
506
- display_semantic_live_interface(
507
- st.session_state.lang_code,
508
- st.session_state.nlp_models,
509
- t # Pasamos todo el diccionario de traducciones
510
- )
511
-
512
- elif index == 3: # Sem谩ntico
513
- st.session_state.tab_states['semantic_active'] = True
514
- display_semantic_interface(
515
- st.session_state.lang_code,
516
- st.session_state.nlp_models,
517
- t # Pasamos todo el diccionario de traducciones
518
- )
519
-
520
- elif index == 4: # Discurso Vivo
521
- st.session_state.tab_states['discourse_live_active'] = True
522
- display_discourse_live_interface(
523
- st.session_state.lang_code,
524
- st.session_state.nlp_models,
525
- t # Pasamos todo el diccionario de traducciones
526
- )
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
527
 
528
- elif index == 5: # Discurso
529
- st.session_state.tab_states['discourse_active'] = True
530
- display_discourse_interface(
531
- st.session_state.lang_code,
532
- st.session_state.nlp_models,
533
- t # Pasamos todo el diccionario de traducciones
534
- )
535
-
536
- elif index == 6: # Actividades
537
- st.session_state.tab_states['activities_active'] = True
538
- display_student_activities(
539
- username=st.session_state.username,
540
- lang_code=st.session_state.lang_code,
541
- t=t # Pasamos todo el diccionario de traducciones
542
- )
543
-
544
- elif index == 7: # Feedback
545
- st.session_state.tab_states['feedback_active'] = True
546
- display_feedback_form(
547
- st.session_state.lang_code,
548
- t # Ya estaba recibiendo el diccionario completo
549
- )
550
-
551
- except Exception as e:
552
- # Desactivar el estado en caso de error
553
- state_key = get_state_key_for_index(index)
554
- if state_key:
555
- st.session_state.tab_states[state_key] = False
556
- logger.error(f"Error en tab {index}: {str(e)}")
557
- st.error(t.get('tab_error', 'Error al cargar esta secci贸n'))
558
-
559
- # Funciones auxiliares para manejar los estados de los tabs
560
- def get_tab_index(state_key):
561
- """Obtiene el 铆ndice del tab basado en la clave de estado"""
562
- index_map = {
563
- 'current_situation_active': 0,
564
- 'morpho_active': 1,
565
- 'semantic_live_active': 2,
566
- 'semantic_active': 3,
567
- 'discourse_live_active': 4,
568
- 'discourse_active': 5,
569
- 'activities_active': 6,
570
- 'feedback_active': 7
571
- }
572
- return index_map.get(state_key, -1)
573
-
574
- def get_state_key_for_index(index):
575
- """Obtiene la clave de estado basada en el 铆ndice del tab"""
576
- state_map = {
577
- 0: 'current_situation_active',
578
- 1: 'morpho_active',
579
- 2: 'semantic_live_active',
580
- 3: 'semantic_active',
581
- 4: 'discourse_live_active',
582
- 5: 'discourse_active',
583
- 6: 'activities_active',
584
- 7: 'feedback_active'
585
- }
586
- return state_map.get(index)
587
 
588
  # Panel de depuraci贸n (solo visible en desarrollo)
589
  if st.session_state.get('debug_mode', False):
@@ -594,7 +603,9 @@ def get_state_key_for_index(index):
594
  st.write(f"Idioma: {st.session_state.lang_code}")
595
  st.write(f"Tab seleccionado: {st.session_state.selected_tab}")
596
  st.write(f"脷ltima actualizaci贸n de datos: {st.session_state.get('last_data_fetch', 'Nunca')}")
 
597
 
 
598
  ########################################################################
599
  def display_feedback_form(lang_code, t):
600
  logging.info(f"display_feedback_form called with lang_code: {lang_code}")
 
366
 
367
  #Despu茅s de iniciar sesi贸n
368
  ####################################
369
+ ####################################
370
 
371
  def user_page(lang_code, t):
372
  logger.info(f"Entrando en user_page para el estudiante: {st.session_state.username}")
373
 
374
+ # Funciones auxiliares para manejar los estados de los tabs (movidas al inicio)
375
+ def get_tab_index(state_key):
376
+ """Obtiene el 铆ndice del tab basado en la clave de estado"""
377
+ index_map = {
378
+ 'current_situation_active': 0,
379
+ 'morpho_active': 1,
380
+ 'semantic_live_active': 2,
381
+ 'semantic_active': 3,
382
+ 'discourse_live_active': 4,
383
+ 'discourse_active': 5,
384
+ 'activities_active': 6,
385
+ 'feedback_active': 7
386
+ }
387
+ return index_map.get(state_key, -1)
388
+
389
+ def get_state_key_for_index(index):
390
+ """Obtiene la clave de estado basada en el 铆ndice del tab"""
391
+ state_map = {
392
+ 0: 'current_situation_active',
393
+ 1: 'morpho_active',
394
+ 2: 'semantic_live_active',
395
+ 3: 'semantic_active',
396
+ 4: 'discourse_live_active',
397
+ 5: 'discourse_active',
398
+ 6: 'activities_active',
399
+ 7: 'feedback_active'
400
+ }
401
+ return state_map.get(index)
402
+
403
  # Inicializar el tab seleccionado si no existe
404
  if 'selected_tab' not in st.session_state:
405
  st.session_state.selected_tab = 0
 
421
 
422
  logger.info(f"Idioma actual: {st.session_state.lang_code}")
423
  logger.info(f"Modelos NLP cargados: {'nlp_models' in st.session_state}")
424
+
425
+ # Registra las traducciones disponibles para depuraci贸n
426
+ logger.info(f"Claves de traducci贸n disponibles: {list(t.keys())}")
427
 
428
  # Configuraci贸n de idiomas disponibles
429
+ languages = {'Espa帽ol': 'es', 'Portugu锚s': 'pt', 'Fran莽ais': 'fr', 'English': 'en'}
430
 
431
  # Estilos CSS personalizados
432
  st.markdown("""
 
450
  with st.container():
451
  col1, col2, col3 = st.columns([2, 2, 1])
452
  with col1:
453
+ st.markdown(f"<h3 style='margin-bottom: 0; padding-top: 10px;'>{t.get('welcome', 'Bienvenido')}, {st.session_state.username}</h3>",
454
  unsafe_allow_html=True)
455
  with col2:
456
  selected_lang = st.selectbox(
457
+ t.get('select_language', 'Seleccionar idioma'),
458
  list(languages.keys()),
459
  index=list(languages.values()).index(st.session_state.lang_code),
460
  key=f"language_selector_{st.session_state.username}_{st.session_state.lang_code}"
 
462
  new_lang_code = languages[selected_lang]
463
  if st.session_state.lang_code != new_lang_code:
464
  st.session_state.lang_code = new_lang_code
465
+ logger.info(f"Cambiando idioma de {st.session_state.lang_code} a {new_lang_code}")
466
  st.rerun()
467
  with col3:
468
+ if st.button(t.get('logout', 'Cerrar sesi贸n'),
469
  key=f"logout_button_{st.session_state.username}_{st.session_state.lang_code}"):
470
  st.session_state.clear()
471
  st.rerun()
 
473
  st.markdown("---")
474
 
475
  # Asegurarse de que tenemos las traducciones del chatbot
476
+ chatbot_t = t.get('CHATBOT_TRANSLATIONS', {})
477
 
478
  # Mostrar chatbot en sidebar
479
  display_sidebar_chat(lang_code, chatbot_t)
 
493
 
494
  # Sistema de tabs
495
  tab_names = [
496
+ t.get('TABS', {}).get('current_situation_tab', "Mi Situaci贸n Actual"),
497
+ t.get('TABS', {}).get('morpho_tab', 'An谩lisis Morfosint谩ctico'),
498
+ t.get('TABS', {}).get('semantic_live_tab', 'An谩lisis Sem谩ntico Vivo'),
499
+ t.get('TABS', {}).get('semantic_tab', 'An谩lisis Sem谩ntico'),
500
+ t.get('TABS', {}).get('discourse_live_tab', 'An谩lisis de Discurso Vivo'),
501
+ t.get('TABS', {}).get('discourse_tab', 'An谩lsis de Discurso'),
502
+ t.get('TABS', {}).get('activities_tab', 'Mis Actividades'),
503
+ t.get('TABS', {}).get('feedback_tab', 'Formulario de Comentarios')
504
  ]
505
 
506
+ # Log para depuraci贸n de traducciones de tabs
507
+ logger.info(f"Tab names for {lang_code}: {tab_names}")
508
+
509
+ # Crear tabs
510
  tabs = st.tabs(tab_names)
511
 
512
+ # Manejar el contenido de cada tab
513
+ for index, tab in enumerate(tabs):
514
+ with tab:
515
+ try:
516
+ # Actualizar el tab seleccionado solo si no hay un an谩lisis activo
517
+ if tab.selected and st.session_state.selected_tab != index:
518
+ can_switch = True
519
+ for state_key in st.session_state.tab_states.keys():
520
+ if st.session_state.tab_states[state_key] and index != get_tab_index(state_key):
521
+ can_switch = False
522
+ break
523
+ if can_switch:
524
+ st.session_state.selected_tab = index
525
+
526
+ if index == 0: # Situaci贸n actual
527
+ st.session_state.tab_states['current_situation_active'] = True
528
+ display_current_situation_interface(
529
+ lang_code=st.session_state.lang_code,
530
+ nlp_models=st.session_state.nlp_models,
531
+ current_situation_t=t.get('CURRENT_SITUATION', {})
532
+ )
533
+
534
+ elif index == 1: # Morfosint谩ctico
535
+ st.session_state.tab_states['morpho_active'] = True
536
+ display_morphosyntax_interface(
537
+ lang_code=st.session_state.lang_code,
538
+ nlp_models=st.session_state.nlp_models,
539
+ morpho_t=t.get('MORPHOSYNTACTIC', {})
540
+ )
541
+
542
+ elif index == 2: # Sem谩ntico Vivo
543
+ st.session_state.tab_states['semantic_live_active'] = True
544
+ display_semantic_live_interface(
545
+ lang_code=st.session_state.lang_code,
546
+ nlp_models=st.session_state.nlp_models,
547
+ semantic_t=t.get('SEMANTIC', {})
548
+ )
549
+
550
+ elif index == 3: # Sem谩ntico
551
+ st.session_state.tab_states['semantic_active'] = True
552
+ display_semantic_interface(
553
+ lang_code=st.session_state.lang_code,
554
+ nlp_models=st.session_state.nlp_models,
555
+ semantic_t=t.get('SEMANTIC', {})
556
+ )
557
+
558
+ elif index == 4: # Discurso Vivo
559
+ st.session_state.tab_states['discourse_live_active'] = True
560
+ display_discourse_live_interface(
561
+ lang_code=st.session_state.lang_code,
562
+ nlp_models=st.session_state.nlp_models,
563
+ discourse_t=t.get('DISCOURSE', {})
564
+ )
565
+
566
+ elif index == 5: # Discurso
567
+ st.session_state.tab_states['discourse_active'] = True
568
+ display_discourse_interface(
569
+ lang_code=st.session_state.lang_code,
570
+ nlp_models=st.session_state.nlp_models,
571
+ discourse_t=t.get('DISCOURSE', {})
572
+ )
573
+
574
+ elif index == 6: # Actividades
575
+ st.session_state.tab_states['activities_active'] = True
576
+ display_student_activities(
577
+ username=st.session_state.username,
578
+ lang_code=st.session_state.lang_code,
579
+ t=t.get('ACTIVITIES', {})
580
+ )
581
+
582
+ elif index == 7: # Feedback
583
+ st.session_state.tab_states['feedback_active'] = True
584
+ display_feedback_form(
585
+ lang_code=st.session_state.lang_code,
586
+ t=t.get('FEEDBACK', {})
587
+ )
588
 
589
+ except Exception as e:
590
+ # Desactivar el estado en caso de error
591
+ state_key = get_state_key_for_index(index)
592
+ if state_key:
593
+ st.session_state.tab_states[state_key] = False
594
+ logger.error(f"Error en tab {index}: {str(e)}")
595
+ st.error(t.get('tab_error', 'Error al cargar esta secci贸n'))
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
596
 
597
  # Panel de depuraci贸n (solo visible en desarrollo)
598
  if st.session_state.get('debug_mode', False):
 
603
  st.write(f"Idioma: {st.session_state.lang_code}")
604
  st.write(f"Tab seleccionado: {st.session_state.selected_tab}")
605
  st.write(f"脷ltima actualizaci贸n de datos: {st.session_state.get('last_data_fetch', 'Nunca')}")
606
+ st.write(f"Traducciones disponibles: {list(t.keys())}")
607
 
608
+ ########################################################################
609
  ########################################################################
610
  def display_feedback_form(lang_code, t):
611
  logging.info(f"display_feedback_form called with lang_code: {lang_code}")