Fix Current Path input reverting on directory change
The nav_path_input was force-overwritten on every rerun, causing Streamlit to discard user edits before the on_change callback could process them. Now only syncs on first load or external changes (favorites). Also resets loaded_file on dir change and reverts widget on invalid paths. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
9
app.py
9
app.py
@@ -47,8 +47,10 @@ with st.sidebar:
|
|||||||
st.header("📂 Navigator")
|
st.header("📂 Navigator")
|
||||||
|
|
||||||
# --- Path Navigator ---
|
# --- Path Navigator ---
|
||||||
# Always sync the widget value to current_dir BEFORE the widget renders
|
# Sync widget only when dir changed externally (favorites, first load)
|
||||||
|
if st.session_state.get("_sync_nav_path", True):
|
||||||
st.session_state.nav_path_input = str(st.session_state.current_dir)
|
st.session_state.nav_path_input = str(st.session_state.current_dir)
|
||||||
|
st.session_state._sync_nav_path = False
|
||||||
|
|
||||||
def _on_path_change():
|
def _on_path_change():
|
||||||
new_path = st.session_state.nav_path_input
|
new_path = st.session_state.nav_path_input
|
||||||
@@ -58,6 +60,10 @@ with st.sidebar:
|
|||||||
st.session_state.current_dir = p
|
st.session_state.current_dir = p
|
||||||
st.session_state.config['last_dir'] = str(p)
|
st.session_state.config['last_dir'] = str(p)
|
||||||
save_config(st.session_state.current_dir, st.session_state.config['favorites'])
|
save_config(st.session_state.current_dir, st.session_state.config['favorites'])
|
||||||
|
st.session_state.loaded_file = None
|
||||||
|
else:
|
||||||
|
# Revert to current dir on invalid path
|
||||||
|
st.session_state.nav_path_input = str(st.session_state.current_dir)
|
||||||
|
|
||||||
st.text_input("Current Path", key="nav_path_input", on_change=_on_path_change)
|
st.text_input("Current Path", key="nav_path_input", on_change=_on_path_change)
|
||||||
|
|
||||||
@@ -74,6 +80,7 @@ with st.sidebar:
|
|||||||
sel = st.session_state._fav_radio
|
sel = st.session_state._fav_radio
|
||||||
if sel != "Select..." and sel != str(st.session_state.current_dir):
|
if sel != "Select..." and sel != str(st.session_state.current_dir):
|
||||||
st.session_state.current_dir = Path(sel)
|
st.session_state.current_dir = Path(sel)
|
||||||
|
st.session_state._sync_nav_path = True
|
||||||
|
|
||||||
st.radio(
|
st.radio(
|
||||||
"Jump to:",
|
"Jump to:",
|
||||||
|
|||||||
Reference in New Issue
Block a user