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() |