task-managment / src / app / auth / verification / _components / verificationStatus.tsx
verificationStatus.tsx
Raw
"use client";

import { trpc } from "@/app/_trpc/client";
import Loading from "@/components/Loading";
import { Button, buttonVariants } from "@/components/ui/button";
import { cn } from "@/lib/utils";
import { User } from "@/server/user/domain/models";
import { ArrowLeft } from "lucide-react";
import Link from "next/link";
import { useRouter, useSearchParams } from "next/navigation";
import { useEffect } from "react";

export default function VerificationStatus({ user }: { user: User }) {
  const router = useRouter();
  const { mutateAsync, isPending, isSuccess, isError, data } =
    trpc.users.findOrCreateUser.useMutation({
      onSuccess() {
        router.refresh();
      },
    });
  useEffect(() => {
    if (!Object.values(user)?.length) return;
    mutateAsync(user).then();
  }, [user]);

  return (
    <div>
      {isPending && (
        <h2 className="text-xl font-light animate-pulse">Verificando...</h2>
      )}
      {isSuccess && (
        <h2 className="text-xl font-light animate-pulse">
          Verificado, redireccionando...
        </h2>
      )}
      {isError && (
        <div className="flex flex-col items-center space-y-2 text-center">
          <h2 className="text-xl font-light animate-pulse">
            Un error ha ocurrido, verificando su informacion.
          </h2>
             <div className="flex gap-2 justify-center">
             <Button
            onClick={async () => await mutateAsync(user)}
            disabled={isPending}
            className="rounded-3xl"
            size="sm"
          >
            Reintentar
          </Button>
          <p>o</p>
          <Link
              className={cn(buttonVariants({ variant: "link", size: "sm" }))}
              href="/sign-in"
            >
              <ArrowLeft /> Regresar a inicio de sección
            </Link>
             </div>
        </div>
      )}
      {!isError && <Loading />}
    </div>
  );
}