wpbcpaz commited on
Commit
2ae6540
·
verified ·
1 Parent(s): b49bdf0

Update app.py

Browse files

Retificação do botão resetar analytics

Files changed (1) hide show
  1. app.py +79 -2
app.py CHANGED
@@ -1432,6 +1432,8 @@ with gr.Blocks(theme=custom_theme, title="Gerador de Posts e Chatbot (Completo)"
1432
  with gr.Row():
1433
  gerar_relatorio_btn = gr.Button("Atualizar Relatório", variant="secondary")
1434
  resetar_analytics_btn = gr.Button("Resetar Analytics (CUIDADO)", variant="stop")
 
 
1435
 
1436
  with gr.TabItem("⚙️ Configurações", id=4):
1437
  gr.Markdown("### Configurações do Gerador")
@@ -1517,6 +1519,58 @@ with gr.Blocks(theme=custom_theme, title="Gerador de Posts e Chatbot (Completo)"
1517
  show_progress="full"
1518
  )
1519
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1520
  # Lista de outputs para o botão Limpar
1521
  limpar_outputs = [
1522
  # Aba Gerador
@@ -1620,11 +1674,34 @@ with gr.Blocks(theme=custom_theme, title="Gerador de Posts e Chatbot (Completo)"
1620
  outputs=[analytics_display]
1621
  )
1622
 
 
 
 
1623
  resetar_analytics_btn.click(
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1624
  fn=resetar_analytics,
1625
  inputs=None,
1626
- outputs=[analytics_display],
1627
- js="() => { return confirm('Tem certeza que deseja resetar TODOS os dados de analytics e cache? Esta ação não pode ser desfeita.') }"
1628
  )
1629
 
1630
  # Lançar aplicação
 
1432
  with gr.Row():
1433
  gerar_relatorio_btn = gr.Button("Atualizar Relatório", variant="secondary")
1434
  resetar_analytics_btn = gr.Button("Resetar Analytics (CUIDADO)", variant="stop")
1435
+ # Botão oculto para confirmação
1436
+ resetar_analytics_btn_confirm = gr.Button("Confirmar Reset", visible=False, elem_id="reset_confirm_hidden_btn")
1437
 
1438
  with gr.TabItem("⚙️ Configurações", id=4):
1439
  gr.Markdown("### Configurações do Gerador")
 
1519
  show_progress="full"
1520
  )
1521
 
1522
+ # Botão copiar (com _js e fallback)
1523
+ copiar_btn.click(
1524
+ fn=copiar_feedback,
1525
+ inputs=[texto_output],
1526
+ outputs=[status_output],
1527
+ _js="""
1528
+ (texto_do_output) => {
1529
+ // Tenta a API moderna (navigator.clipboard)
1530
+ if (navigator.clipboard && window.isSecureContext) {
1531
+ navigator.clipboard.writeText(texto_do_output)
1532
+ .then(() => {
1533
+ console.log("Texto copiado com sucesso (navigator.clipboard)");
1534
+ })
1535
+ .catch(err => {
1536
+ console.warn("Falha ao copiar (navigator.clipboard), tentando fallback...", err);
1537
+ // Fallback: Tentar execCommand
1538
+ const elem = document.createElement('textarea');
1539
+ elem.value = texto_do_output;
1540
+ elem.style.position = 'absolute';
1541
+ elem.style.left = '-9999px';
1542
+ document.body.appendChild(elem);
1543
+ elem.select();
1544
+ try {
1545
+ document.execCommand('copy');
1546
+ console.log("Texto copiado com sucesso (execCommand fallback)");
1547
+ } catch (e) {
1548
+ console.error("Falha ao copiar (execCommand fallback)", e);
1549
+ }
1550
+ document.body.removeChild(elem);
1551
+ });
1552
+ } else {
1553
+ // Fallback final para HTTP ou navegadores muito antigos
1554
+ const elem = document.createElement('textarea');
1555
+ elem.value = texto_do_output;
1556
+ elem.style.position = 'absolute';
1557
+ elem.style.left = '-9999px';
1558
+ document.body.appendChild(elem);
1559
+ elem.select();
1560
+ try {
1561
+ document.execCommand('copy');
1562
+ console.log("Texto copiado com sucesso (execCommand fallback 2)");
1563
+ } catch (e) {
1564
+ console.error("Falha ao copiar (execCommand fallback 2)", e);
1565
+ }
1566
+ document.body.removeChild(elem);
1567
+ }
1568
+ // Retorna o valor para a função Python (copiar_feedback)
1569
+ return texto_do_output;
1570
+ }
1571
+ """
1572
+ )
1573
+
1574
  # Lista de outputs para o botão Limpar
1575
  limpar_outputs = [
1576
  # Aba Gerador
 
1674
  outputs=[analytics_display]
1675
  )
1676
 
1677
+ # CORREÇÃO: Implementação do botão de reset com 2 botões (visível e oculto)
1678
+
1679
+ # 1. O botão visível SÓ executa o JS.
1680
  resetar_analytics_btn.click(
1681
+ fn=None, # Nenhuma função Python aqui
1682
+ inputs=None,
1683
+ outputs=None,
1684
+ js="""
1685
+ () => {
1686
+ if (confirm('Tem certeza que deseja resetar TODOS os dados de analytics e cache? Esta ação não pode ser desfeita.')) {
1687
+ // Encontra o botão oculto pelo elem_id e clica nele
1688
+ const hidden_btn = document.getElementById('reset_confirm_hidden_btn');
1689
+ if (hidden_btn) {
1690
+ hidden_btn.click();
1691
+ } else {
1692
+ console.error('Botão oculto de confirmação não encontrado');
1693
+ }
1694
+ }
1695
+ // Se o usuário clicar em "Cancelar", nada acontece.
1696
+ }
1697
+ """
1698
+ )
1699
+
1700
+ # 2. O botão oculto (definido na UI) executa a função Python.
1701
+ resetar_analytics_btn_confirm.click(
1702
  fn=resetar_analytics,
1703
  inputs=None,
1704
+ outputs=[analytics_display]
 
1705
  )
1706
 
1707
  # Lançar aplicação