Spaces:
Sleeping
Sleeping
File size: 4,306 Bytes
c3b4e7b |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 |
import datetime
import streamlit as st
from util import getYamlConfig
company_code = "afp_"
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"][st.session_state["company_code"]]:
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.")
st.session_state["company_code"] = company_code
company_config = None
# Charge la configuration YAML
config = getYamlConfig()
for company in config['companies']:
if company['code'] == st.session_state["company_code"]:
company_config = company
# Vérifie si la structure inclut des 'parts' ou une liste de variables
if 'parts' in company_config['variables']:
# Cas avec 'parts' : Trie les parts et affiche les champs par onglet
parts = company_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"][st.session_state["company_code"]]:
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"][st.session_state["company_code"]]:
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=datetime.date.fromisoformat("2011-09-20"),
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() |