digiwild / app /circumstances /circumstances_dropdowns.py
vancauwe's picture
fix: cleaning and resets together
355f278
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