File size: 3,420 Bytes
64f9ede
ce8e938
64f9ede
4223220
 
 
 
 
 
 
 
 
 
 
64f9ede
 
 
ce8e938
 
 
 
 
 
 
 
64f9ede
ce8e938
 
 
 
 
4223220
 
 
ce8e938
 
 
 
64f9ede
ce8e938
 
 
4223220
ce8e938
4223220
 
 
 
 
 
 
 
 
ce8e938
4223220
 
 
 
 
 
 
 
 
ce8e938
4223220
 
 
 
 
 
 
 
ce8e938
4223220
 
 
 
 
 
 
 
ce8e938
4223220
 
 
 
 
 
 
ce8e938
4223220
 
 
 
 
 
 
ce8e938
4223220
 
 
 
 
 
ce8e938
4223220
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
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")

    # 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':
        st.multiselect(
            field['label'], 
            field['options'], 
            default=[field['options'].index(value) for value in field.get('value') if value in field['options']], 
            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,)
        )

    else:
        st.text_input(label=field['label'], 
            value=field.get('value', ""), 
            key=key, 
            on_change=update_session_state,
            args=(key,)
        )

page()