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 { 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); //TODO need to show messaggio in alert dialog after invio conferma about adeguamento saldo e permanenza based on doc presented const needsDocuments = !servizio.skipDocMotivazione && !servizio.doc_motivazione && servizio.tipologia === TipologiaPosizioneEnum.Transitorio; return ( {t.richieste.conf_title} {t.richieste.conf_desc} {needsDocuments ? ( ) : ( )} ); }; const InvioConferma = ({ setOpen }: { setOpen: (value: boolean) => void }) => { const { userId, 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.getAllServizioAnnunci.invalidate({ userId }); setOpen(false); }, }, ); return ( <>

{t.richieste.conferma_txt}

{ mutate({ annuncioId, servizioId, }); }} variant="success" > {t.conferma} ); }; const DocCheckpoint = () => { const { t } = useTranslation(); const { userId, servizio, isAdmin } = 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 = (id: UsersStorageUserStorageId) => { mutate({ servizioId: servizio.servizio_id, data: { doc_motivazione_ref: id }, }); }; return ( <>

Devi ancora caricare un tuo documento legato alla permanenza e motivazione di transitorietà



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

); }; export const ConfermaInLavorazioneModal = () => { 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", hour: "2-digit", minute: "2-digit", month: "2-digit", year: "numeric", })}

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

); };