import streamlit as st from utils.allergens import * from utils.variables import * st.markdown( """ """, unsafe_allow_html=True ) def create_allergy_input(user_id): import streamlit as st #details_link = f"[Go to this user's event participation page {user_id}](?page=event%5Fparticipation&user_id={user_id})" #details_link = f"[Go to this user's event participation page {user_id}](?page=event%5Fparticipation)" #st.markdown(details_link, unsafe_allow_html=True) # Button to display the selected options #if st.button("Show Selections"): #for item in allergens: # Access the radio button and checkbox values using session_state #if st.session_state[f"{user_id}_{item}_radio"] != "None": # selected_sensitivity = st.session_state[f"{user_id}_{item}_radio"] # can_eat_if_cooked = st.session_state[f"{user_id}_{item}_checkbox"] # Display the selected options for each item #st.write(f"**{item.capitalize()}**") #st.write(f"Sensitivity Level: {selected_sensitivity}") #st.write(f"Can Eat If Cooked: {'Yes' if can_eat_if_cooked else 'No'}") with st.expander("Show Selections"): for i in user_list[user_id].keys(): if user_list[user_id][i][0] > 0: st.write(f"**{i}**") st.write(f"Sensitivity Level: {sensitivities[user_list[user_id][i][0]]}") st.write(f"Can Eat If Cooked: {'Yes' if user_list[user_id][i][1] else 'No'}") #st.write(f"Can Eat Traces: {'Yes' if user_list[user_id][i][2] else 'No'}") if st.button("Done"): st.switch_page(f"pages/user_{user_id}_event_participation.py") #st.write("Your allergies:") #for i in user_list[user_id].keys(): # if user_list[user_id][i][0] > 0: # st.write(f"{i}, allergy degree: {user_list[user_id][i][0]}, can eat if cooked: {user_list[user_id][i][1]}") # Text input for the search query query = st.text_input("Search for an allergy:") # Filter the list based on the search query if query: filtered_items = [allergen for allergen in allergens if query.lower() in allergen.lower()] else: filtered_items = allergens # Display the filtered list st.write("Results:") #Bara visa denna om query != ""? # Initialize session state to store titles and selections for each expander if f"{user_id}_expander_titles" not in st.session_state: st.session_state[f"{user_id}_expander_titles"] = {item: item.capitalize() for item in filtered_items} if "{user_id}_expander_selections" not in st.session_state: st.session_state[f"{user_id}_expander_selections"] = {} if "{user_id}_expanded_state" not in st.session_state: st.session_state[f"{user_id}_expanded_state"] = {item: True for item in filtered_items} # Keep all expanders open initially # Function to update expander title based on selection def update_title(item): selections = st.session_state.get(f"{user_id}_{item}_radio", "None") selection = "None" if selections == "Extremely sensitive - " + sensitivity_options["Extremely sensitive"]: selection = "Extremely sensitive❗❗" user_list[user_id][item] = (3, st.session_state[f"{user_id}_{item}_checkbox"]) elif selections == "Sensitive - " + sensitivity_options["Sensitive"]: selection = "Sensitive❗" user_list[user_id][item] = (2, st.session_state[f"{user_id}_{item}_checkbox"]) elif selections == "Slightly sensitive - " + sensitivity_options["Slightly sensitive"]: selection = "Slightly sensitive⚠️" user_list[user_id][item] = (1, st.session_state[f"{user_id}_{item}_checkbox"]) else: del user_list[user_id][item] if selection != "None": st.session_state[f"{user_id}_expander_titles"][item] = f"{item.capitalize()} - {selection}" else: st.session_state[f"{user_id}_expander_titles"][item] = item.capitalize() # Reset to default if "None" is selected """option = selection.split(" - ") selection = option[1]""" # Keep the expander open st.session_state[f"{user_id}_expanded_state"][item] = True def update_cook(item): current_level, current_cook = user_list[user_id][item] user_list[user_id][item] = (current_level, st.session_state[f"{user_id}_{item}_checkbox"]) #def update_traces(item): # current_level, current_cook, current_traces = user_list[user_id][item] # user_list[user_id][item] = (current_level, current_cook, st.session_state[f"{user_id}_{item}_traces"]) # Loop through each item for item in filtered_items: # Check if the item is in the user's allergen list # if item in user_allergen_list: # key=f"{item}_radio" title = st.session_state[f"{user_id}_expander_titles"][item] #selection = st.session_state.get(f"{user_id}_{item}_radio", "None") #st.write(selection) #selection = user_list[user_id][item][0] with st.expander(title): # Radio buttons for sensitivity level with a "None" option sensitivity = st.radio( f"Sensitivity level for {item.capitalize()}", options=["None"] + [f"{level} - {description}" for level, description in sensitivity_options.items()], key=f"{user_id}_{item}_radio", on_change=lambda item=item: update_title(item) # Call update_title with the item argument ) # Store the current selection in session_state for later access st.session_state[f"{user_id}_expander_selections"][item] = sensitivity # Checkbox to indicate if they can eat the ingredient if it's cooked can_eat_if_cooked = st.checkbox( "Can eat the ingredient if it is cooked", key=f"{user_id}_{item}_checkbox", on_change=lambda item=item: update_cook(item) ) # can_eat_traces = st.checkbox( # "Can eat traces of the ingredient", # key=f"{user_id}_{item}_traces", # on_change=lambda item=item: update_traces(item) #) """else: with st.expander(item.capitalize()): # Radio buttons for sensitivity level with a "None" option sensitivity = st.radio( f"Sensitivity level for {item.capitalize()}", options=["None"] + [f"{level} - {description}" for level, description in sensitivity_options.items()], key=f"{item}_radio" ) # Checkbox to indicate if they can eat the ingredient if it's cooked can_eat_if_cooked = st.checkbox( "Can eat the ingredient if it is cooked", key=f"{item}_checkbox" ) # If a sensitivity other than "None" is selected, mark the item for addition to the allergen list if sensitivity != "None": to_add.append(item)""" # Update user_allergen_list based on selections # user_allergen_list = [item for item in user_allergen_list if item not in to_remove] + to_add # Display updated allergen list # st.write("Updated allergen list:", to_remove)