feat: add informational text to form page indicating optional criteria
c709917
raw
history blame
3.91 kB
import streamlit as st
from util import getYamlConfig
def update_session_state(key,):
# Get new value from session state and change key for save it in params
new_value = st.session_state[key]
key = key[5:]
for item in st.session_state.data_dict:
if item['key'] == key:
item['value'] = new_value
break
def page():
st.subheader("Définissez vos paramètres")
st.text("L'ensemble des critères sont facultatifs.")
# Charge la configuration YAML
config = getYamlConfig()
# Vérifie si la structure inclut des 'parts' ou une liste de variables
if 'parts' in config['variables']:
# Cas avec 'parts' : Trie les parts et affiche les champs par onglet
parts = config["variables"]["parts"]
parts_sorted = sorted(parts, key=lambda part: part.get('number', float('inf')))
# Création de tabs pour chaque 'part' trié
tabs = st.tabs([part['name'] for part in parts_sorted])
for part, tab in zip(parts_sorted, tabs):
with tab:
for field in part['fields']:
for field_session in st.session_state.data_dict:
if field['key'] == field_session['key']:
display_field(field_session)
else:
# Display fields directly if no parts are defined
for field in st.session_state.data_dict:
display_field(field)
def display_field(field):
"""Helper function to create the correct input based on field 'nature'."""
key = 'form_' + field['key']
if field['nature'] == 'radio':
st.radio(
field['label'],
field['options'],
index=field['options'].index(field.get('value')) if field.get('value') in field['options'] else 0,
key=key,
on_change=update_session_state,
args=(key,)
)
elif field['nature'] == 'selectbox':
st.selectbox(
field['label'],
field['options'],
index=field['options'].index(field.get('value')) if field.get('value', []) in field['options'] else 0,
key=key,
on_change=update_session_state,
args=(key,)
)
elif field['nature'] == 'multiselect':
default_values = field.get('value', [])
st.multiselect(
field['label'],
field['options'],
default=default_values if default_values else None,
key=key,
on_change=update_session_state,
args=(key,)
)
elif field['nature'] == 'date':
st.date_input(
field['label'],
value=field.get('value', None),
key=key,
on_change=update_session_state,
args=(key,)
)
elif field['nature'] == 'numeric':
st.number_input(field['label'],
value=field.get('value', 0),
key=key,
on_change=update_session_state,
args=(key,)
)
elif field['nature'] == 'text_area':
st.text_area(field['label'],
value=field.get('value', ""),
key=key,
on_change=update_session_state,
args=(key,)
)
elif field['nature'] == 'slider':
st.slider(field['label'],
value=field.get('value', [0, 1000]),
min_value=field.get('min', 0), # Valeur minimale du slider
max_value=field.get('max', 5000), # Valeur maximale du slider
step=field.get('step', 500),
key=key,
on_change=update_session_state,
args=(key,)
)
else:
st.text_input(label=field['label'],
value=field.get('value', ""),
key=key,
on_change=update_session_state,
args=(key,)
)
page()