From 7a3791117b37da8395e8bae5881e998235458455 Mon Sep 17 00:00:00 2001 From: esdrasrenan Date: Mon, 15 Dec 2025 19:15:51 -0300 Subject: [PATCH] fix: corrige cliques nao responsivos e erros silenciosos MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Remove coluna de acoes sem implementacao em data-table - Corrige loading states travados em new-ticket-dialog, close-ticket-dialog - Adiciona finally blocks em forgot-password e reset-password - Adiciona tratamento de erros em invokes do Tauri (ChatWidget, ChatHubWidget) 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 --- apps/desktop/src/chat/ChatHubWidget.tsx | 20 +++-- apps/desktop/src/chat/ChatWidget.tsx | 4 +- .../recuperar/forgot-password-page-client.tsx | 2 +- .../reset-password-page-client.tsx | 2 +- src/components/data-table.tsx | 83 +++++++------------ .../tickets/close-ticket-dialog.tsx | 2 - src/components/tickets/new-ticket-dialog.tsx | 1 + 7 files changed, 51 insertions(+), 63 deletions(-) diff --git a/apps/desktop/src/chat/ChatHubWidget.tsx b/apps/desktop/src/chat/ChatHubWidget.tsx index cabe10c..b05e51c 100644 --- a/apps/desktop/src/chat/ChatHubWidget.tsx +++ b/apps/desktop/src/chat/ChatHubWidget.tsx @@ -61,22 +61,30 @@ export function ChatHubWidget() { // Quando nova sessao inicia listen("raven://chat/session-started", () => { loadSessions() - }).then((unlisten) => unlisteners.push(unlisten)) + }).then((unlisten) => unlisteners.push(unlisten)).catch((err) => { + console.error("Erro ao registrar listener session-started:", err) + }) // Quando sessao encerra listen("raven://chat/session-ended", () => { loadSessions() - }).then((unlisten) => unlisteners.push(unlisten)) + }).then((unlisten) => unlisteners.push(unlisten)).catch((err) => { + console.error("Erro ao registrar listener session-ended:", err) + }) // Quando contador de nao lidos muda listen("raven://chat/unread-update", (event) => { setSessions(event.payload.sessions || []) - }).then((unlisten) => unlisteners.push(unlisten)) + }).then((unlisten) => unlisteners.push(unlisten)).catch((err) => { + console.error("Erro ao registrar listener unread-update:", err) + }) // Quando nova mensagem chega listen("raven://chat/new-message", (event) => { setSessions(event.payload.sessions || []) - }).then((unlisten) => unlisteners.push(unlisten)) + }).then((unlisten) => unlisteners.push(unlisten)).catch((err) => { + console.error("Erro ao registrar listener new-message:", err) + }) return () => { unlisteners.forEach((unlisten) => unlisten()) @@ -129,7 +137,9 @@ export function ChatHubWidget() { } const handleClose = () => { - invoke("close_hub_window") + invoke("close_hub_window").catch((err) => { + console.error("Erro ao fechar janela do hub:", err) + }) } const totalUnread = sessions.reduce((sum, s) => sum + s.unreadCount, 0) diff --git a/apps/desktop/src/chat/ChatWidget.tsx b/apps/desktop/src/chat/ChatWidget.tsx index 7686b9d..fe0e2b7 100644 --- a/apps/desktop/src/chat/ChatWidget.tsx +++ b/apps/desktop/src/chat/ChatWidget.tsx @@ -714,7 +714,9 @@ export function ChatWidget({ ticketId, ticketRef }: ChatWidgetProps) { } const handleClose = () => { - invoke("close_chat_window", { ticket_id: ticketId }) + invoke("close_chat_window", { ticket_id: ticketId }).catch((err) => { + console.error("Erro ao fechar janela de chat:", err) + }) } const handleKeyDown = (e: React.KeyboardEvent) => { diff --git a/src/app/recuperar/forgot-password-page-client.tsx b/src/app/recuperar/forgot-password-page-client.tsx index 74fd0c2..01e81ed 100644 --- a/src/app/recuperar/forgot-password-page-client.tsx +++ b/src/app/recuperar/forgot-password-page-client.tsx @@ -47,7 +47,6 @@ export function ForgotPasswordPageClient() { if (!response.ok) { toast.error(data.error ?? "Erro ao processar solicitação") - setIsSubmitting(false) return } @@ -56,6 +55,7 @@ export function ForgotPasswordPageClient() { } catch (error) { console.error("Erro ao solicitar recuperação", error) toast.error("Não foi possível processar. Tente novamente") + } finally { setIsSubmitting(false) } } diff --git a/src/app/redefinir-senha/reset-password-page-client.tsx b/src/app/redefinir-senha/reset-password-page-client.tsx index 807351f..99abf80 100644 --- a/src/app/redefinir-senha/reset-password-page-client.tsx +++ b/src/app/redefinir-senha/reset-password-page-client.tsx @@ -80,7 +80,6 @@ export function ResetPasswordPageClient() { if (!response.ok) { toast.error(data.error ?? "Erro ao redefinir senha") - setIsSubmitting(false) return } @@ -89,6 +88,7 @@ export function ResetPasswordPageClient() { } catch (error) { console.error("Erro ao redefinir senha", error) toast.error("Não foi possível redefinir a senha. Tente novamente") + } finally { setIsSubmitting(false) } } diff --git a/src/components/data-table.tsx b/src/components/data-table.tsx index 28b7544..58ba5eb 100644 --- a/src/components/data-table.tsx +++ b/src/components/data-table.tsx @@ -20,16 +20,16 @@ import { verticalListSortingStrategy, } from "@dnd-kit/sortable" import { CSS } from "@dnd-kit/utilities" -import { - IconChevronDown, - IconCircleCheckFilled, - IconDotsVertical, - IconGripVertical, - IconLayoutColumns, - IconLoader, - IconPlus, - IconTrendingUp, -} from "@tabler/icons-react" +import { + IconChevronDown, + IconCircleCheckFilled, + IconDotsVertical, + IconGripVertical, + IconLayoutColumns, + IconLoader, + IconPlus, + IconTrendingUp, +} from "@tabler/icons-react" import { ColumnDef, ColumnFiltersState, @@ -95,13 +95,13 @@ import { TableHeader, TableRow, } from "@/components/ui/table" -import { - Tabs, - TabsContent, - TabsList, - TabsTrigger, -} from "@/components/ui/tabs" -import { TablePagination } from "@/components/ui/table-pagination" +import { + Tabs, + TabsContent, + TabsList, + TabsTrigger, +} from "@/components/ui/tabs" +import { TablePagination } from "@/components/ui/table-pagination" export const schema = z.object({ id: z.number(), @@ -282,30 +282,7 @@ const columns: ColumnDef>[] = [ ) }, }, - { - id: "actions", - cell: () => ( - - - - - - Edit - Make a copy - Favorite - - Delete - - - ), - }, + // Actions column removed - no functionality implemented ] function DraggableRow({ row }: { row: Row> }) { @@ -526,18 +503,18 @@ export function DataTable({ - - - `${selected} of ${total} row${total === 1 ? "" : "s"} selected.` - } - className="pb-4" - /> - + + + `${selected} of ${total} row${total === 1 ? "" : "s"} selected.` + } + className="pb-4" + /> + 0) { if (isLinkLoading) { toast.error("Aguarde carregar o ticket vinculado antes de encerrar.", { id: "close-ticket" }) - setIsSubmitting(false) return } if (linkNotFound || !linkedTicketCandidate) { toast.error("Não encontramos o ticket informado para vincular. Verifique o número e tente novamente.", { id: "close-ticket", }) - setIsSubmitting(false) return } } diff --git a/src/components/tickets/new-ticket-dialog.tsx b/src/components/tickets/new-ticket-dialog.tsx index a6c0f70..f8d1627 100644 --- a/src/components/tickets/new-ticket-dialog.tsx +++ b/src/components/tickets/new-ticket-dialog.tsx @@ -612,6 +612,7 @@ export function NewTicketDialog({ const plainDescription = sanitizedDescription.replace(/<[^>]*>/g, "").trim() if (plainDescription.length === 0) { form.setError("description", { type: "custom", message: "Descreva o contexto do chamado." }) + setLoading(false) return }