import { CircleCheck, CircleUser, FileBadge, FileText, Handshake, Navigation, PackageCheck, Phone, Pointer, TriangleAlert, } from "lucide-react"; import Link from "next/link"; import { useRouter } from "next/router"; import { useEffect, useState } from "react"; import toast from "react-hot-toast"; import { Credenza, CredenzaBody, CredenzaClose, CredenzaContent, CredenzaDescription, CredenzaFooter, CredenzaHeader, CredenzaTitle, CredenzaTrigger, } from "~/components/custom_ui/credenza"; import LoadingButton from "~/components/custom_ui/loading-button"; import { LoadingPage } from "~/components/loading"; 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"; export const Interactions = () => { const { servizio, servizioId } = useServizio(); const { data, annuncioId } = useServizioAnnuncio(); return (
{data.open_contatti_at !== null && data.user_confirmed_at == null && ( )} {data.user_confirmed_at && !data.hasConfermaAdmin && ( )} {data.doc_conferma_added && data.accettato_conferma_at == null && data.hasConfermaAdmin && (data.doc_conferma_ref ? ( ) : (

Il documento non è più disponibile

Se hai bisogno di una copia, contattaci via email o chat.

))} {data.accettato_conferma_at != null && ( )}
{!servizio.isOkSaldo && data.accettato_conferma_at != null && (

Questo annuncio è stato confermato, procedi al saldo:

)} {servizio.isOkSaldo && data.accettato_conferma_at != null && data.doc_contratto_added == null && (

Ci siamo quasi! Stiamo preparando il contratto per te.

Una volta pronto, riceverai una notifica via email.

)} {servizio.isOkSaldo && data.accettato_conferma_at != null && data.doc_contratto_added && (

{servizio.isOkConsulenza ? "Il contratto è pronto, puoi visualizzarlo:" : "Il contratto è pronto, puoi visualizzarlo e procedere al saldo:"}

{data.doc_contratto_ref ? ( ) : (

Il documento non è più disponibile

Se hai bisogno di una copia, contattaci via email o chat.

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

Il documento non è più disponibile

Se hai bisogno di una copia, contattaci via email o chat.

))}
)}
); }; export const SaldoButton = ({ annuncioId, variant = "info", className, }: { annuncioId: AnnunciId; variant?: ButtonConfigs["variant"]; className?: string; }) => { const { servizioId } = useServizio(); const router = useRouter(); const { mutate } = api.servizio.setupSaldoServizio.useMutation({ onMutate: () => { toast.loading("Caricamento ...", { id: "preparazioneSaldo" }); }, onSuccess: async (data) => { toast.success("Pagamento saldo preparato", { id: "preparazioneSaldo", }); await router.push(`/servizio/pagamento/${data}`); }, }); return ( ); }; const SaldoConsulenzaButton = ({ variant = "info", className, }: { variant?: ButtonConfigs["variant"]; className?: string; }) => { const { annuncioId } = useServizioAnnuncio(); const { servizioId } = useServizio(); const router = useRouter(); const { mutate } = api.servizio.setupSaldoConsulenzaServizio.useMutation({ onMutate: () => { toast.loading("Caricamento ...", { id: "preparazioneSaldo" }); }, onSuccess: async (data) => { toast.success("Pagamento saldo preparato", { id: "preparazioneSaldo", }); await router.push(`/servizio/pagamento/${data}`); }, }); return ( ); }; const AnnuncioConfirm = () => { const { userId, servizioId } = useServizio(); const { annuncioId } = useServizioAnnuncio(); const { t } = useTranslation(); const [open, setOpen] = useState(false); const utils = api.useUtils(); const { mutate, isPending } = api.servizio.userConfirmImmobile.useMutation({ onMutate: () => { toast.loading("Conferma in corso", { id: "updateRichiestaToast" }); }, onError: (err) => { toast.error(err.message, { id: "updateRichiestaToast" }); }, onSuccess: async () => { toast.success("Richiesta confermata con successo", { id: "updateRichiestaToast", }); await utils.servizio.getAllServizioAnnunci.invalidate({ userId }); setOpen(false); }, }); return ( {t.richieste.conf_title} {t.richieste.conf_desc}

{t.richieste.conferma_txt}

{ mutate({ annuncioId, servizioId, }); }} > {t.conferma}
); }; const ConfermaLavorazioneModal = () => { const { t } = useTranslation(); const { data } = useServizioAnnuncio(); return ( In attesa di conferma Consegna status modal

Richiesta di conferma inviata il:{" "} {data.user_confirmed_at && new Date(data.user_confirmed_at).toLocaleString("it", { day: "2-digit", month: "2-digit", year: "numeric", hour: "2-digit", minute: "2-digit", })}

La conferma è ancora in lavorazione. Stiamo verificando con i proprietari le condizioni e dettagli della conferma per riferirteli. Attendi una comunicazione.

); }; const ContattiProprietarioModal = () => { const { servizioId, userId } = useServizio(); const { data, annuncioId } = useServizioAnnuncio(); const { t } = useTranslation(); const [showContacts, setShowContacts] = useState( data.open_contatti_at != null, ); const utils = api.useUtils(); const { mutate } = api.servizio.unlockServizioContatti.useMutation({ onMutate: () => { toast.loading("Caricamento ...", { id: "unlock-contacts", }); }, onSuccess: async (data) => { if (!data) { toast.error("Limite di sblocchi raggiunto", { id: "unlock-contacts", }); return; } toast.success("Successo", { id: "unlock-contacts", }); await utils.servizio.getAllServizioAnnunci.invalidate({ userId, }); setShowContacts(true); }, onError: (err) => { toast.error(err.message, { id: "unlock-contacts", }); }, }); const d = new Date(); const tooEarly = d.getHours() < 9; const tooLate = d.getHours() >= 20; return ( {showContacts ? ( ) : ( )} {t.contatto.title} {t.contatto.descrizione} {showContacts ? ( ) : (

{t.contatto.disclaimer}

{t.contatto.disclaimer2}

{t.contatto.disclaimer3}

{(tooEarly || tooLate) && (
{/*TODO testare */}

Il proprietario riceverà la notifica alle ore 9.00{" "} {tooLate && "di domani"}

)}
)}
{!showContacts && ( )}
); }; const ContattiProprietarioData = () => { const { servizioId } = useServizio(); const { annuncioId } = useServizioAnnuncio(); const { data, isLoading } = api.annunci.getProprietarioData.useQuery({ annuncioId, servizioId, }); const [navigationUrl, setNavigationUrl] = useState( undefined, ); const { t } = useTranslation(); useEffect(() => { if (!data || !data.propData) return; if (typeof window === "undefined") return; if ( navigator.userAgent.toUpperCase().includes("MAC") || navigator.userAgent.toUpperCase().includes("IPAD") || navigator.userAgent.toUpperCase().includes("IPHONE") || navigator.userAgent.toUpperCase().includes("IOS") || navigator.userAgent.toUpperCase().includes("IPOD") ) { setNavigationUrl( `maps://www.google.com/maps/dir/?api=1&travelmode=driving&layer=traffic&destination=${data.propData.lat},${data.propData.lon}`, ); } else { setNavigationUrl( `https://www.google.com/maps/dir/?api=1&travelmode=driving&layer=traffic&destination=${data.propData.lat},${data.propData.lon}`, ); } }, [data]); if (isLoading) { return (
); } if (!data || !data.propData) { return

{t.contatto.error}

; } return (

{t.contatto.propietario}:

{t.contatto.nome}: {data.propData.locatore}

: {data.propData.numero}

{t.contatto.immobile}:

{t.contatto.indirizzo}: {data.propData.indirizzo},{" "} {data.propData.civico} {data.propData.comune} ({data.propData.provincia} )

{t.contatto.apri_nav}

{t.contatto.sbloccato_il}:{" "} {data.opened_at.toLocaleString("it", { day: "2-digit", month: "2-digit", year: "numeric", hour: "2-digit", minute: "2-digit", })}

{t.contatto.contatta}

{t.contatto.orari}

); };