File size: 2,702 Bytes
9b0a8c5
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
import os.path
import gradio as gr
from functools import partial

def update_language_options(selected_country, metadata):
    with open(metadata["USA"]["English"]["Intro"], "r", encoding="utf-8") as f:
            INTRO_TEXT = f.read() # default
    # Retrieve the list of languages available for the selected country.
    if selected_country in metadata:
        languages = list(metadata[selected_country].keys())
        if len(languages) == 0:
            gr.Warning("No languages available for the selected country.")
            return gr.Dropdown(choices=[], interactive=False, value=None), gr.Markdown(INTRO_TEXT)
        # select the first language as default
        fn = metadata[selected_country][languages[0]]["Intro"]
        if os.path.exists(fn):
            with open(fn, "r", encoding="utf-8") as f:
                INTRO_TEXT = f.read()
        # Use gr.Dropdown.update to change the choices of the language dropdown.
        return gr.Dropdown(choices=languages, interactive=True, value=None, allow_custom_value=False), gr.Markdown(INTRO_TEXT)
    else:
        return gr.Dropdown(choices=[], interactive=False, value=None, allow_custom_value=False), gr.Markdown(INTRO_TEXT)

def build_selection_page(metadata_dict):
    with gr.Column(visible=True, elem_classes=["compact-container"]) as selection_page:
            with gr.Row():
                with open(metadata_dict["USA"]["English"]["Intro"], "r", encoding="utf-8") as f:
                    INTRO_TEXT = f.read()
                intro_markdown = gr.Markdown(INTRO_TEXT)

            gr.Markdown("## Please select your country")
            
            country_choice = gr.Dropdown(
                choices=list(metadata_dict.keys()), label="Country", allow_custom_value=False
            )

            language_choice = gr.Dropdown(
                choices=[], 
                label="Language",
                allow_custom_value=False,
                interactive=False  # Initially disabled.
            )
            
            # When the country selection changes, update the language dropdown.
            country_choice.change(
                fn=partial(update_language_options, metadata=metadata_dict),
                inputs=country_choice,
                outputs=[language_choice, intro_markdown]
            )
            with gr.Row():
                username = gr.Textbox(label="Email (optional)", type="email", elem_id="username_text")
                password = gr.Textbox(label="Password (optional)", type="password", elem_id="password_text")

            proceed_btn = gr.Button("Proceed")

    return selection_page, country_choice, language_choice, proceed_btn, username, password, intro_markdown