duongthienz commited on
Commit
92d351a
·
verified ·
1 Parent(s): c7d8777

final fix for the whole rename issue

Browse files
Files changed (1) hide show
  1. state.py +22 -7
state.py CHANGED
@@ -118,11 +118,25 @@ def updateCategoryOptions():
118
  for i, category in enumerate(st.session_state.categories):
119
  ms_key = f"multiselect_{category}"
120
  new_val = list(st.session_state.get(ms_key, []))
 
121
  st.session_state.categorySelect[i] = new_val
122
- # Re-assign (don't pop) so the widget renders the correct selection on
123
- # the next run. Popping causes Streamlit to fall back to [] because no
124
- # `default=` is provided, wiping the visible selection.
125
  st.session_state[ms_key] = new_val
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
126
  # Recompute unusedSpeakers for all files
127
  all_assigned_tokens = {
128
  token
@@ -251,10 +265,11 @@ def on_grename_change(idx):
251
  for t in other_entry["speakers"]
252
  }
253
 
254
- # Spurious-empty guard: if the widget reports [] but the data model has
255
- # tokens and every one of them is still a valid (unclaimed) option, this is
256
- # a Streamlit re-fire artefact restore the key and do nothing.
257
- if not reported and prev:
 
258
  all_still_valid = all(t not in other_claimed for t in prev)
259
  if all_still_valid:
260
  st.session_state[grkey] = prev
 
118
  for i, category in enumerate(st.session_state.categories):
119
  ms_key = f"multiselect_{category}"
120
  new_val = list(st.session_state.get(ms_key, []))
121
+ prev_val = list(st.session_state.categorySelect[i]) if i < len(st.session_state.categorySelect) else []
122
  st.session_state.categorySelect[i] = new_val
 
 
 
123
  st.session_state[ms_key] = new_val
124
+
125
+ # Tokens newly added to this role → write the role name into speakerRenames
126
+ added = set(new_val) - set(prev_val)
127
+ removed = set(prev_val) - set(new_val)
128
+ for token in added:
129
+ _write_rename(token, category)
130
+ # Tokens removed from this role → revert their display name, but only if
131
+ # it was still set to this role's name (don't clobber a rename sidebar name)
132
+ for token in removed:
133
+ if ": " not in token:
134
+ continue
135
+ fname, raw_sp = token.split(": ", 1)
136
+ current = st.session_state.speakerRenames.get(fname, {}).get(raw_sp, "")
137
+ if current == category:
138
+ _write_rename(token, "")
139
+
140
  # Recompute unusedSpeakers for all files
141
  all_assigned_tokens = {
142
  token
 
265
  for t in other_entry["speakers"]
266
  }
267
 
268
+ # Spurious-empty guard: Streamlit sometimes re-fires this callback with []
269
+ # when available_tokens shrinks (e.g. another entry just claimed a token).
270
+ # Only treat it as spurious when prev had MORE than 1 token — if prev had
271
+ # exactly 1, the user may genuinely be deselecting it, so always let it through.
272
+ if not reported and len(prev) > 1:
273
  all_still_valid = all(t not in other_claimed for t in prev)
274
  if all_still_valid:
275
  st.session_state[grkey] = prev