import { ExternalLink, Eye, FileBadge, FileText, FolderKanban, Mail, PackageCheck, Pointer, Printer, Trash2, } from "lucide-react"; import Link from "next/link"; import { useRouter } from "next/router"; import toast from "react-hot-toast"; import { Button, type ButtonConfigs } from "~/components/ui/button"; import { Tooltip, TooltipContent, TooltipProvider, TooltipTrigger, } from "~/components/ui/tooltip"; import { cn } from "~/lib/utils"; import { useTranslation } from "~/providers/I18nProvider"; import { useServizio, useServizioAnnuncio } from "~/providers/ServizioProvider"; import type { AnnunciId } from "~/schemas/public/Annunci"; import { api } from "~/utils/api"; import { Confirm } from "../confirm"; import { AdminLavoraConferma } from "./admin_conferma"; import { AdminContratto } from "./admin_contratto"; import { ConfermaAnnuncioModal, ConfermaInLavorazioneModal } from "./conferma"; import { ContattiProprietarioModal } from "./modale_contatti"; export const AdminActions = () => { const { servizioId, userId, isAdmin } = useServizio(); const { data, annuncioId } = useServizioAnnuncio(); const utils = api.useUtils(); const { mutate } = api.servizio.removeAnnuncioServizio.useMutation({ onError: (error) => { console.error(error); toast.error("Errore durante la rimozione dell'annuncio"); }, onSuccess: async () => { await utils.servizio.getAllServizioAnnunci.invalidate({ userId }); await utils.servizio.getServizioData.invalidate({ servizioId }); await utils.servizio.getCompatibileAnnunci.invalidate({ servizioId, }); toast.success("Annuncio rimosso"); }, }); if (!isAdmin) return null; return (
{data.open_contatti_at != null && } {data.user_confirmed_at != null && } {data.accettato_conferma_at != null && ( <> {data.gestionale_id && ( )} )} { mutate({ annuncioId, servizioId, }); }} title="Elimina annuncio" >
); }; const AdminSendScheda = () => { const { userId } = useServizio(); const { annuncioId } = useServizioAnnuncio(); const { mutate } = api.comunicazioni.sendSchedaAnnuncioServizio.useMutation({ onMutate: () => { toast.loading("Invio email in corso...", { id: "send-scheda-annuncio-email", }); }, onSuccess: () => { toast.success("Email inviata con successo!", { id: "send-scheda-annuncio-email", }); }, onError: (error) => { toast.error(`Errore durante l'invio dell'email: ${error.message}`, { id: "send-scheda-annuncio-email", }); }, }); return ( ); }; export const UserActions = () => { const { servizioId } = useServizio(); const { data, annuncioId } = useServizioAnnuncio(); const { locale } = useTranslation(); const ContattiSbloccati = data.open_contatti_at !== null; const ConfermaUtente = data.user_confirmed_at !== null; const ConfermaLavorata = data.doc_conferma_added && data.hasConfermaAdmin; const AccettatoConferma = data.accettato_conferma_at !== null; return ( <>
{ConfermaUtente ? !data.hasConfermaAdmin && : ContattiSbloccati && } {AccettatoConferma ? ( ) : ( ConfermaLavorata && (data.doc_conferma_ref ? ( ) : (

{locale === "it" ? "Il documento non è più disponibile" : "The document is no longer available"}

{locale === "it" ? "Se hai bisogno di una copia, contattaci via email o chat." : "If you need a copy, contact us via email or chat."}

)) )}
{data.accettato_conferma_at != null && } ); }; const PostConfermaSection = () => { const { servizio, servizioId } = useServizio(); const { data, annuncioId } = useServizioAnnuncio(); const { locale } = useTranslation(); const saldoPaid = servizio.isOkSaldo; const consulenzaPaid = servizio.isOkConsulenza; const doc_non_disponibile = locale === "it" ? "Il documento non è più disponibile" : "The document is no longer available"; const contatta_supporto = locale === "it" ? "Se hai bisogno di una copia, contattaci via email o chat." : "If you need a copy, contact us via email or chat."; if (!saldoPaid) { return (

{locale === "it" ? "Questo annuncio è stato confermato, procedi al saldo:" : "This listing has been confirmed, proceed to payment:"}

); } if (!data.doc_contratto_added) { return (

{locale === "it" ? "Ci siamo quasi! Stiamo preparando il contratto per te." : "Almost there! We are preparing the contract for you."}

{locale === "it" ? "Una volta pronto, riceverai una notifica via email." : "Once ready, you will receive a notification via email."}

); } return (

{consulenzaPaid ? locale === "it" ? "Il contratto è pronto, puoi visualizzarlo:" : "The contract is ready, you can view it:" : locale === "it" ? "Il contratto è pronto, puoi visualizzarlo e procedere al saldo:" : "The contract is ready, you can view it and proceed to payment:"}

{data.doc_contratto_ref ? ( ) : (

{doc_non_disponibile}

{contatta_supporto}

)} {!consulenzaPaid && data.contratto_tipo && } {data.doc_registrazione_added && (data.doc_registrazione_ref ? ( ) : (

{doc_non_disponibile}

{contatta_supporto}

))}
); }; export const SaldoButton = ({ annuncioId, variant = "info", className, }: { annuncioId: AnnunciId; variant?: ButtonConfigs["variant"]; className?: string; }) => { const { locale } = useTranslation(); const { servizioId } = useServizio(); const router = useRouter(); const { mutate } = api.servizio.setupSaldoServizio.useMutation({ onMutate: () => { toast.loading(locale === "it" ? "Caricamento ..." : "Loading ...", { id: "preparazioneSaldo", }); }, onSuccess: async (data) => { toast.success( locale === "it" ? "Pagamento saldo preparato" : "Payment prepared", { id: "preparazioneSaldo", }, ); await router.push(`/servizio/pagamento/${data}`); }, }); return ( ); }; const SaldoConsulenzaButton = ({ variant = "info", className, }: { variant?: ButtonConfigs["variant"]; className?: string; }) => { const { locale } = useTranslation(); const { annuncioId } = useServizioAnnuncio(); const { servizioId } = useServizio(); const router = useRouter(); const { mutate } = api.servizio.setupSaldoConsulenzaServizio.useMutation({ onMutate: () => { toast.loading(locale === "it" ? "Caricamento ..." : "Loading ...", { id: "preparazioneSaldo", }); }, onSuccess: async (data) => { toast.success( locale === "it" ? "Pagamento saldo preparato" : "Payment prepared", { id: "preparazioneSaldo", }, ); await router.push(`/servizio/pagamento/${data}`); }, }); return ( ); };