import { CircleCheck, CircleUser, Navigation, Phone, TriangleAlert, } from "lucide-react"; import Link from "next/link"; import { useMemo } from "react"; import toast from "react-hot-toast"; import { useTranslation } from "~/providers/I18nProvider"; import { useServizio, useServizioAnnuncio } from "~/providers/ServizioProvider"; import type { UsersStorageUserStorageId } from "~/schemas/public/UsersStorage"; import { api } from "~/utils/api"; import { Credenza, CredenzaBody, CredenzaClose, CredenzaContent, CredenzaDescription, CredenzaFooter, CredenzaHeader, CredenzaTitle, CredenzaTrigger, } from "../custom_ui/credenza"; import { LoadingPage } from "../loading"; import { WhatsAppIcon2 } from "../svgs"; import { Button } from "../ui/button"; import { type UploadCallback, UploadModal } from "../upload_modal"; export const ContattiProprietarioModal = () => { const { servizio } = useServizio(); const { data } = useServizioAnnuncio(); const { t } = useTranslation(); const isUnlocked = data.open_contatti_at != null; const needsDocuments = !servizio.skipControlloDoc && (!servizio.doc_personale_fronte || !servizio.doc_personale_retro); return ( {data.open_contatti_at != null ? ( ) : ( )} {t.contatto.title} {t.contatto.descrizione} {needsDocuments ? ( ) : isUnlocked ? ( ) : ( )} ); }; const DocComponent = ({ docInfo, cb, }: { docInfo: { storageId: string; ref: UsersStorageUserStorageId | null; } | null; cb: UploadCallback; }) => { const { isAdmin, userId } = useServizio(); if (docInfo?.storageId) { return (
Documento caricato
); } return ( ); }; const DocCheckpoint = () => { const { t } = useTranslation(); const { userId, servizio } = useServizio(); const utils = api.useUtils(); const { mutate, isPending } = api.servizio.updateServizio.useMutation({ onSuccess: async () => { await utils.servizio.getAllServizioAnnunci.invalidate({ userId, }); await utils.storage.retrieveUserFileData.invalidate({ userId }); await utils.servizio.getServizio.invalidate({ servizioId: servizio.servizio_id, }); }, onError: (err) => { toast.error(`Errore aggiornamento servizio: ${err.message}`); }, }); const handleUpload = ( field: "doc_personale_fronte_ref" | "doc_personale_retro_ref", id: string, ) => { mutate({ servizioId: servizio.servizio_id, data: { [field]: id }, }); }; return ( <>

Devi ancora caricare un tuo documento

Fronte documento: userStorageIds.length > 0 && userStorageIds[0] && handleUpload("doc_personale_fronte_ref", userStorageIds[0]) } docInfo={servizio.doc_personale_fronte} />
Retro documento: userStorageIds.length > 0 && userStorageIds[0] && handleUpload("doc_personale_retro_ref", userStorageIds[0]) } docInfo={servizio.doc_personale_retro} />


I tuoi dati saranno conservati solamente per la durata del servizio, in conformità con la nostra{" "} Informativa sulla Privacy

); }; const PreUnlock = () => { const { userId, servizioId } = useServizio(); const { annuncioId } = useServizioAnnuncio(); const { t } = useTranslation(); const utils = api.useUtils(); const { mutate, isPending } = api.servizio.unlockServizioContatti.useMutation( { onError: (err) => { toast.error(err.message, { id: "unlock-contacts", }); }, 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, }); }, }, ); const currentHour = new Date().getHours(); const isOutsideBusinessHours = currentHour < 9 || currentHour >= 20; return ( <>

{t.contatto.disclaimer}

{t.contatto.disclaimer2}

{t.contatto.disclaimer3}

{isOutsideBusinessHours && (

Il proprietario riceverà la notifica alle ore 9.00{" "} {currentHour >= 20 && "di domani"}

)}
); }; function getNavigationUrl(lat: string, lon: string): string { if (typeof window === "undefined") { return `https://www.google.com/maps/dir/?api=1&travelmode=driving&layer=traffic&destination=${lat},${lon}`; } const isIOS = /iPad|iPhone|iPod|Mac/.test(navigator.userAgent); const protocol = isIOS ? "maps" : "https"; return `${protocol}://www.google.com/maps/dir/?api=1&travelmode=driving&layer=traffic&destination=${lat},${lon}`; } const PostUnlock = () => { const { servizioId } = useServizio(); const { annuncioId } = useServizioAnnuncio(); const { data, isLoading } = api.annunci.getProprietarioData.useQuery({ annuncioId, servizioId, }); const { t } = useTranslation(); // Memoize navigation URL const navigationUrl = useMemo(() => { if (!data?.propData || !data.propData.lat || !data.propData.lon) return undefined; return getNavigationUrl(data.propData.lat, data.propData.lon); }, [data?.propData]); if (isLoading) { return ( ); } if (!data || !data.propData) { return (

{t.contatto.error}

); } const { opened_at, propData } = data; return ( <>
{/* Proprietario Section */}

{t.contatto.propietario}:

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

{propData.numero}
{/* Immobile Section */}

{t.contatto.immobile}:

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

{navigationUrl && ( {t.contatto.apri_nav} )}
{/* Warning */}

{t.contatto.contatta}

{t.contatto.orari}

{/* Metadata */}

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

); };