Navigation Menu

Skip to content

Instantly share code, notes, and snippets.

@mihirsamdarshi
Created April 29, 2021 21:34
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save mihirsamdarshi/4650e8041954e3fb5e629e71beaf40c3 to your computer and use it in GitHub Desktop.
Save mihirsamdarshi/4650e8041954e3fb5e629e71beaf40c3 to your computer and use it in GitHub Desktop.
import streamlit as st
import SessionState
def display_options(session_state):
"""
Handles loading and editing of DataFrame
Parameters:
session_state (dict): Streamlit SessionState in order to maintain state of dictionary
Returns:
out_value = (str): str
"""
# load default database
out_value = 'bananas'
st.write("#### Choose a value from the list below:")
session_state.str_list = ['apples', 'oranges', 'grapes']
# create a container for str selection
selection_container = st.empty()
# display database selection
selected_db = selection_container.radio("", ['Default'] + session_state.str_list)
# create a message container
message_placeholder = st.empty()
# load selected str if not default
if selected_db != 'Default':
with st.spinner("Loading..."):
out_value = selected_db
message_placeholder.success('Loaded {} successfully'.format(selected_db))
edit_mode_placeholder = st.empty()
# edit mode button
edit_db_mode = edit_mode_placeholder.button('Edit list')
if edit_db_mode:
session_state.edit_mode = True
# enter edit mode
if session_state.edit_mode:
message_placeholder.empty()
edited_selected_str = selection_container.radio("You are editing the list. "
"Click the exit button twice to exit. "
"Ignore any \"Bad Message Format\" warnings that may pop up. ",
session_state.str_list)
# create a container for edit mode controls
edit_mode_controls = edit_mode_placeholder.beta_container()
edit_col1, edit_col2 = edit_mode_controls.beta_columns(2)
# exit edit mode controls
exit_edit_mode = edit_col2.button('Exit edit mode')
if exit_edit_mode:
session_state.edit_mode = False
# open delete confirmation dialog
delete_init = edit_col1.button('Delete selection')
if delete_init:
session_state.delete_init = True
# if begin delete, confirm before deleting
if session_state.delete_init:
# clear the container before doing stuff
edit_mode_placeholder.empty()
# create a new container in the previous one's place
delete_mode_controls = edit_mode_placeholder.beta_container()
# create confirmations
delete_mode_controls.warning('Are you sure you want to delete the selected database?')
col1, col2 = delete_mode_controls.beta_columns(2)
delete_reject = col2.button('No, go back')
if delete_reject:
session_state.delete_init = False
# if confirm delete, then delete str
delete_confirm = col1.button('Yes, delete it')
if delete_confirm:
edited_list = session_state.str_list
edited_list.remove(edited_selected_str)
session_state.str_list = edited_list
# clear the container before doing stuff
edit_mode_placeholder.empty()
# create a new container for delete controls
delete_container = edit_mode_placeholder.beta_container()
delete_container.success("Delete successful")
# show go back button with unique key
exit_edit_mode = delete_container.button('Go back', key='after-delete')
if exit_edit_mode:
session_state.delete_init = False
session_state.edit_mode = False
return out_value
def main():
st.title('Hello World')
session_state = SessionState.get(str_list=None, edit_mode=False, delete_init=False)
with st.sidebar.beta_expander('Options'):
display_options(session_state)
if __name__ == '__main__':
main()
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment