import { CircleCheck, Handshake } from "lucide-react"; import Link from "next/link"; import { useState } from "react"; import toast from "react-hot-toast"; import { AllegatoIframe } from "~/components/allegato-iframe"; import { LoadingPage } from "~/components/loading"; import { getStorageUrl } from "~/lib/storage_utils"; import { useTranslation } from "~/providers/I18nProvider"; import { useServizio, useServizioAnnuncio } from "~/providers/ServizioProvider"; import TipologiaPosizioneEnum from "~/schemas/public/TipologiaPosizioneEnum"; 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 LoadingButton from "../custom_ui/loading-button"; import { Button } from "../ui/button"; export const FileSection = ({ storageId }: { storageId: string }) => { const { data: fileInfos, isLoading } = api.storage.getFileInfos.useQuery({ storageId, }); const { t } = useTranslation(); if (isLoading) return ; if (!fileInfos) return

{t.file_section.error}

; return ( <> {t.file_section.download} ); }; export const ConfermaAnnuncioModal = () => { const { servizio } = useServizio(); const { t } = useTranslation(); const [open, setOpen] = useState(false); const needsDocuments = !servizio.skipDocMotivazione && !servizio.doc_motivazione && servizio.tipologia === TipologiaPosizioneEnum.Transitorio; return ( <> {t.richieste.conf_title} {t.richieste.conf_desc} {needsDocuments ? ( ) : ( setOpen(false)} /> )} ); }; const InvioConferma = ({ closeModal }: { closeModal: () => void }) => { const { servizioId } = useServizio(); const { annuncioId } = useServizioAnnuncio(); const { t } = useTranslation(); const utils = api.useUtils(); const { mutate, isPending } = api.servizio.userSendConfermaIntent.useMutation( { onError: (err) => { toast.error(err.message, { id: "updateRichiestaToast" }); }, onMutate: () => { toast.loading("Conferma in corso", { id: "updateRichiestaToast" }); }, onSuccess: async () => { toast.success("Richiesta confermata con successo", { id: "updateRichiestaToast", }); await utils.servizio.invalidate(); closeModal(); }, }, ); return ( <>

Hai fatto la visita? Se no contatta il proprietario!

{t.richieste.conferma_txt}

{t.richieste.conf_alert}

{ mutate({ annuncioId, servizioId, }); }} variant="info" > {t.procedi} ); }; const DocCheckpoint = () => { const { t, locale } = useTranslation(); const { userId, servizio, isAdmin } = useServizio(); const utils = api.useUtils(); const { mutate, isPending } = api.servizio.updateServizio.useMutation({ onSuccess: async () => { await utils.servizio.invalidate(); }, onError: (err) => { toast.error(`Errore aggiornamento servizio: ${err.message}`); }, }); const handleUpload = (id: UsersStorageUserStorageId) => { mutate({ servizioId: servizio.servizio_id, data: { doc_motivazione_ref: id }, }); }; return ( <>

{locale === "it" ? "Devi ancora caricare un tuo documento legato alla permanenza e motivazione di transitorietà" : "You still need to upload a document related to your stay and reason for transience"}



{locale === "it" ? "I tuoi dati saranno conservati solamente per la durata del servizio, in conformità con la nostra " : "Your data will be stored only for the duration of the service, in accordance with our "} {locale === "it" ? "Informativa sulla Privacy" : "Privacy Policy"}

); }; export const ConfermaInLavorazioneModal = () => { const { t, locale } = useTranslation(); const { data } = useServizioAnnuncio(); return ( {locale === "it" ? "In attesa di conferma" : "Awaiting confirmation"} Consegna status modal

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

{locale === "it" ? "La conferma è ancora in lavorazione. Stiamo verificando con i proprietari le condizioni e dettagli della conferma per riferirteli. Attendi una comunicazione." : "The confirmation is still in progress. We are checking with the owners the conditions and details of the confirmation to report them to you. Please wait for a communication."}

); };