From 8532faecec25e1953c2645bdace7a950cacc362c Mon Sep 17 00:00:00 2001 From: "gpt-engineer-app[bot]" <159125892+gpt-engineer-app[bot]@users.noreply.github.com> Date: Wed, 22 Apr 2026 14:32:51 +0000 Subject: [PATCH] Changes Co-authored-by: domfelipe <53182096+domfelipe@users.noreply.github.com> --- src/routes/painel.index.tsx | 14 +++++++++----- src/routes/painel.integracoes.index.tsx | 18 +++++++++++------- 2 files changed, 20 insertions(+), 12 deletions(-) diff --git a/src/routes/painel.index.tsx b/src/routes/painel.index.tsx index f94fa1b..c849fbd 100644 --- a/src/routes/painel.index.tsx +++ b/src/routes/painel.index.tsx @@ -1,6 +1,8 @@ "use client"; import { createFileRoute, Link } from "@tanstack/react-router"; +import { zodValidator, fallback } from "@tanstack/zod-adapter"; +import { z } from "zod"; import { useEffect, useState } from "react"; import { ArrowRight, CheckCircle2, Loader2, Sparkles } from "lucide-react"; import { useSubscription } from "@/hooks/use-profile"; @@ -17,10 +19,12 @@ import { TelegramOnboardingWizard } from "@/components/mika/telegram/TelegramOnb import { toast } from "sonner"; import { cn } from "@/lib/utils"; +const dashboardSearchSchema = z.object({ + status: fallback(z.string().optional(), undefined), +}); + export const Route = createFileRoute("/painel/")({ - validateSearch: (search: Record) => ({ - status: typeof search.status === "string" ? (search.status as string) : undefined, - }), + validateSearch: zodValidator(dashboardSearchSchema), component: DashboardPage, }); @@ -36,11 +40,11 @@ function DashboardPage() { useEffect(() => { if (search.status !== "success" || !agent) return; if (agent.status === "suspended" || agent.status === "error") { - navigate({ search: {}, replace: true }); + navigate({ search: { status: undefined }, replace: true }); return; } if (!agent.telegram_bot_username) setWizardOpen(true); - navigate({ search: {}, replace: true }); + navigate({ search: { status: undefined }, replace: true }); }, [search.status, agent, navigate]); useEffect(() => { diff --git a/src/routes/painel.integracoes.index.tsx b/src/routes/painel.integracoes.index.tsx index 98afa59..6ff9dce 100644 --- a/src/routes/painel.integracoes.index.tsx +++ b/src/routes/painel.integracoes.index.tsx @@ -1,6 +1,8 @@ "use client"; import { createFileRoute, useNavigate } from "@tanstack/react-router"; +import { zodValidator, fallback } from "@tanstack/zod-adapter"; +import { z } from "zod"; import { Plug } from "lucide-react"; import { useEffect } from "react"; import { toast } from "sonner"; @@ -9,12 +11,14 @@ import { useIntegrationCards } from "@/hooks/use-integrations"; import { useAgentInstance } from "@/hooks/use-agent-instance"; import { IntegrationCard } from "@/components/mika/integrations/IntegrationCard"; +const integracoesSearchSchema = z.object({ + status: fallback(z.string().optional(), undefined), + error: fallback(z.string().optional(), undefined), + mcp: fallback(z.string().optional(), undefined), +}); + export const Route = createFileRoute("/painel/integracoes/")({ - validateSearch: (search: Record) => ({ - status: typeof search.status === "string" ? search.status : undefined, - error: typeof search.error === "string" ? search.error : undefined, - mcp: typeof search.mcp === "string" ? search.mcp : undefined, - }), + validateSearch: zodValidator(integracoesSearchSchema), component: IntegracoesPage, }); @@ -31,10 +35,10 @@ function IntegracoesPage() { toast.success(`${search.mcp} conectado com sucesso!`); queryClient.invalidateQueries({ queryKey: ["user-integrations"] }); queryClient.invalidateQueries({ queryKey: ["user-integration-limits"] }); - navigate({ to: "/painel/integracoes", search: {}, replace: true }); + navigate({ to: "/painel/integracoes", search: { status: undefined, error: undefined, mcp: undefined }, replace: true }); } else if (search.error) { toast.error(`Erro ao conectar: ${search.error}`); - navigate({ to: "/painel/integracoes", search: {}, replace: true }); + navigate({ to: "/painel/integracoes", search: { status: undefined, error: undefined, mcp: undefined }, replace: true }); } }, [search.status, search.error, search.mcp, navigate, queryClient]);