File size: 2,746 Bytes
47d267e
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
import gradio as gr

from .scripts import submit_feedback_and_handle_errors
from .strings import STRINGS

# --- Constantes de Interface ---
DROP_CHOICES_LIST = ["Erro & Bug", "Sugestão", "Elogio", "Outro"]

# --- Funções Auxiliares (Listeners e Controladores de UI) ---
def _update_submit_button_state(comment_text: str) -> gr.update:
    """
    Atualiza o estado (habilitado/desabilitado e cor) do botão de envio
    com base no comprimento do texto do comentário.

    O botão é habilitado e se torna 'primary' se o comentário tiver
    ao menos 3 caracteres (após remover espaços). Caso contrário,
    permanece desabilitado e 'secondary'.
    """
    if len(comment_text.strip()) >= 3:
        return gr.update(interactive=True, variant="primary")
    else:
        return gr.update(interactive=False, variant="secondary")

def _reset_form_and_button(message: str) -> tuple[gr.Textbox, gr.Dropdown, gr.Button, gr.Textbox]:
    """
    Reseta os campos do formulário (comentário e tipo de feedback) e o botão de envio
    para seus estados iniciais após o envio do feedback.

    Mantém a mensagem de status exibida para o usuário.
    """
    return (
        gr.update(value=""),  # Reseta o campo de comentário
        gr.update(value="Sugestão"), # Reseta o dropdown para o valor padrão
        gr.update(interactive=False, variant="secondary"), # Desabilita e muda a cor do botão
        gr.update(value=message) # Repassa a mensagem de saída para o usuário
    )

# --- Aplicação Gradio ---
with gr.Blocks() as interface:
    gr.Markdown(STRINGS["TITLE"])
    gr.Markdown(STRINGS["SUBTITLE"])
    gr.Markdown(STRINGS["DESCRIPTION"])

    type_input = gr.Dropdown(
        label=STRINGS["DROP_LABEL"],
        choices=DROP_CHOICES_LIST,
        value="Sugestão",
        interactive=True
    )

    comment_input = gr.Textbox(
        label=STRINGS["COMMENT_LABEL"],
        placeholder=STRINGS["COMMENT_PLACEHOLDER"],
        lines=5
    )

    submit_button = gr.Button(STRINGS["BTN_SUBMIT_LABEL"], variant="secondary", interactive=False)

    output_message = gr.Textbox(label="Status", value=STRINGS["OUTPUT_IDLE"], interactive=False)

    # --- Listeners de Eventos ---
    comment_input.change(
        fn=_update_submit_button_state,
        inputs=comment_input,
        outputs=submit_button,
        api_name=False
    )

    submit_button.click(
        fn=submit_feedback_and_handle_errors,
        inputs=[type_input, comment_input],
        outputs=output_message
    ).then(
        fn=_reset_form_and_button,
        inputs=output_message,
        outputs=[comment_input, type_input, submit_button, output_message],
        api_name=False
    )

if __name__ == "__main__":
    interface.launch()