import { CircleUser, Navigation, Phone, TriangleAlert } from "lucide-react"; import Link from "next/link"; import { useMemo, useState } 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 { DocumentiUploadSection } from "../area-riservata/documenti_personali"; 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"; export const ContattiProprietarioModal = () => { const { servizio } = useServizio(); const [open, setOpen] = useState(false); 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); const [showDocStep, setShowDocStep] = useState( open && (needsDocuments || !isUnlocked), ); return ( { setOpen(o); if (o && (needsDocuments || !isUnlocked)) { setShowDocStep(true); } }} open={open} > {isUnlocked ? ( ) : ( )} {t.contatto.title} {t.contatto.descrizione} {showDocStep ? ( ) : isUnlocked ? ( ) : ( )} ); }; const DocCheckpoint = ({ setStep }: { setStep: (value: boolean) => void }) => { const { t } = useTranslation(); const { userId, servizio, isAdmin } = useServizio(); const utils = api.useUtils(); const { mutate, isPending } = api.users.editUserAnagrafica.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: UsersStorageUserStorageId, ) => { mutate({ userId, data: { [field]: id, }, }); }; return ( <>

Carica i tuoi documenti

se si ha una scansione unica fronte/retro dei doc, caricarla due volte.

mutate({ userId, data: { doc_personale_fronte_ref: null }, }) } onUpload={(id) => handleUpload("doc_personale_fronte_ref", id)} title="Documento d'identità - Fronte" userId={userId} /> mutate({ userId, data: { doc_personale_retro_ref: null }, }) } onUpload={(id) => handleUpload("doc_personale_retro_ref", id)} title="Documento d'identità - Retro" userId={userId} />

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", })}

); };