File size: 5,348 Bytes
a62bbf7
161d75f
86d2f2e
bbe71e4
f1a6252
 
3011029
b493bab
 
 
 
f1a6252
 
bbe71e4
 
 
 
a62bbf7
f1a6252
 
161d75f
3011029
59d7f29
bbe71e4
f1a6252
 
 
 
 
 
 
 
 
baec762
b493bab
869adb6
baec762
a62bbf7
f1a6252
baec762
b493bab
869adb6
f1a6252
 
a62bbf7
f1a6252
b493bab
869adb6
f1a6252
a62bbf7
f1a6252
 
b493bab
f1a6252
 
bbe71e4
 
f1a6252
bbe71e4
f1a6252
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
baec762
f1a6252
 
 
869adb6
f1a6252
 
 
 
 
 
 
 
 
 
 
bbe71e4
f1a6252
 
 
 
bbe71e4
 
 
 
f1a6252
bbe71e4
 
f1a6252
 
 
 
 
bbe71e4
baec762
ce3810b
f1a6252
 
 
 
 
baec762
ce3810b
f1a6252
 
 
 
 
baec762
f1a6252
 
 
869adb6
f1a6252
 
 
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
132
133
134
135
136
137
138
139
140
141
142
import gradio as gr
from utils.utils_config import get_custom_config_dropdowns
from validation_submission.utils_individual 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, individual):
    dropdown_config = get_custom_config_dropdowns("config_dropdown_circumstances.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,
        individual,
    )


def dropdown_collision(individual):
    label = "Collision with a means of transport"
    individual = add_data_to_individual("circumstance", label.lower(), individual)
    return create_dropdown_level1(label, individual)


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


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


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


# --------------------------------------------------------- LEVEL 2 DROPDOWNS
def get_options(value):
    value = value.lower()
    options_label = None
    options_dropdown = None
    open_field = None
    extras = None
    extras_label = None
    dropdown_config = get_custom_config_dropdowns("config_dropdown_circumstances.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_dict = nested_dict["Options"]
                options_label = list(options_dict.keys())[0]
                options_dropdown = list(options_dict.values())[0]
                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_label, options_dropdown, open_field, extras, extras_label


def on_select(evt: gr.SelectData, individual):  # SelectData is a subclass of EventData
    options_label, options_dropdown, open_field, extras, extras_label = get_options(
        evt.value
    )
    individual = add_data_to_individual(
        "circumstance_type",
        {
            "type": (evt.value).lower(),
            "option_dropdown_label": options_label.lower()
            if options_label is not None
            else "NA",
            "open_field_label": open_field.lower() if open_field is not None else "NA",
            "extra_label": extras_label.lower() if extras_label is not None else "NA",
        },
        individual,
    )
    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, individual


def on_select_dropdown_level2(evt: gr.SelectData, individual):
    individual = add_data_to_individual(
        "circumstance_option_dropdown", evt.value.lower(), individual
    )
    return individual


def on_select_dropdown_extra_level2(evt: gr.SelectData, individual):
    individual = add_data_to_individual(
        "circumstance_extra", evt.value.lower(), individual
    )
    return individual


def on_change_openfield_level2(openfield_level2_dead, individual):
    individual = add_data_to_individual(
        "circumstance_open_field", str(openfield_level2_dead).lower(), individual
    )
    return individual