File size: 4,239 Bytes
a62bbf7
fc85e7c
ce3810b
bbe71e4
 
3011029
b493bab
 
 
 
bbe71e4
 
 
 
 
a62bbf7
bbe71e4
ec819d9
3011029
59d7f29
bbe71e4
 
 
a62bbf7
b493bab
ce3810b
bbe71e4
a62bbf7
 
b493bab
ce3810b
bbe71e4
a62bbf7
 
b493bab
ce3810b
bbe71e4
a62bbf7
 
b493bab
ce3810b
bbe71e4
 
 
 
 
 
 
 
 
 
ec819d9
bbe71e4
 
 
 
 
 
 
 
 
 
 
 
 
 
 
ce3810b
 
bbe71e4
ce3810b
bbe71e4
 
 
 
 
 
 
 
 
 
 
 
 
 
 
ce3810b
 
 
 
 
 
 
 
 
 
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
import gradio as gr
from utils_config import get_custom_config_dropdowns
from utils_json import add_data_to_individual  

#--------------------------------------------------------- LEVEL 1 DROPDOWNS
def retrieve_config_options(label, dropdown_config):
    options = list(dropdown_config[label].keys())
    options = [option.title() for option in options]
    return options

def reinitialise_level2(): 
    dropdown_level2 = gr.Dropdown(choices=[], visible=False)
    openfield_level2 = gr.Textbox(visible=False)
    dropdown_extra_level2 = gr.Dropdown(choices=[], visible=False)
    return dropdown_level2, openfield_level2, dropdown_extra_level2

def create_dropdown_level1(label): 
    dropdown_config = get_custom_config_dropdowns("config_dropdown_conditions.json")
    options = retrieve_config_options(label, dropdown_config)
    dropdown = gr.Dropdown(choices=options, label=label, interactive=True, visible=True)
    dropdown_level2, openfield_level2, dropdown_extra_level2 = reinitialise_level2()
    return dropdown, dropdown_level2, openfield_level2, dropdown_extra_level2
    
def dropdown_collision():
    label = "Collision with a means of transport"
    add_data_to_individual("circumstance", label)
    return create_dropdown_level1(label)

def dropdown_deliberate_destruction():
    label = "Destruction / Deliberatly removed"
    add_data_to_individual("circumstance", label)
    return create_dropdown_level1(label)     

def dropdown_indirect_destruction(): 
    label = "Indirect destruction"
    add_data_to_individual("circumstance", label)
    return create_dropdown_level1(label) 

def dropdown_natural_cause(): 
    label = "Natural cause"
    add_data_to_individual("circumstance", label)
    return create_dropdown_level1(label)         


#--------------------------------------------------------- LEVEL 2 DROPDOWNS
def get_options(value):
        value = value.lower()
        options_dropdown= None
        open_field = None
        extras = None
        extras_label = None
        dropdown_config = get_custom_config_dropdowns("config_dropdown_conditions.json")
        for _, sub_dict in dropdown_config.items():
            nested_dict = sub_dict.get(value)
            if nested_dict is not None: 
                if "Options" in nested_dict.keys():
                    options_dropdown = nested_dict["Options"]
                    options_dropdown = [option.title() for option in options_dropdown]
                if "Open" in nested_dict.keys():
                    open_field = nested_dict["Open"]
                    open_field = open_field.title()
                if "Extra" in nested_dict.keys():
                    for key, val in nested_dict["Extra"].items():
                        extras_label = key
                        extras = val
                        extras = [extra.title() for extra in extras]
        return options_dropdown, open_field, extras, extras_label

       
def on_select(evt: gr.SelectData):  # SelectData is a subclass of EventData
    add_data_to_individual("circumstance_dropdown_level1", evt.value)
    options_dropdown, open_field, extras, extras_label = get_options(evt.value)
    if options_dropdown is not None:
        dropdown_level2 = gr.Dropdown(choices=options_dropdown, label=evt.value, interactive=True, visible=True)
    else: 
        dropdown_level2 = gr.Dropdown(choices=[], visible=False)

    if open_field is not None:
        openfield_level2 = gr.Textbox(label=open_field, interactive=True, visible=True)
    else: 
        openfield_level2 = gr.Textbox(visible=False)

    if extras is not None: 
        dropdown_extra_level2 = gr.Dropdown(choices=extras, label=extras_label, interactive=True, visible=True)
    else: 
        dropdown_extra_level2 = gr.Dropdown(choices=[], visible=False)
    return dropdown_level2, openfield_level2, dropdown_extra_level2

def on_select_dropdown_level2(evt: gr.SelectData): 
    add_data_to_individual("circumstance_dropdown_level2", evt.value)

def on_select_openfield_level2(evt: gr.SelectData): 
    add_data_to_individual("circumstance_openfield_level2", evt.value)

def on_select_dropdown_extra_level2(evt: gr.SelectData):  
    add_data_to_individual("circumstance_dropdown_extra_level2", evt.value)