internal-v0 / ui /main_page.py
carlosh93's picture
fixing multiuser issue
3bc3503
import gradio as gr
from functools import partial
from gradio_modal import Modal
from data.lang2eng_map import lang2eng_mapping
from data.words_map import words_mapping
import datetime
def build_main_page(concepts_dict, metadata_dict, local_storage):
try:
country, lang, _, _ = local_storage.value
if not country and not lang:
country, lang = "USA", "English"
except (TypeError, ValueError):
country, lang = "USA", "English"
with gr.Column(visible=False, elem_id="main_page") as main_ui_placeholder:
# Read the markdown file
with open(metadata_dict["USA"]["English"]["Task"], "r", encoding="utf-8") as f:
TASK_TEXT = f.read()
with open(metadata_dict["USA"]["English"]["Instructions"], "r", encoding="utf-8") as f:
INST_TEXT = f.read()
intro_text_inp = gr.Markdown(TASK_TEXT)
# gr.Markdown("## Data Collection")
with gr.Row(equal_height=True):
country_inp = gr.Textbox(label="Country", elem_id="country_inp", interactive=False)
language_inp = gr.Textbox(label="Language", elem_id="language_inp", interactive=False)
username_inp = gr.Textbox(label="email (optional)", type="email", elem_id="username_inp", interactive=False)
password_inp = gr.Textbox(label="password (optional)", type="password", elem_id="password_inp", interactive=False)
exit_btn = gr.Button("⬅️ Change Language", elem_id="exit_btn", elem_classes=["compact-btn"])
with gr.Row(equal_height=True, ):
with gr.Column():
# Main category and concept row - SINGLE SELECTION
with gr.Row():
categories = concepts_dict["USA"]["English"]
category_btn = gr.Dropdown(choices=categories.keys(), interactive=True, label="Main Category",
allow_custom_value=False, elem_id="category_btn", multiselect=False, value=None)
concept_btn = gr.Dropdown(choices=[], interactive=True, label="Main Concept",
allow_custom_value=True, elem_id="concept_btn", multiselect=False)
image_inp = gr.Image(label="Image", elem_id="image_inp", format="png", height=512, width=768)
with gr.Row():
hide_all_faces_btn = gr.Button("πŸ‘€ Hide All Faces", elem_id="hide_all_faces_btn")
hide_faces_btn = gr.Button("πŸ‘€ Hide Specific Faces", elem_id="hide_faces_btn")
unhide_faces_btn = gr.Button("πŸ‘€ Unhide Faces", elem_id="unhide_faces_btn")
image_url_inp = gr.Textbox(label="Image URL (Optional, if not uploading an image)", type="text", elem_id="image_url_inp")
with gr.Column():
# short_caption_inp = gr.Textbox(lines=2, label="Short Description", elem_id="short_caption_inp")
long_caption_inp = gr.Textbox(lines=6, label="Description", elem_id="long_caption_inp")
categories_list = sorted(list(concepts_dict["USA"]["English"].keys()))[:5]
def create_category_dropdown(category, index):
original_category = category
if lang in words_mapping:
display_category = words_mapping[lang].get(original_category, original_category)
else:
display_category = original_category
category_choices = concepts_dict[country][lang2eng_mapping.get(lang, lang)][original_category]
sorted_choices = sorted(category_choices)
dropdown = gr.Dropdown(
choices=sorted_choices,
interactive=True,
label=display_category,
allow_custom_value=True,
elem_id=f"category_{index+1}_concepts_btn",
multiselect=True,
value=None
)
return dropdown
category_concept_dropdowns = []
# First row - categories 1 and 2
with gr.Row():
dropdown1 = create_category_dropdown(categories_list[0], 0)
category_concept_dropdowns.append(dropdown1)
dropdown2 = create_category_dropdown(categories_list[1], 1)
category_concept_dropdowns.append(dropdown2)
# Second row - categories 3 and 4
# with gr.Row():
dropdown3 = create_category_dropdown(categories_list[2], 2)
category_concept_dropdowns.append(dropdown3)
dropdown4 = create_category_dropdown(categories_list[3], 3)
category_concept_dropdowns.append(dropdown4)
dropdown5 = create_category_dropdown(categories_list[4], 4)
category_concept_dropdowns.append(dropdown5)
# Third row - category 5 and instructions button
with gr.Row(equal_height=True):
# dropdown5 = create_category_dropdown(categories_list[4], 4)
# category_concept_dropdowns.append(dropdown5)
instruct_btn = gr.Button("πŸ“˜ Show Instructions")
with Modal(visible=False) as modal:
intro_text_inst_inp = gr.Markdown(INST_TEXT)
with gr.Column():
# with gr.Row():
# instruct_btn = gr.Button("πŸ“˜ Show Instructions")
# with Modal(visible=False) as modal:
# intro_text_inst_inp = gr.Markdown(INST_TEXT)
with gr.Row(equal_height=True):
clear_btn = gr.Button("Clear", variant="huggingface", elem_id="clear_btn")
with Modal(visible=False, allow_user_close=False) as modal_saving:
modal_saving_text = gr.Markdown("⏳ Please wait while your submission is being saved.")
with Modal(visible=False) as modal_data_saved:
modal_data_saved_text = gr.Markdown("Your data has been saved successfully. The data in the table below will be updated shortly. You can now close this window.")
submit_btn = gr.Button("Submit", variant="primary", interactive=False, elem_id="submit_btn")
with Modal(visible=False) as modal_exclude_confirm:
gr.Markdown("## Are you sure you want to exclude this example?")
gr.Markdown("This action will permanently delete the example.")
with gr.Row():
cancel_exclude_btn = gr.Button("Cancel")
confirm_exclude_btn = gr.Button("Yes, delete", variant="stop")
exclude_btn = gr.Button("Exclude Selected Example", variant="stop", visible=True)
with gr.Column():
timestamp_btn = gr.Textbox(datetime.datetime.now(), label="Timestamp", visible=False, elem_id="timestamp_btn", interactive=False) # FIXME visible=False)
exampleid_btn = gr.Textbox(label="ID", visible=False, elem_id="example_id", interactive=False) # FIXME visible=False)
output_dict = {
"main_ui_placeholder": main_ui_placeholder,
"country_inp": country_inp,
"language_inp": language_inp,
"username_inp": username_inp,
"password_inp": password_inp,
"image_inp": image_inp,
"image_url_inp": image_url_inp,
"long_caption_inp": long_caption_inp,
"category_btn": category_btn,
"concept_btn": concept_btn,
"category_concept_dropdowns": category_concept_dropdowns,
"category_1_concepts": category_concept_dropdowns[0],
"category_2_concepts": category_concept_dropdowns[1],
"category_3_concepts": category_concept_dropdowns[2],
"category_4_concepts": category_concept_dropdowns[3],
"category_5_concepts": category_concept_dropdowns[4],
"instruct_btn": instruct_btn,
"clear_btn": clear_btn,
"submit_btn": submit_btn,
"modal": modal,
"modal_saving": modal_saving,
"modal_data_saved": modal_data_saved,
"timestamp_btn": timestamp_btn,
"exampleid_btn": exampleid_btn,
"exit_btn": exit_btn,
"intro_text_inp": intro_text_inp,
"intro_text_inst_inp": intro_text_inst_inp,
"modal_saving_text": modal_saving_text,
"modal_data_saved_text": modal_data_saved_text,
"hide_faces_btn": hide_faces_btn,
"hide_all_faces_btn": hide_all_faces_btn,
"unhide_faces_btn": unhide_faces_btn,
"exclude_btn": exclude_btn,
"modal_exclude_confirm": modal_exclude_confirm,
"cancel_exclude_btn": cancel_exclude_btn,
"confirm_exclude_btn": confirm_exclude_btn,
}
return output_dict