Created
April 29, 2021 21:34
-
-
Save mihirsamdarshi/4650e8041954e3fb5e629e71beaf40c3 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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