File size: 2,772 Bytes
9b0a8c5
 
 
 
1cfc9e8
 
 
9b0a8c5
 
1cfc9e8
9b0a8c5
 
1cfc9e8
9b0a8c5
 
 
 
 
 
 
 
 
1cfc9e8
 
9b0a8c5
 
 
1cfc9e8
9b0a8c5
 
1cfc9e8
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
58
59
60
61
62
63
import os.path
import gradio as gr
from functools import partial

from .main_page import sort_with_pyuca


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 = sort_with_pyuca(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.
        val = languages[0] if len(languages) == 1 else None
        return gr.Dropdown(choices=languages, interactive=True, value=val, 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")
        
        countries = sort_with_pyuca(list(metadata_dict.keys()))
        country_choice = gr.Dropdown(
            choices=countries, label="Country", allow_custom_value=False, value=None,
        )

        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