import re import time import streamlit as st from streamlit_js_eval import streamlit_js_eval ss = st.session_state # Allows us to get a Streamlit cookie safely without added fuss: def get_cookie(key): if "cookies" in ss: if key in ss.cookies.keys(): value = ss.cookies[key] if value is None or len(value) < 1: del ss.cookies[key] return None return ss.cookies[key] cookies = st.context.cookies if "cookies" not in st.session_state: ss.cookies = {} if key in cookies.keys(): ss.cookies[key] = cookies[key] return cookies[key] return None # Set a cookie in-page using JavaScript without the "rerun" BS: def set_cookie(key, value): print(f"set_cookie({key}, {value}) called...") if value is None: value = "" javascript_string = f""" var cookies = parent.document.cookie; parent.document.cookie = `{key}={value};`; console.log(`parent.document.cookie = ${{parent.document.cookie}}`) """ streamlit_js_eval(js_expressions=javascript_string) time.sleep(1) def page_redirect(url=""): js = f""" var link = parent.document.createElement("a"); parent.document.body.appendChild(link); link.href = "{url}"; if (link.href === "") link.href = window.location.href; link.click(); """ streamlit_js_eval(js_expressions=js) def perform_redirect(pg_category, pg_name): if pg_category not in ss.PAGE_REGISTRY_MAP.keys(): return if pg_name not in ss.PAGE_REGISTRY_MAP[pg_category].keys(): return pg = ss.PAGE_REGISTRY_MAP[pg_category][pg_name] st.switch_page(pg) def handle_redirect(): if "redirect_page_category" in st.session_state: if "redirect_page_name" in st.session_state: pg_category = ss.redirect_page_category pg_name = ss.redirect_page_name del st.session_state.redirect_page_category del st.session_state.redirect_page_name perform_redirect(pg_category, pg_name) def redirect(pg_category, pg_name): print(f"Redirecting to page {pg_category} {pg_name}") st.session_state.redirect_page_category = pg_category st.session_state.redirect_page_name = pg_name st.rerun() def hide_deploy_button(): st.markdown(""" """, unsafe_allow_html=True) def shrink_sidebar(): js = """ setTimeout(function() { const sidebar = document.querySelector(".stSidebar"); sidebar.style.width = "244px"; }, 2500); """ streamlit_js_eval(js_expressions=js)