duongthienz commited on
Commit
6b12bd8
·
verified ·
1 Parent(s): 63845ed

Fix an issue where rename is not showing in role

Browse files
Files changed (1) hide show
  1. ui.py +41 -21
ui.py CHANGED
@@ -51,8 +51,18 @@ def render_chart(fig, tab, pdf_path, svg_path, pdf_name, svg_name, pdf_key, svg_
51
  # Sidebar — categories section
52
  # ---------------------------------------------------------------------------
53
 
54
- def render_role_sidebar(all_speaker_tokens):
55
- """Render cross-file role multiselects using speaker tokens, matching the rename sidebar pattern."""
 
 
 
 
 
 
 
 
 
 
56
  st.sidebar.subheader("Add Speaker's Role")
57
  st.sidebar.markdown(
58
  "<p style='font-size:0.85rem; color:gray; margin-bottom:2px;'>"
@@ -60,15 +70,15 @@ def render_role_sidebar(all_speaker_tokens):
60
  "by typing in the \"Add custom role\" textbox.</p>",
61
  unsafe_allow_html=True,
62
  )
63
- #st.sidebar.divider()
64
  st.sidebar.text(" ")
65
 
66
  for i, category in enumerate(st.session_state.categories):
67
  ms_key = f"multiselect_{category}"
68
- if ms_key not in st.session_state:
69
- st.session_state[ms_key] = list(st.session_state.categorySelect[i]) if i < len(st.session_state.categorySelect) else []
 
70
 
71
- # Build claimed set from widget keys (source of truth for what's displayed)
72
  all_claimed = {
73
  token
74
  for i, category in enumerate(st.session_state.categories)
@@ -84,15 +94,17 @@ def render_role_sidebar(all_speaker_tokens):
84
  on_click=removeCategory, args=(i,),
85
  help=f"Remove {category}",
86
  )
87
- this_role_tokens = set(st.session_state.get(ms_key, []))
88
  available_tokens = [
89
- t for t in all_speaker_tokens
90
- if t not in all_claimed or t in this_role_tokens
91
  ]
92
  st.sidebar.multiselect(
93
  category, available_tokens,
94
  default=list(st.session_state.get(ms_key, [])),
95
- key=ms_key, on_change=updateCategoryOptions,
 
 
96
  label_visibility="collapsed",
97
  )
98
  st.sidebar.text_input("Add custom role", key="categoryInput", on_change=addCategory)
@@ -102,8 +114,15 @@ def render_role_sidebar(all_speaker_tokens):
102
  # Sidebar — rename speakers section
103
  # ---------------------------------------------------------------------------
104
 
105
- def render_rename_sidebar(currFile, speakerNames, all_speaker_tokens):
106
- """Render the full Rename Multiple Speakers sidebar section."""
 
 
 
 
 
 
 
107
  st.sidebar.divider()
108
  st.sidebar.subheader("Rename Multiple Speakers")
109
  st.sidebar.markdown(
@@ -113,20 +132,19 @@ def render_rename_sidebar(currFile, speakerNames, all_speaker_tokens):
113
  unsafe_allow_html=True,
114
  )
115
 
116
- #st.sidebar.divider()
117
  st.sidebar.text(" ")
118
 
119
- # Build claimed set from the data model (entry["speakers"]) as canonical truth.
120
  all_claimed = {
121
- token
122
  for entry in st.session_state.globalRenames
123
  for token in entry["speakers"]
124
  }
125
 
126
  for idx, entry in enumerate(st.session_state.globalRenames):
127
  grkey = _global_rename_key(idx)
128
- if grkey not in st.session_state:
129
- st.session_state[grkey] = list(entry["speakers"])
130
  label_col, trash_col = st.sidebar.columns([5, 1])
131
  label_col.markdown(f"**{entry['name']}**")
132
  trash_col.button(
@@ -134,15 +152,17 @@ def render_rename_sidebar(currFile, speakerNames, all_speaker_tokens):
134
  on_click=removeGlobalRename, args=(idx,),
135
  help=f"Remove '{entry['name']}'",
136
  )
137
- this_entry_tokens = set(entry["speakers"])
138
  available_tokens = [
139
- t for t in all_speaker_tokens
140
- if t not in all_claimed or t in this_entry_tokens
141
  ]
142
  st.sidebar.multiselect(
143
  f"Speakers for {entry['name']}", options=available_tokens,
144
  default=list(st.session_state.get(grkey, [])),
145
- key=grkey, on_change=on_grename_change, args=(idx,),
 
 
146
  label_visibility="collapsed",
147
  )
148
 
 
51
  # Sidebar — categories section
52
  # ---------------------------------------------------------------------------
53
 
54
+ def render_role_sidebar(display_speaker_tokens, token_display_map):
55
+ """Render cross-file role multiselects.
56
+
57
+ display_speaker_tokens : list of display strings shown in the dropdown
58
+ e.g. ["file: John", "file: SPEAKER_01"]
59
+ token_display_map : dict {display_label -> raw_token}
60
+ e.g. {"file: John": "file: SPEAKER_00"}
61
+ The data model (categorySelect) always stores raw tokens; this function
62
+ converts between display labels and raw tokens at the boundary.
63
+ """
64
+ raw_to_display = {v: k for k, v in token_display_map.items()}
65
+
66
  st.sidebar.subheader("Add Speaker's Role")
67
  st.sidebar.markdown(
68
  "<p style='font-size:0.85rem; color:gray; margin-bottom:2px;'>"
 
70
  "by typing in the \"Add custom role\" textbox.</p>",
71
  unsafe_allow_html=True,
72
  )
 
73
  st.sidebar.text(" ")
74
 
75
  for i, category in enumerate(st.session_state.categories):
76
  ms_key = f"multiselect_{category}"
77
+ # Always sync widget key from data model, converting raw -> display
78
+ raw_vals = st.session_state.categorySelect[i] if i < len(st.session_state.categorySelect) else []
79
+ st.session_state[ms_key] = [raw_to_display.get(t, t) for t in raw_vals]
80
 
81
+ # Build claimed set (display labels) from widget keys
82
  all_claimed = {
83
  token
84
  for i, category in enumerate(st.session_state.categories)
 
94
  on_click=removeCategory, args=(i,),
95
  help=f"Remove {category}",
96
  )
97
+ this_role_display = set(st.session_state.get(ms_key, []))
98
  available_tokens = [
99
+ t for t in display_speaker_tokens
100
+ if t not in all_claimed or t in this_role_display
101
  ]
102
  st.sidebar.multiselect(
103
  category, available_tokens,
104
  default=list(st.session_state.get(ms_key, [])),
105
+ key=ms_key,
106
+ on_change=updateCategoryOptions,
107
+ args=(token_display_map,),
108
  label_visibility="collapsed",
109
  )
110
  st.sidebar.text_input("Add custom role", key="categoryInput", on_change=addCategory)
 
114
  # Sidebar — rename speakers section
115
  # ---------------------------------------------------------------------------
116
 
117
+ def render_rename_sidebar(currFile, speakerNames, display_speaker_tokens, token_display_map):
118
+ """Render the full Rename Multiple Speakers sidebar section.
119
+
120
+ display_speaker_tokens : list of display strings shown in the dropdown
121
+ token_display_map : dict {display_label -> raw_token}
122
+ The data model (entry["speakers"]) always stores raw tokens.
123
+ """
124
+ raw_to_display = {v: k for k, v in token_display_map.items()}
125
+
126
  st.sidebar.divider()
127
  st.sidebar.subheader("Rename Multiple Speakers")
128
  st.sidebar.markdown(
 
132
  unsafe_allow_html=True,
133
  )
134
 
 
135
  st.sidebar.text(" ")
136
 
137
+ # Build claimed set (display labels) from the data model
138
  all_claimed = {
139
+ raw_to_display.get(token, token)
140
  for entry in st.session_state.globalRenames
141
  for token in entry["speakers"]
142
  }
143
 
144
  for idx, entry in enumerate(st.session_state.globalRenames):
145
  grkey = _global_rename_key(idx)
146
+ # Always sync widget key from data model, converting raw -> display
147
+ st.session_state[grkey] = [raw_to_display.get(t, t) for t in entry["speakers"]]
148
  label_col, trash_col = st.sidebar.columns([5, 1])
149
  label_col.markdown(f"**{entry['name']}**")
150
  trash_col.button(
 
152
  on_click=removeGlobalRename, args=(idx,),
153
  help=f"Remove '{entry['name']}'",
154
  )
155
+ this_entry_display = set(st.session_state[grkey])
156
  available_tokens = [
157
+ t for t in display_speaker_tokens
158
+ if t not in all_claimed or t in this_entry_display
159
  ]
160
  st.sidebar.multiselect(
161
  f"Speakers for {entry['name']}", options=available_tokens,
162
  default=list(st.session_state.get(grkey, [])),
163
+ key=grkey,
164
+ on_change=on_grename_change,
165
+ args=(idx, token_display_map),
166
  label_visibility="collapsed",
167
  )
168